123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755 |
- package com.qxgmat.service.inline;
- import com.github.pagehelper.Page;
- import com.nuliji.tools.AbstractService;
- import com.nuliji.tools.Tools;
- import com.nuliji.tools.Transform;
- import com.nuliji.tools.exception.ParameterException;
- import com.nuliji.tools.exception.SystemException;
- import com.nuliji.tools.mybatis.Example;
- import com.qxgmat.data.constants.enums.ServiceKey;
- import com.qxgmat.data.constants.enums.module.CourseModule;
- import com.qxgmat.data.constants.enums.module.ProductType;
- import com.qxgmat.data.constants.enums.module.VsCourseType;
- import com.qxgmat.data.constants.enums.status.DirectionStatus;
- import com.qxgmat.data.constants.enums.trade.RecordSource;
- import com.qxgmat.data.dao.UserOrderRecordMapper;
- import com.qxgmat.data.dao.entity.UserOrder;
- import com.qxgmat.data.dao.entity.UserOrderRecord;
- import com.qxgmat.data.relation.UserOrderRecordRelationMapper;
- import com.qxgmat.data.relation.entity.CourseStudentNumberRelation;
- import com.qxgmat.data.relation.entity.MonthNumberRelation;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.stereotype.Service;
- import javax.annotation.Resource;
- import java.util.*;
- @Service
- public class UserOrderRecordService extends AbstractService {
- private static final Logger logger = LoggerFactory.getLogger(UserOrderRecordService.class);
- @Resource
- private UserOrderRecordMapper userOrderRecordMapper;
- @Resource
- private UserOrderRecordRelationMapper userOrderRecordRelationMapper;
- /**
- * 获取订单的所有记录
- * @param userId
- * @param orderId
- * @return
- */
- public List<UserOrderRecord> allByUser(Integer userId, Integer orderId){
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria()
- .andEqualTo("userId", userId)
- .andEqualTo("orderId", orderId)
- );
- return select(userOrderRecordMapper, example);
- }
- /**
- * 获取订单的所有记录
- * @param userId
- * @param orderIds
- * @return
- */
- public List<UserOrderRecord> allByUser(Integer userId, Collection orderIds){
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria()
- .andEqualTo("userId", userId)
- .andIn("orderId", orderIds)
- );
- return select(userOrderRecordMapper, example);
- }
- /**
- * 获取所有到期的未恢复记录
- * @param startTime
- * @param endTime
- * @return
- */
- public List<UserOrderRecord> allSuspendExpire(Date startTime, Date endTime){
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria()
- .andEqualTo("isSuspend", 1)
- .andIsNull("restoreTime")
- .andGreaterThanOrEqualTo("suspendTime", startTime)
- .andLessThanOrEqualTo("suspendTime", endTime)
- );
- return select(userOrderRecordMapper, example);
- }
- /**
- * 获取所有使用到期的课程记录
- * @param startTime
- * @param endTime
- * @return
- */
- public List<UserOrderRecord> allCourseUseExpire(Date startTime, Date endTime){
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria()
- .andEqualTo("productType", ProductType.COURSE.key)
- .andEqualTo("courseAward", 0)
- .andGreaterThanOrEqualTo("useEndTime", startTime)
- .andLessThanOrEqualTo("useEndTime", endTime)
- );
- return select(userOrderRecordMapper, example);
- }
- /**
- * 获取所有开通到期的课程记录
- * @param startTime
- * @param endTime
- * @return
- */
- public List<UserOrderRecord> allCourseOpenExpire(Date startTime, Date endTime){
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria()
- .andEqualTo("productType", ProductType.COURSE.key)
- .andEqualTo("isUsed", 0)
- .andGreaterThanOrEqualTo("endTime", startTime)
- .andLessThanOrEqualTo("endTime", endTime)
- );
- return select(userOrderRecordMapper, example);
- }
- /**
- * 获取所有到期的课程记录
- * @param startTime
- * @param endTime
- * @return
- */
- public List<UserOrderRecord> allServiceUseExpire(ServiceKey serviceKey, Date startTime, Date endTime){
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria()
- .andEqualTo("productType", ProductType.SERVICE.key)
- .andEqualTo("service", serviceKey.key)
- .andGreaterThanOrEqualTo("useEndTime", startTime)
- .andLessThanOrEqualTo("useEndTime", endTime)
- );
- return select(userOrderRecordMapper, example);
- }
- /**
- * 获取所有到期的课程记录
- * @param startTime
- * @param endTime
- * @return
- */
- public List<UserOrderRecord> allServiceOpenExpire(ServiceKey serviceKey, Date startTime, Date endTime){
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria()
- .andEqualTo("productType", ProductType.SERVICE.key)
- .andEqualTo("service", serviceKey.key)
- .andEqualTo("isUsed", 0)
- .andGreaterThanOrEqualTo("endTime", startTime)
- .andLessThanOrEqualTo("endTime", endTime)
- );
- return select(userOrderRecordMapper, example);
- }
- public List<MonthNumberRelation> groupByMonth(Date startTime, Date endTime, ProductType productType, Integer productId, ServiceKey serviceKey){
- return userOrderRecordRelationMapper.groupByMonth(startTime, endTime, productType != null ? productType.key : null, productId, serviceKey != null ? serviceKey.key : null);
- }
- /**
- * 列出购买资料的记录
- * @param page
- * @param size
- * @param dataId
- * @param isSubscribe
- * @return
- */
- public Page<UserOrderRecord> listWithData(int page, int size, Integer dataId, Boolean isSubscribe){
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria()
- .andEqualTo("productType", ProductType.DATA.key)
- .andEqualTo("productId", dataId)
- );
- if(isSubscribe != null){
- example.and(
- example.createCriteria()
- .andEqualTo("isSubscribe", isSubscribe ? 1: 0)
- );
- }
- return select(userOrderRecordMapper, example, page, size);
- }
- /**
- * 列出购买资料的记录
- * @param userId
- * @param dataIds
- * @return
- */
- public List<UserOrderRecord> listWithUserData(Integer userId, Collection dataIds){
- if (dataIds == null || dataIds.size() == 0) return new ArrayList<>();
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria()
- .andEqualTo("userId", userId)
- .andEqualTo("productType", ProductType.DATA.key)
- .andIn("productId", dataIds)
- );
- return select(userOrderRecordMapper, example);
- }
- /**
- * 列出购买资料的记录
- * @param dataId
- * @param userIds
- * @return
- */
- public List<UserOrderRecord> listWithDataUser(Integer dataId, Collection userIds){
- if (userIds == null || userIds.size() == 0) return new ArrayList<>();
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria()
- .andIn("userId", userIds)
- .andEqualTo("productType", ProductType.DATA.key)
- .andEqualTo("productId", dataId)
- );
- return select(userOrderRecordMapper, example);
- }
- /**
- * 列出购买资料的记录
- * @param userId
- * @param dataId
- * @return
- */
- public UserOrderRecord getWithUserData(Integer userId, Integer dataId){
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria()
- .andEqualTo("userId", userId)
- .andEqualTo("productType", ProductType.DATA.key)
- .andEqualTo("productId", dataId)
- );
- return one(userOrderRecordMapper, example);
- }
- /**
- * 获取小班课程学员列表
- * @param page
- * @param size
- * @param courseId
- * @param timeId
- * @return
- */
- public Page<UserOrderRecord> listAdminByOnline(int page, int size, Integer courseId, Integer timeId){
- Example example = new Example(UserOrderRecord.class);
- if(courseId != null){
- example.and(
- example.createCriteria()
- .andEqualTo("productType", ProductType.COURSE.key)
- .andEqualTo("productId", courseId)
- );
- }
- if(timeId != null){
- example.and(
- example.createCriteria()
- .andEqualTo("timeId", timeId)
- );
- }
- return select(userOrderRecordMapper, example, page, size);
- }
- /**
- * 获取小班课程全部学员记录
- * @param courseId
- * @param timeId
- * @return
- */
- public List<UserOrderRecord> listByOnline(Integer courseId, Integer timeId){
- Example example = new Example(UserOrderRecord.class);
- if(courseId != null){
- example.and(
- example.createCriteria()
- .andEqualTo("productType", ProductType.COURSE.key)
- .andEqualTo("productId", courseId)
- );
- }
- example.and(
- example.createCriteria()
- .andEqualTo("timeId", timeId)
- .andEqualTo("isStop", 0)
- );
- return select(userOrderRecordMapper, example);
- }
- /**
- * 更改小班课程课时时间段
- * @param courseId
- * @param timeId
- * @param startTime
- * @param endTime
- */
- public void changeStudentTime(Integer courseId, Integer timeId, Date startTime, Date endTime){
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria()
- .andEqualTo("productType", ProductType.COURSE.key)
- .andEqualTo("productId", courseId)
- .andEqualTo("timeId", timeId)
- );
- update(userOrderRecordMapper, example, UserOrderRecord.builder().useStartTime(startTime).useEndTime(endTime).build());
- }
- public List<CourseStudentNumberRelation> groupByCourse(Collection ids){
- if (ids == null || ids.size() == 0) return new ArrayList<>();
- return userOrderRecordRelationMapper.groupByTime(ids);
- }
- /**
- * 获取小班课程记录
- * @param userId
- * @param courseId
- * @param timeId
- * @return
- */
- public UserOrderRecord getByUserAndTime(Integer userId, Integer courseId, Integer timeId){
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria()
- .andEqualTo("userId", userId)
- .andEqualTo("productType", ProductType.COURSE.key)
- .andEqualTo("productId", courseId)
- .andEqualTo("timeId", timeId)
- .andEqualTo("isStop", 0)
- );
- return one(userOrderRecordMapper, example);
- }
- public UserOrderRecord addStudent(UserOrderRecord course){
- UserOrderRecord in = getByUserAndTime(course.getUserId(), course.getProductId(), course.getTimeId());
- if(in != null){
- throw new ParameterException("已添加");
- }
- return add(course);
- }
- public Page<UserOrderRecord> listAdmin(int page, int size, Integer orderId, Integer userId, ProductType productType, Integer productId, ServiceKey service, RecordSource source, Boolean needMoney, Boolean needPackage, String order, DirectionStatus direction){
- Example example = new Example(UserOrderRecord.class);
- if(orderId != null){
- example.and(
- example.createCriteria()
- .andEqualTo("orderId", orderId)
- );
- }
- if(userId != null){
- example.and(
- example.createCriteria()
- .andEqualTo("userId", userId)
- );
- }
- if (source != null){
- example.and(
- example.createCriteria()
- .andEqualTo("source", source.key)
- );
- }
- if(needMoney != null){
- example.and(
- needMoney ?
- example.createCriteria()
- .andGreaterThan("orderId", 0) :
- example.createCriteria()
- .andEqualTo("orderId", 0)
- );
- }
- if(productType != null){
- example.and(
- example.createCriteria()
- .andEqualTo("productType", productType.key)
- );
- if (productId != null)
- example.and(
- example.createCriteria()
- .andEqualTo("productId", productId)
- );
- }else if(needPackage != null && !needPackage){
- example.and(
- example.createCriteria()
- .andNotEqualTo("productType", ProductType.COURSE_PACKAGE.key)
- );
- }
- if (service != null)
- example.and(
- example.createCriteria()
- .andEqualTo("service", service.key)
- );
- if(order == null || order.isEmpty()) order = "id";
- switch(direction){
- case ASC:
- example.orderBy(order).asc();
- break;
- case DESC:
- default:
- example.orderBy(order).desc();
- }
- return select(userOrderRecordMapper, example, page, size);
- }
- /**
- * 获取已购买记录
- * @param order
- * @param direction
- * @return
- */
- public Page<UserOrderRecord> list(int page, int size, Integer userId, ProductType productType, Integer productId, ServiceKey service, Boolean isUsed, Boolean isExpire, Boolean filterChildren, String order, DirectionStatus direction){
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria()
- .andEqualTo("userId", userId)
- .andEqualTo("isStop", 0)
- .andNotEqualTo("productType", ProductType.COURSE_PACKAGE.key)
- );
- if(isUsed != null){
- example.and(
- example.createCriteria()
- .andEqualTo("isUsed", isUsed ? 1 : 0)
- );
- }
- if(isExpire != null){
- Date now = new Date();
- example.and(
- isExpire ? example.createCriteria().
- andLessThan("endTime", now)
- :
- example.createCriteria()
- .andLessThanOrEqualTo("startTime", now)
- .andGreaterThan("endTime", now)
- );
- }
- if (filterChildren != null && filterChildren)
- example.and(
- example.createCriteria().
- andEqualTo("parentId", 0)
- );
- if(productType != null) {
- example.and(
- example.createCriteria()
- .andEqualTo("productType", productType.key)
- );
- if (productId != null)
- example.and(
- example.createCriteria()
- .andEqualTo("productId", productId)
- );
- }
- if (service != null)
- example.and(
- example.createCriteria()
- .andEqualTo("service", service.key)
- );
- example.and(
- example.createCriteria()
- .andEqualTo("isStop", 0)
- );
- if(order == null || order.isEmpty()) order = "id";
- switch(direction){
- case ASC:
- example.orderBy(order).asc();
- break;
- case DESC:
- default:
- example.orderBy(order).desc();
- }
- return select(userOrderRecordMapper, example, page, size);
- }
- /**
- * 判断是否有资料权限
- * @param userId
- * @param dataId
- * @return
- */
- public boolean hasData(Integer userId, Integer dataId){
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria()
- .andEqualTo("userId", userId)
- .andEqualTo("productType", ProductType.DATA.key)
- .andEqualTo("productId", dataId)
- .andEqualTo("isStop", 0)
- );
- UserOrderRecord service = one(userOrderRecordMapper, example);
- return service != null;
- }
- /**
- * 获取未开通的服务记录
- * @param userId
- * @param key
- * @return
- */
- public UserOrderRecord getUnUseService(Integer userId, ServiceKey key){
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria()
- .andEqualTo("userId", userId)
- .andEqualTo("service", key.key)
- .andLessThanOrEqualTo("startTime", new Date())
- .andGreaterThan("endTime", new Date())
- .andEqualTo("isUsed", 0)
- .andEqualTo("isStop", 0)
- );
- example.orderBy("startTime").asc();
- UserOrderRecord record = one(userOrderRecordMapper, example);
- return record;
- }
- /**
- * 列出用户服务记录
- * @param page
- * @param size
- * @param service
- * @param param
- * @param userId
- * @return
- */
- public Page<UserOrderRecord> listWithServiceAdmin(int page, int size, ServiceKey service, String param, Integer userId, String order, DirectionStatus direction){
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria().andEqualTo("productType", ProductType.SERVICE.key)
- );
- if (service != null){
- example.and(
- example.createCriteria().andEqualTo("service", service.key)
- );
- if (param != null){
- example.and(
- example.createCriteria().andEqualTo("param", param)
- );
- }
- }
- if (userId != null){
- example.and(
- example.createCriteria().andEqualTo("userId", userId)
- );
- }
- if(order == null || order.isEmpty()) order = "id";
- switch(direction){
- case ASC:
- example.orderBy(order).asc();
- break;
- case DESC:
- default:
- example.orderBy(order).desc();
- }
- return select(userOrderRecordMapper, example, page, size);
- }
- /**
- * 列出用户学习记录
- * @param page
- * @param size
- * @param courseId
- * @param userId
- * @return
- */
- public Page<UserOrderRecord> listWithStudentAdmin(int page, int size, Integer courseId, Integer userId){
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria().andEqualTo("productType", ProductType.COURSE.key)
- );
- if (courseId != null){
- example.and(
- example.createCriteria().andEqualTo("productId", courseId)
- );
- }
- if (userId != null){
- example.and(
- example.createCriteria().andEqualTo("userId", userId)
- );
- }
- return select(userOrderRecordMapper, example, page, size);
- }
- private Map<String, String> adminMap = new HashMap<String, String>(){{
- put("", "uor");
- }};
- /**
- * 列出用户学习记录
- * @param page
- * @param size
- * @param courseId
- * @param userId
- * @return
- */
- public Page<UserOrderRecord> listWithStudyAdmin(int page, int size, String[] modules, Integer structId, Integer courseId, Integer userId, String teacher, String order, DirectionStatus direction){
- // todo teacher
- if(order == null || order.isEmpty()){
- order = "id";
- }
- if(adminMap.containsKey(order)){
- order = adminMap.get(order)+".`"+Tools.underscoreName(order)+"`";
- }else{
- order = adminMap.get("")+".`"+Tools.underscoreName(order)+"`";
- }
- if (direction == null){
- direction = DirectionStatus.DESC;
- }
- String finalOrder = order;
- DirectionStatus finalDirection = direction;
- Page<UserOrderRecord> p = page(
- ()-> userOrderRecordRelationMapper.listWithStudyAdmin(modules, structId, courseId, userId, teacher, finalOrder, finalDirection.key)
- , page, size);
- Collection ids = Transform.getIds(p, UserOrderRecord.class, "id");
- Transform.replace(p, select(ids), UserOrderRecord.class, "id");
- return p;
- }
- /**
- * 列出用户学习记录
- * @param page
- * @param size
- * @param courseId
- * @param userId
- * @return
- */
- public Page<UserOrderRecord> listWithVs(int page, int size, VsCourseType vsType, Integer courseId, Integer userId, String order, DirectionStatus direction){
- if(order == null || order.isEmpty()){
- order = "id";
- }
- if(adminMap.containsKey(order)){
- order = adminMap.get(order)+".`"+Tools.underscoreName(order)+"`";
- }else{
- order = adminMap.get("")+".`"+Tools.underscoreName(order)+"`";
- }
- if (direction == null){
- direction = DirectionStatus.DESC;
- }
- String finalOrder = order;
- DirectionStatus finalDirection = direction;
- Page<UserOrderRecord> p = page(
- ()-> userOrderRecordRelationMapper.listWithVs(vsType != null ? vsType.key : null, courseId, userId, finalOrder, finalDirection.key)
- , page, size);
- Collection ids = Transform.getIds(p, UserOrderRecord.class, "id");
- Transform.replace(p, select(ids), UserOrderRecord.class, "id");
- return p;
- }
- /**
- * 列出用户购课记录
- * @param page
- * @param size
- * @param userId
- * @return
- */
- public Page<UserOrderRecord> listWithCourse(int page, int size, Integer userId, String[] modules, Boolean isUsed, Boolean isEnd, String order, DirectionStatus direction){
- if(order == null || order.isEmpty()){
- order = "id";
- }
- if (direction == null){
- direction = DirectionStatus.DESC;
- }
- String finalOrder = order;
- DirectionStatus finalDirection = direction;
- Date ltUseEndTime = null;
- Date gtUseEndTime = null;
- if (isEnd != null){
- // 是否结束,根据当前时间进行sql处理
- if (isEnd){
- ltUseEndTime = new Date();
- }else{
- gtUseEndTime = new Date();
- }
- }
- Date finalLtUseEndTime = ltUseEndTime;
- Date finalGtUseEndTime = gtUseEndTime;
- Page<UserOrderRecord> p = page(
- ()-> userOrderRecordRelationMapper.listWithCourse(userId, modules, isUsed, finalLtUseEndTime, finalGtUseEndTime, finalOrder, finalDirection.key)
- , page, size);
- Collection ids = Transform.getIds(p, UserOrderRecord.class, "id");
- Transform.replace(p, select(ids), UserOrderRecord.class, "id");
- return p;
- }
- /**
- * 获取最大vs课程编号
- * @param userId
- * @return
- */
- public Integer maxVsNo(Integer userId){
- Example example = new Example(UserOrderRecord.class);
- example.and(
- example.createCriteria()
- .andEqualTo("userId", userId)
- .andEqualTo("productType", ProductType.COURSE.key)
- );
- example.orderBy("vsNo").desc();
- UserOrderRecord record = one(userOrderRecordMapper, example);
- return record != null ? record.getVsNo() : 0;
- }
- public UserOrderRecord add(UserOrderRecord record){
- int result = insert(userOrderRecordMapper, record);
- record = one(userOrderRecordMapper, record.getId());
- if(record == null){
- throw new SystemException("服务记录添加失败");
- }
- return record;
- }
- public UserOrderRecord edit(UserOrderRecord service){
- UserOrderRecord in = one(userOrderRecordMapper, service.getId());
- if(in == null){
- throw new ParameterException("服务记录不存在");
- }
- int result = update(userOrderRecordMapper, service);
- return service;
- }
- public boolean delete(Number id){
- UserOrderRecord in = one(userOrderRecordMapper, id);
- if(in == null){
- throw new ParameterException("服务记录不存在");
- }
- int result = delete(userOrderRecordMapper, id);
- return result > 0;
- }
- public UserOrderRecord get(Number id){
- UserOrderRecord in = one(userOrderRecordMapper, id);
- if(in == null){
- throw new ParameterException("服务记录不存在");
- }
- return in;
- }
- public Page<UserOrderRecord> select(int page, int pageSize){
- return select(userOrderRecordMapper, page, pageSize);
- }
- public Page<UserOrderRecord> select(Integer[] ids){
- return page(()->select(userOrderRecordMapper, ids), 1, ids.length);
- }
- public List<UserOrderRecord> select(Collection ids){
- return select(userOrderRecordMapper, ids);
- }
- }
|