diff --git a/src/main/java/com/peanut/common/utils/UserCourseBuyUtil.java b/src/main/java/com/peanut/common/utils/UserCourseBuyUtil.java index 326b213a..79a792a9 100644 --- a/src/main/java/com/peanut/common/utils/UserCourseBuyUtil.java +++ b/src/main/java/com/peanut/common/utils/UserCourseBuyUtil.java @@ -21,6 +21,102 @@ public class UserCourseBuyUtil { // userCourseBuyOnload(); // userCourseBuyOnload2(); // userVipUpdate(); +// distinctUserCourseBuy(); +// addUserCourseBuyLog(); + } + public static void addUserCourseBuyLog() { + try { + Connection fzdsconn = DriverManager.getConnection( + "jdbc:mysql://rm-2zev4157t67trxuu3yo.mysql.rds.aliyuncs.com:3306/e_book_test?rewriteBatchedStatements=true", + "nuttyreading", "Wu751019!"); + PreparedStatement addUserCourseBuyLogStatement = fzdsconn.prepareStatement( + "INSERT ignore INTO user_course_buy_log (user_course_buy_id,user_id,type,pay_type,pay_time,order_sn,days,fee) " + + "VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); + PreparedStatement statement = fzdsconn.prepareStatement(""" + select t.*,ucb.id,ROUND(orderPrice/t.productCount,2) price,ucb.days,ucb.come,ucb.start_time startTime,ucb.end_time endTime + from + ( + select bo.order_sn orderSn,bo.create_time createTime,IF(bo.payment_method=1,'微信',IF(bo.payment_method=2,'支付宝','天医币')) payType,sp.product_name title, + (select count(1) from shop_product_course where del_flag = 0 and product_id = bop.product_id) productCount, + bo.real_money orderPrice,bo.user_id userId,spc.course_id courseId,spc.catalogue_id catalogueId + from buy_order bo + left join buy_order_product bop on bop.order_id = bo.order_id + left join shop_product sp on sp.product_id = bop.product_id + left join shop_product_course spc on spc.product_id = sp.product_id + where bo.del_flag = 0 and bo.order_status = 3 and bo.order_type = 'order' and real_money > 0 + and sp.goods_type = '05' and spc.del_flag = 0 and sp.product_id not in (1759,1758,1743,1741,1740,1739,1738,1737,1736,1735,1734,17331732,1731) + and bo.user_id not in (select id from user where tel in ('18812616272','13110039505','18526084267','12222222222','13333333333','14444444444','15555555555','16666666666','17777777777','18888888888','1774455','15533','165965','164964','54321','111','13662001490','15505153873','18834844847','17602219785','19999999999','12299','166933','16855','17602634511','16161616161','17171717171','112112112','21212121211','222222','666666','123123','789789','96','25252525','3434343434','123789','124789','789789','163963','5656','19966','1664455','15151515151','256366','986986','18834844846','18834844849','15611027864','18047689535','18834844848','456456456')) + ) t + left join user_course_buy ucb on ucb.user_id = t.userId and ucb.course_id = t.courseId and ucb.catalogue_id = t.catalogueId and ucb.come like CONCAT('%',t.orderSn,'%') + where ucb.del_flag = 0 + union + select t.*,ucb.id,t.orderPrice price,ucb.days,ucb.come,ucb.start_time startTime,ucb.end_time endTime + from + ( + select bo.order_sn orderSn,bo.create_time createTime,IF(bo.payment_method=1,'微信',IF(bo.payment_method=2,'支付宝','天医币')) payType,bo.remark title,1 productCount,bo.real_money orderPrice,bo.user_id userId,spc.course_id courseId,spc.catalogue_id catalogueId + from buy_order bo + left join shop_product sp on sp.product_id = SUBSTR(bo.remark FROM 1 FOR 4) + left join shop_product_course spc on spc.product_id = sp.product_id + where bo.del_flag = 0 and bo.order_status = 3 and bo.order_type = 'relearn' and real_money > 0 + and sp.goods_type = '05' and spc.del_flag = 0 and sp.product_id not in (1759,1758,1743,1741,1740,1739,1738,1737,1736,1735,1734,17331732,1731) + and bo.user_id not in (select id from user where tel in ('18812616272','13110039505','18526084267','12222222222','13333333333','14444444444','15555555555','16666666666','17777777777','18888888888','1774455','15533','165965','164964','54321','111','13662001490','15505153873','18834844847','17602219785','19999999999','12299','166933','16855','17602634511','16161616161','17171717171','112112112','21212121211','222222','666666','123123','789789','96','25252525','3434343434','123789','124789','789789','163963','5656','19966','1664455','15151515151','256366','986986','18834844846','18834844849','15611027864','18047689535','18834844848','456456456')) + ) t + left join user_course_buy ucb on ucb.user_id = t.userId and ucb.course_id = t.courseId and ucb.catalogue_id = t.catalogueId and ucb.come like CONCAT('%',t.orderSn,'%') + where ucb.del_flag = 0 + order by orderSn + """); + ResultSet resultSet = statement.executeQuery(); + while(resultSet.next()){ + addUserCourseBuyLogStatement.setString(1,resultSet.getString("id")); + addUserCourseBuyLogStatement.setString(2,resultSet.getString("userId")); + addUserCourseBuyLogStatement.setString(3,"order"); + addUserCourseBuyLogStatement.setString(4,resultSet.getString("payType")); + addUserCourseBuyLogStatement.setTimestamp(5,resultSet.getTimestamp("createTime")); + addUserCourseBuyLogStatement.setString(6,resultSet.getString("orderSn")); + addUserCourseBuyLogStatement.setString(7,resultSet.getString("days")); + addUserCourseBuyLogStatement.setString(8,resultSet.getString("price")); + addUserCourseBuyLogStatement.addBatch(); + } + addUserCourseBuyLogStatement.executeBatch(); + } catch (Exception e) { + System.out.println(e); + } + + } + + public static void distinctUserCourseBuy() { + try { + Connection fzdsconn = DriverManager.getConnection( + "jdbc:mysql://rm-2zev4157t67trxuu3yo.mysql.rds.aliyuncs.com:3306/e_book_test?rewriteBatchedStatements=true", + "nuttyreading", "Wu751019!"); + PreparedStatement statement = fzdsconn.prepareStatement(""" + select user_id,course_id,catalogue_id,count(1) c from user_course_buy where del_flag = 0 + group by user_id,course_id,catalogue_id + HAVING c > 1 + order by c desc + """); + ResultSet resultSet = statement.executeQuery(); + while(resultSet.next()){ + System.out.println(resultSet.getString("user_id")); + PreparedStatement ucbStatement = fzdsconn.prepareStatement("select * from user_course_buy where del_flag = 0 " + + "and user_id = "+resultSet.getString("user_id")+" " + + "and course_id = "+resultSet.getString("course_id")+" " + + "and catalogue_id = "+resultSet.getString("catalogue_id")+""); + ResultSet ucbResultSet = ucbStatement.executeQuery(); + int i=0; + while(ucbResultSet.next()){ + if(i!=0){ + PreparedStatement delStatement = fzdsconn.prepareStatement( + "update user_course_buy set del_flag = -1 where id = "+ucbResultSet.getString("id")); + delStatement.executeUpdate(); + } + i++; + } + } + } catch (Exception e) { + System.out.println(e); + } + } public static void userEbookBuy250410() { diff --git a/src/main/java/com/peanut/modules/book/controller/BuyOrderController.java b/src/main/java/com/peanut/modules/book/controller/BuyOrderController.java index 6eb8ec91..66c3b94c 100644 --- a/src/main/java/com/peanut/modules/book/controller/BuyOrderController.java +++ b/src/main/java/com/peanut/modules/book/controller/BuyOrderController.java @@ -10,6 +10,14 @@ import com.peanut.common.utils.R; import com.peanut.config.Constants; import com.peanut.config.DelayQueueConfig; import com.peanut.modules.book.service.*; +import com.peanut.modules.book.service.BuyOrderService; +import com.peanut.modules.book.service.CityService; +import com.peanut.modules.book.service.CountyService; +import com.peanut.modules.book.service.ExpressOrderService; +import com.peanut.modules.book.service.MyUserService; +import com.peanut.modules.book.service.ProvinceService; +import com.peanut.modules.book.service.TransactionDetailsService; +import com.peanut.modules.book.service.UserAddressService; import com.peanut.modules.book.to.UserOrderDto; import com.peanut.modules.book.vo.UserAddressVo; import com.peanut.modules.book.vo.request.BuyOrderListRequestVo; @@ -20,10 +28,7 @@ import com.peanut.modules.book.vo.response.BuyOrderResponseVo; import com.peanut.modules.book.vo.response.OrderAddressResponseVo; import com.peanut.modules.common.dao.UserCourseBuyDao; import com.peanut.modules.common.entity.*; -import com.peanut.modules.common.service.CouponHistoryService; -import com.peanut.modules.common.service.CouponService; -import com.peanut.modules.common.service.JfTransactionDetailsService; -import com.peanut.modules.common.service.UserVipService; +import com.peanut.modules.common.service.*; import com.peanut.modules.pay.weChatPay.dto.WechatPaymentInfo; import com.peanut.modules.pay.weChatPay.service.WxpayService; import com.peanut.modules.sys.entity.SysConfigEntity; @@ -105,6 +110,8 @@ public class BuyOrderController { private CouponService couponService; @Autowired private CouponHistoryService couponHistoryService; + @Autowired + private UserCourseBuyLogService userCourseBuyLogService; @RequestMapping(value = "/decomposeShipment", method = RequestMethod.POST) public R decomposeShipment(@RequestBody BuyOrderListRequestVo requestVo) { @@ -1125,8 +1132,18 @@ public class BuyOrderController { wrapper2.eq(UserCourseBuyEntity::getCatalogueId,s.getCatalogueId()); wrapper2.and(r->r.isNull(UserCourseBuyEntity::getEndTime).or().gt(UserCourseBuyEntity::getEndTime,new Date())); List userCourseBuyEntities = userCourseBuyDao.selectList(wrapper2); + //插入开课记录 + UserCourseBuyLog userCourseBuyLog = new UserCourseBuyLog(); + userCourseBuyLog.setUserId(orderEntity.getUserId()); + userCourseBuyLog.setType("order"); + userCourseBuyLog.setPayType("天医币"); + userCourseBuyLog.setPayTime(orderEntity.getCreateTime()); + userCourseBuyLog.setOrderSn(orderEntity.getOrderSn()); if(userCourseBuyEntities.size()>0){//延长有效期 UserCourseBuyEntity userCourseBuyEntity = userCourseBuyEntities.get(0); + userCourseBuyLog.setUserCourseBuyId(userCourseBuyEntity.getId()); + userCourseBuyLog.setBeginDay(userCourseBuyEntity.getDays()+1); + userCourseBuyLog.setDays(s.getDays()); userCourseBuyEntity.setDays(userCourseBuyEntity.getDays()+s.getDays()); if(userCourseBuyEntity.getEndTime()!=null){ Calendar calendar = Calendar.getInstance(); @@ -1150,7 +1167,13 @@ public class BuyOrderController { // userCourseBuyEntity.setEndTime(cal.getTime()); userCourseBuyEntity.setCome("虚拟币购买:"+orderEntity.getOrderSn()); userCourseBuyDao.insert(userCourseBuyEntity); + userCourseBuyLog.setUserCourseBuyId(userCourseBuyEntity.getId()); + userCourseBuyLog.setBeginDay(0); + userCourseBuyLog.setDays(s.getDays()); } + userCourseBuyLog.setFee(orderEntity.getRealMoney().divide(new BigDecimal(orderCourse.size()),2, BigDecimal.ROUND_HALF_UP)); + userCourseBuyLog.setJf(orderEntity.getJfDeduction().divide(new BigDecimal(orderCourse.size()),2, BigDecimal.ROUND_HALF_UP)); + userCourseBuyLogService.save(userCourseBuyLog); } } diff --git a/src/main/java/com/peanut/modules/book/controller/MyUserController.java b/src/main/java/com/peanut/modules/book/controller/MyUserController.java index 2cd555de..d6334bdb 100644 --- a/src/main/java/com/peanut/modules/book/controller/MyUserController.java +++ b/src/main/java/com/peanut/modules/book/controller/MyUserController.java @@ -642,18 +642,17 @@ public class MyUserController { } TransactionDetailsEntity transactionDetailsEntity = new TransactionDetailsEntity(); transactionDetailsEntity.setUserId(Integer.valueOf(id)); - transactionDetailsEntity.setOrderType("后台充扣操作"); transactionDetailsEntity.setTel(byId.getTel()); transactionDetailsEntity.setUserName(byId.getNickname()); transactionDetailsEntity.setNote(params.get("note")); if (pointType.equals("0")) { + transactionDetailsEntity.setOrderType("后台充值"); transactionDetailsEntity.setChangeAmount(pointAmount); - transactionDetailsEntity.setRemark("充值"); transactionDetailsEntity.setPayMethod(params.get("payMethod")); transactionDetailsEntity.setPayNo(params.get("payNo")); }else { + transactionDetailsEntity.setOrderType("后台扣费"); transactionDetailsEntity.setChangeAmount(pointAmount.negate()); - transactionDetailsEntity.setRemark("扣费"); } transactionDetailsEntity.setUserBalance(i); transactionDetailsService.save(transactionDetailsEntity); diff --git a/src/main/java/com/peanut/modules/book/service/impl/TransactionDetailsServiceImpl.java b/src/main/java/com/peanut/modules/book/service/impl/TransactionDetailsServiceImpl.java index 4b91248e..94cabae9 100644 --- a/src/main/java/com/peanut/modules/book/service/impl/TransactionDetailsServiceImpl.java +++ b/src/main/java/com/peanut/modules/book/service/impl/TransactionDetailsServiceImpl.java @@ -59,7 +59,7 @@ public class TransactionDetailsServiceImpl extends ServiceImpl list = transactionDetailsService.list(wrapper); for (TransactionDetailsEntity detail:list){ String productName = ""; - String orderSn = detail.getRemark().contains("20")?detail.getRemark().substring(detail.getRemark().indexOf("20")):""; + String orderSn = detail.getPayNo(); BuyOrder buyOrder = buyOrderService.getOne(new LambdaQueryWrapper() .eq(BuyOrder::getOrderSn,orderSn)); if (buyOrder!=null){ diff --git a/src/main/java/com/peanut/modules/common/dao/TransactionDetailsDao.java b/src/main/java/com/peanut/modules/common/dao/TransactionDetailsDao.java index b9d007c6..7ed806a5 100644 --- a/src/main/java/com/peanut/modules/common/dao/TransactionDetailsDao.java +++ b/src/main/java/com/peanut/modules/common/dao/TransactionDetailsDao.java @@ -18,6 +18,8 @@ import java.util.Map; @Mapper public interface TransactionDetailsDao extends BaseMapper { + Map getUserSurplusPeanutCoin(@Param("date") String date); + List> getTransactionDetailsTotal(@Param("date") String date); List> getTransactionDetailsInfo(@Param("date") String date); diff --git a/src/main/java/com/peanut/modules/common/dao/UserCourseBuyDao.java b/src/main/java/com/peanut/modules/common/dao/UserCourseBuyDao.java index ed74bf89..631ad436 100644 --- a/src/main/java/com/peanut/modules/common/dao/UserCourseBuyDao.java +++ b/src/main/java/com/peanut/modules/common/dao/UserCourseBuyDao.java @@ -3,7 +3,15 @@ package com.peanut.modules.common.dao; import com.github.yulichang.base.MPJBaseMapper; import com.peanut.modules.common.entity.UserCourseBuyEntity; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; @Mapper public interface UserCourseBuyDao extends MPJBaseMapper { + + List> getUserCourseBuyInfo(@Param("date") String date); + + List> getUserCourseBuyInfoTotal(@Param("date") String date); } diff --git a/src/main/java/com/peanut/modules/common/dao/UserCourseBuyLogDao.java b/src/main/java/com/peanut/modules/common/dao/UserCourseBuyLogDao.java new file mode 100644 index 00000000..6fa100bd --- /dev/null +++ b/src/main/java/com/peanut/modules/common/dao/UserCourseBuyLogDao.java @@ -0,0 +1,9 @@ +package com.peanut.modules.common.dao; + +import com.github.yulichang.base.MPJBaseMapper; +import com.peanut.modules.common.entity.UserCourseBuyLog; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface UserCourseBuyLogDao extends MPJBaseMapper { +} diff --git a/src/main/java/com/peanut/modules/common/entity/TransactionDetailsEntity.java b/src/main/java/com/peanut/modules/common/entity/TransactionDetailsEntity.java index 5e13e743..6e064dc9 100644 --- a/src/main/java/com/peanut/modules/common/entity/TransactionDetailsEntity.java +++ b/src/main/java/com/peanut/modules/common/entity/TransactionDetailsEntity.java @@ -43,10 +43,6 @@ public class TransactionDetailsEntity implements Serializable { * 关联id */ private Integer relationId; - /** - * 备注 - */ - private String remark; /** * 支付方式 */ diff --git a/src/main/java/com/peanut/modules/common/entity/UserCourseBuyLog.java b/src/main/java/com/peanut/modules/common/entity/UserCourseBuyLog.java new file mode 100644 index 00000000..bd78d35b --- /dev/null +++ b/src/main/java/com/peanut/modules/common/entity/UserCourseBuyLog.java @@ -0,0 +1,49 @@ +package com.peanut.modules.common.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +@TableName("user_course_buy_log") +public class UserCourseBuyLog { + + @TableId + private Integer id; + + private Integer userCourseBuyId; + + private Integer userId; + + private String type; + + private String payType; + + private Date payTime; + + private String orderSn; + + private Integer adminId; + + private Integer beginDay; + + private Integer days; + + private BigDecimal fee; + + private BigDecimal jf; + + private String remark; + + private String state; + + private Date createTime; + + @TableLogic + private Integer delFlag; + +} diff --git a/src/main/java/com/peanut/modules/common/service/TransactionDetailsService.java b/src/main/java/com/peanut/modules/common/service/TransactionDetailsService.java index a41ccdd4..d164322d 100644 --- a/src/main/java/com/peanut/modules/common/service/TransactionDetailsService.java +++ b/src/main/java/com/peanut/modules/common/service/TransactionDetailsService.java @@ -8,6 +8,8 @@ import java.util.Map; public interface TransactionDetailsService extends IService { + Map getUserSurplusPeanutCoin(String date); + List> getTransactionDetailsTotal(String date); List> getTransactionDetailsInfo(String date); diff --git a/src/main/java/com/peanut/modules/common/service/UserCourseBuyLogService.java b/src/main/java/com/peanut/modules/common/service/UserCourseBuyLogService.java new file mode 100644 index 00000000..8b84723b --- /dev/null +++ b/src/main/java/com/peanut/modules/common/service/UserCourseBuyLogService.java @@ -0,0 +1,13 @@ +package com.peanut.modules.common.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.peanut.modules.common.entity.UserCourseBuyLog; + +import java.util.List; +import java.util.Map; + +public interface UserCourseBuyLogService extends IService { + + List> getIncome(String date); + +} diff --git a/src/main/java/com/peanut/modules/common/service/UserVipLogService.java b/src/main/java/com/peanut/modules/common/service/UserVipLogService.java index ce962781..63a1755f 100644 --- a/src/main/java/com/peanut/modules/common/service/UserVipLogService.java +++ b/src/main/java/com/peanut/modules/common/service/UserVipLogService.java @@ -5,6 +5,7 @@ import com.peanut.modules.common.entity.UserVip; import com.peanut.modules.common.entity.UserVipLog; import java.math.BigDecimal; +import java.util.Date; import java.util.List; import java.util.Map; @@ -12,6 +13,8 @@ public interface UserVipLogService extends IService { boolean addUserVipLog(UserVipLog userVipLog); + boolean addUserVipLogOrder(int userId, int userVipId,String orderSn, Date startTime, Date endTime, BigDecimal fee, BigDecimal jf, String payType); + boolean addUserVipLog(Map params, UserVip userVip); BigDecimal countDayAmount(UserVipLog userVipLog); diff --git a/src/main/java/com/peanut/modules/common/service/impl/TransactionDetailsServiceImpl.java b/src/main/java/com/peanut/modules/common/service/impl/TransactionDetailsServiceImpl.java index 3f1a3af0..76e89ced 100644 --- a/src/main/java/com/peanut/modules/common/service/impl/TransactionDetailsServiceImpl.java +++ b/src/main/java/com/peanut/modules/common/service/impl/TransactionDetailsServiceImpl.java @@ -13,6 +13,12 @@ import java.util.Map; @Slf4j @Service("commonTransactionDetailsService") public class TransactionDetailsServiceImpl extends ServiceImpl implements TransactionDetailsService { + + @Override + public Map getUserSurplusPeanutCoin(String date) { + return this.baseMapper.getUserSurplusPeanutCoin(date); + } + @Override public List> getTransactionDetailsTotal(String date) { return this.baseMapper.getTransactionDetailsTotal(date); diff --git a/src/main/java/com/peanut/modules/common/service/impl/UserCourseBuyLogServiceImpl.java b/src/main/java/com/peanut/modules/common/service/impl/UserCourseBuyLogServiceImpl.java new file mode 100644 index 00000000..18499231 --- /dev/null +++ b/src/main/java/com/peanut/modules/common/service/impl/UserCourseBuyLogServiceImpl.java @@ -0,0 +1,26 @@ +package com.peanut.modules.common.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.peanut.modules.common.dao.UserCourseBuyLogDao; +import com.peanut.modules.common.entity.UserCourseBuyLog; +import com.peanut.modules.common.service.UserCourseBuyLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +@Slf4j +@Service("commonUserCourseBuyLogService") +public class UserCourseBuyLogServiceImpl extends ServiceImpl implements UserCourseBuyLogService { + @Override + public List> getIncome(String date) { + return this.baseMapper.selectMaps(new MPJLambdaWrapper() + .select(UserCourseBuyLog::getPayType) + .selectSum(UserCourseBuyLog::getFee) + .apply("DATE_FORMAT(pay_time,'%Y-%m') = '"+date+"'") + .groupBy(UserCourseBuyLog::getPayType)); + } +} diff --git a/src/main/java/com/peanut/modules/common/service/impl/UserVipLogServiceImpl.java b/src/main/java/com/peanut/modules/common/service/impl/UserVipLogServiceImpl.java index 918eabff..7776ed2c 100644 --- a/src/main/java/com/peanut/modules/common/service/impl/UserVipLogServiceImpl.java +++ b/src/main/java/com/peanut/modules/common/service/impl/UserVipLogServiceImpl.java @@ -1,6 +1,7 @@ package com.peanut.modules.common.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.peanut.common.utils.DateUtils; import com.peanut.modules.common.dao.UserVipLogDao; import com.peanut.modules.common.entity.UserVip; import com.peanut.modules.common.entity.UserVipLog; @@ -23,13 +24,30 @@ public class UserVipLogServiceImpl extends ServiceImpl params, UserVip userVip) { UserVipLog userVipLog = new UserVipLog(); userVipLog.setUserId(userVip.getUserId()); userVipLog.setUserVipId(userVip.getId()); userVipLog.setType(params.get("userVipType").toString()); - userVipLog.setPayTime(new Date()); + userVipLog.setPayTime(DateUtils.stringToDate(params.get("payTime").toString(),"yyyy-MM-dd HH:mm:ss")); userVipLog.setAdminId(Integer.parseInt(params.get("adminId").toString())); userVipLog.setStartTime(userVip.getStartTime()); userVipLog.setEndTime(userVip.getEndTime()); diff --git a/src/main/java/com/peanut/modules/common/service/impl/UserVipServiceImpl.java b/src/main/java/com/peanut/modules/common/service/impl/UserVipServiceImpl.java index dfb9f97c..1725b8a5 100644 --- a/src/main/java/com/peanut/modules/common/service/impl/UserVipServiceImpl.java +++ b/src/main/java/com/peanut/modules/common/service/impl/UserVipServiceImpl.java @@ -5,12 +5,14 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.peanut.common.utils.ShiroUtils; import com.peanut.modules.common.dao.*; import com.peanut.modules.common.entity.*; +import com.peanut.modules.common.service.UserVipLogService; import com.peanut.modules.common.service.UserVipService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.time.DateUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.util.*; @Slf4j @@ -29,6 +31,8 @@ public class UserVipServiceImpl extends ServiceImpl impleme private CourseToPsycheDao courseToPsycheDao; @Autowired private VipBuyConfigDao vipBuyConfigDao; + @Autowired + private UserVipLogService userVipLogService; @Override public boolean isVip() { @@ -246,6 +250,13 @@ public class UserVipServiceImpl extends ServiceImpl impleme @Override public void openVipForUser(BuyOrder buyOrder) { + String payType = "1".equals(buyOrder.getPaymentMethod())?"微信":("2".equals(buyOrder.getPaymentMethod())?"支付宝":"天医币"); + BigDecimal fee4 = buyOrder.getRealMoney().divide(new BigDecimal(4),2,BigDecimal.ROUND_HALF_UP); + BigDecimal fee2 = buyOrder.getRealMoney().divide(new BigDecimal(2),2,BigDecimal.ROUND_HALF_UP); + BigDecimal jf4 = buyOrder.getJfDeduction().divide(new BigDecimal(2),2,BigDecimal.ROUND_HALF_UP); + BigDecimal jf2 = buyOrder.getJfDeduction().divide(new BigDecimal(2),2,BigDecimal.ROUND_HALF_UP); + String orderSn = buyOrder.getOrderSn(); + VipBuyConfigEntity vipBuyConfigEntity = vipBuyConfigDao.selectById(buyOrder.getVipBuyConfigId()); if(vipBuyConfigEntity.getType()==1){//医学超级 List userVipList = userVipDao.selectList(new LambdaQueryWrapper() @@ -262,8 +273,11 @@ public class UserVipServiceImpl extends ServiceImpl impleme if (uv.getType()==i){ flag = true; userVip = uv; - userVip.setEndTime(DateUtils.addYears(uv.getEndTime(),vipBuyConfigEntity.getYear())); + Date startTime = uv.getEndTime(); + Date endTime = DateUtils.addYears(uv.getEndTime(),vipBuyConfigEntity.getYear()); + userVip.setEndTime(endTime); userVipDao.updateById(userVip); + userVipLogService.addUserVipLogOrder(userVip.getUserId(),userVip.getId(),orderSn,startTime,endTime,fee4,jf4,payType); break; } } @@ -271,6 +285,8 @@ public class UserVipServiceImpl extends ServiceImpl impleme userVip.setStartTime(new Date()); userVip.setEndTime(DateUtils.addYears(userVip.getStartTime(),vipBuyConfigEntity.getYear())); userVipDao.insert(userVip); + userVipLogService.addUserVipLogOrder(userVip.getUserId(),userVip.getId(),orderSn, + userVip.getStartTime(),userVip.getEndTime(), fee4,jf4,payType); } } }else if(vipBuyConfigEntity.getType()==11){//延期医学超级 @@ -282,8 +298,11 @@ public class UserVipServiceImpl extends ServiceImpl impleme .eq(UserVip::getUserId,buyOrder.getUserId()).eq(UserVip::getType,i).orderByDesc(UserVip::getEndTime)); UserVip userVip = userVipList.get(0); if (userVip.getState()==0) { - userVip.setEndTime(DateUtils.addYears(userVip.getEndTime(),vipBuyConfigEntity.getYear())); + Date startTime = userVip.getEndTime(); + Date endTime = DateUtils.addYears(userVip.getEndTime(),vipBuyConfigEntity.getYear()); + userVip.setEndTime(endTime); userVipDao.updateById(userVip); + userVipLogService.addUserVipLogOrder(userVip.getUserId(),userVip.getId(),orderSn,startTime,endTime,fee4,jf4,payType); }else { UserVip uv = new UserVip(); uv.setUserId(buyOrder.getUserId()); @@ -291,6 +310,7 @@ public class UserVipServiceImpl extends ServiceImpl impleme uv.setStartTime(new Date()); uv.setEndTime(DateUtils.addYears(uv.getStartTime(),vipBuyConfigEntity.getYear())); userVipDao.insert(uv); + userVipLogService.addUserVipLogOrder(uv.getUserId(),uv.getId(),orderSn,uv.getStartTime(),uv.getEndTime(),fee4,jf4,payType); } } }else if (vipBuyConfigEntity.getType()==2){//国心超级 @@ -305,8 +325,11 @@ public class UserVipServiceImpl extends ServiceImpl impleme if (uv.getType()==i){ flag = true; userVip = uv; - userVip.setEndTime(DateUtils.addYears(uv.getEndTime(),vipBuyConfigEntity.getYear())); + Date startTime = userVip.getEndTime(); + Date endTime = DateUtils.addYears(userVip.getEndTime(),vipBuyConfigEntity.getYear()); + userVip.setEndTime(endTime); userVipDao.updateById(userVip); + userVipLogService.addUserVipLogOrder(userVip.getUserId(),userVip.getId(),orderSn,startTime,endTime,fee2,jf2,payType); break; } } @@ -314,6 +337,7 @@ public class UserVipServiceImpl extends ServiceImpl impleme userVip.setStartTime(new Date()); userVip.setEndTime(DateUtils.addYears(userVip.getStartTime(),vipBuyConfigEntity.getYear())); userVipDao.insert(userVip); + userVipLogService.addUserVipLogOrder(userVip.getUserId(),userVip.getId(),orderSn,userVip.getStartTime(),userVip.getEndTime(),fee2,jf2,payType); } } }else if(vipBuyConfigEntity.getType()==21){//延期国心超级 @@ -322,8 +346,11 @@ public class UserVipServiceImpl extends ServiceImpl impleme .eq(UserVip::getUserId,buyOrder.getUserId()).eq(UserVip::getType,i).orderByDesc(UserVip::getEndTime)); UserVip userVip = userVipList.get(0); if (userVip.getState()==0) { - userVip.setEndTime(DateUtils.addYears(userVip.getEndTime(),vipBuyConfigEntity.getYear())); + Date startTime = userVip.getEndTime(); + Date endTime = DateUtils.addYears(userVip.getEndTime(),vipBuyConfigEntity.getYear()); + userVip.setEndTime(endTime); userVipDao.updateById(userVip); + userVipLogService.addUserVipLogOrder(userVip.getUserId(),userVip.getId(),orderSn,startTime,endTime,fee2,jf2,payType); }else { UserVip uv = new UserVip(); uv.setUserId(buyOrder.getUserId()); @@ -331,6 +358,7 @@ public class UserVipServiceImpl extends ServiceImpl impleme uv.setStartTime(new Date()); uv.setEndTime(DateUtils.addYears(uv.getStartTime(),vipBuyConfigEntity.getYear())); userVipDao.insert(uv); + userVipLogService.addUserVipLogOrder(uv.getUserId(),uv.getId(),orderSn,uv.getStartTime(),uv.getEndTime(),fee2,jf2,payType); } } }else if (vipBuyConfigEntity.getType()==4||vipBuyConfigEntity.getType()==9||vipBuyConfigEntity.getType()==5||vipBuyConfigEntity.getType()==6|| @@ -341,6 +369,8 @@ public class UserVipServiceImpl extends ServiceImpl impleme userVip.setStartTime(new Date()); userVip.setEndTime(DateUtils.addYears(userVip.getStartTime(),vipBuyConfigEntity.getYear())); userVipDao.insert(userVip); + userVipLogService.addUserVipLogOrder(userVip.getUserId(),userVip.getId(),orderSn,userVip.getStartTime(),userVip.getEndTime(), + buyOrder.getRealMoney(),buyOrder.getJfDeduction(),payType); }else if (vipBuyConfigEntity.getType()==41||vipBuyConfigEntity.getType()==91||vipBuyConfigEntity.getType()==51||vipBuyConfigEntity.getType()==61|| vipBuyConfigEntity.getType()==71||vipBuyConfigEntity.getType()==81){ List userVipList = userVipDao.selectList(new LambdaQueryWrapper() @@ -349,8 +379,12 @@ public class UserVipServiceImpl extends ServiceImpl impleme .orderByDesc(UserVip::getEndTime)); UserVip userVip = userVipList.get(0); if (userVip.getState()==0) { - userVip.setEndTime(DateUtils.addYears(userVip.getEndTime(),vipBuyConfigEntity.getYear())); + Date startTime = userVip.getEndTime(); + Date endTime = DateUtils.addYears(userVip.getEndTime(),vipBuyConfigEntity.getYear()); + userVip.setEndTime(endTime); userVipDao.updateById(userVip); + userVipLogService.addUserVipLogOrder(userVip.getUserId(),userVip.getId(),orderSn,startTime,userVip.getEndTime(), + buyOrder.getRealMoney(),buyOrder.getJfDeduction(),payType); }else { UserVip uv = new UserVip(); uv.setUserId(buyOrder.getUserId()); @@ -358,6 +392,8 @@ public class UserVipServiceImpl extends ServiceImpl impleme uv.setStartTime(new Date()); uv.setEndTime(DateUtils.addYears(uv.getStartTime(),vipBuyConfigEntity.getYear())); userVipDao.insert(uv); + userVipLogService.addUserVipLogOrder(uv.getUserId(),uv.getId(),orderSn,uv.getStartTime(),uv.getEndTime(), + buyOrder.getRealMoney(),buyOrder.getJfDeduction(),payType); } } } diff --git a/src/main/java/com/peanut/modules/common/to/AddCourses.java b/src/main/java/com/peanut/modules/common/to/AddCourses.java index e31cd58e..7c1f4d49 100644 --- a/src/main/java/com/peanut/modules/common/to/AddCourses.java +++ b/src/main/java/com/peanut/modules/common/to/AddCourses.java @@ -11,4 +11,9 @@ public class AddCourses { private String catalogue_id; private Integer days; private ArrayList list; + private String payType; + private String orderSn; + private String fee; + private String jf; + private String remark; } diff --git a/src/main/java/com/peanut/modules/master/controller/StatisticsController.java b/src/main/java/com/peanut/modules/master/controller/StatisticsController.java index a5046914..94436171 100644 --- a/src/main/java/com/peanut/modules/master/controller/StatisticsController.java +++ b/src/main/java/com/peanut/modules/master/controller/StatisticsController.java @@ -1,9 +1,12 @@ package com.peanut.modules.master.controller; import com.peanut.common.utils.R; +import com.peanut.modules.common.entity.UserCourseBuyLog; import com.peanut.modules.common.service.BuyOrderService; import com.peanut.modules.common.service.TransactionDetailsService; +import com.peanut.modules.common.service.UserCourseBuyLogService; import com.peanut.modules.common.service.UserVipLogService; +import com.peanut.modules.master.service.UserCourseBuyService; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.apache.poi.ss.usermodel.Row; @@ -34,11 +37,100 @@ public class StatisticsController { private BuyOrderService buyOrderService; @Autowired private TransactionDetailsService transactionDetailsService; + @Autowired + private UserCourseBuyService userCourseBuyService; + @Autowired + private UserCourseBuyLogService userCourseBuyLogService; + + + @RequestMapping("/getUserCourseBuyInfoTotal") + public R getUserCourseBuyInfoTotal(@RequestBody Map params) { + List> tanxiaoTotal = userCourseBuyService.getUserCourseBuyInfoTotal(params.get("date").toString()); + List> income = userCourseBuyLogService.getIncome(params.get("date").toString().substring(0,7)); + return R.ok().put("tanxiaoTotal", tanxiaoTotal).put("income", income); + } + + //课程明细 + @RequestMapping("/getUserCourseBuyInfo") + public void getUserCourseBuyInfo(HttpServletResponse response, @RequestBody Map params){ + List> maps = userCourseBuyService.getUserCourseBuyInfo(params.get("date").toString()); + XSSFWorkbook wb = new XSSFWorkbook(); + Sheet sheet = wb.createSheet("课程明细"); + Row titleRow = sheet.createRow(0); + titleRow.createCell(0).setCellValue("姓名"); + titleRow.createCell(1).setCellValue("电话"); + titleRow.createCell(2).setCellValue("课程"); + titleRow.createCell(3).setCellValue("目录"); + titleRow.createCell(4).setCellValue("开始时间"); + titleRow.createCell(5).setCellValue("结束时间"); + titleRow.createCell(6).setCellValue("总天数"); + titleRow.createCell(7).setCellValue("开通渠道"); + titleRow.createCell(8).setCellValue("支付类型"); + titleRow.createCell(9).setCellValue("支付时间"); + titleRow.createCell(10).setCellValue("订单编号"); + titleRow.createCell(11).setCellValue("天数"); + titleRow.createCell(12).setCellValue("金额"); + titleRow.createCell(13).setCellValue("备注"); + titleRow.createCell(14).setCellValue("每日摊销"); + titleRow.createCell(15).setCellValue("已摊销天数"); + titleRow.createCell(16).setCellValue("本期天数"); + titleRow.createCell(17).setCellValue("已摊销金额"); + titleRow.createCell(18).setCellValue("本期摊销金额"); + titleRow.createCell(19).setCellValue("剩余金额"); + int cell = 1; + for (Map map : maps) { + Row row = sheet.createRow(cell); + row.createCell(0).setCellValue(map.get("name").toString()); + row.createCell(1).setCellValue(map.get("tel").toString()); + row.createCell(2).setCellValue(map.get("ctitle").toString()); + row.createCell(3).setCellValue(map.get("cctitle").toString()); + row.createCell(4).setCellValue(map.get("startTime").toString()); + row.createCell(5).setCellValue(map.get("endTime").toString()); + row.createCell(6).setCellValue(map.get("totalDays").toString()); + row.createCell(7).setCellValue(map.get("type").toString()); + row.createCell(8).setCellValue(map.get("payType").toString()); + row.createCell(9).setCellValue(map.get("payTime").toString()); + row.createCell(10).setCellValue(map.get("orderSn").toString()); + row.createCell(11).setCellValue(map.get("days").toString()); + row.createCell(12).setCellValue(map.get("fee").toString()); + row.createCell(13).setCellValue(map.get("remark").toString()); + row.createCell(14).setCellValue(map.get("dayAmount").toString()); + row.createCell(15).setCellValue(map.get("alreadyDay").toString()); + row.createCell(16).setCellValue(map.get("currentDay").toString()); + row.createCell(17).setCellValue(map.get("alreadyTanxiao").toString()); + row.createCell(18).setCellValue(map.get("currentTanxiao").toString()); + row.createCell(19).setCellValue(map.get("surplusTanxiao").toString()); + //序号自增 + cell++; + } + String fileName = "课程明细.xlsx"; + OutputStream outputStream =null; + try { + //文件名编码格式 + fileName = URLEncoder.encode(fileName,"UTF-8"); + //设置ContentType请求信息格式 + response.setContentType("application/vnd.ms-excel"); + //设置标头 + response.setHeader("Content-disposition", "attachment;filename=" + fileName); + outputStream = response.getOutputStream(); + wb.write(outputStream); + } catch (IOException e) { + e.printStackTrace(); + }finally { + try { + outputStream.flush(); + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } @RequestMapping("/getTransactionDetailsTotal") public R getTransactionDetailsTotal(@RequestBody Map params) { + Map map = transactionDetailsService.getUserSurplusPeanutCoin(params.get("date").toString()); List> list = transactionDetailsService.getTransactionDetailsTotal(params.get("date").toString()); - return R.ok().put("total", list); + return R.ok().put("total", list).put("surplus", map); } //导出实物订单明细 @@ -69,8 +161,8 @@ public class StatisticsController { row.createCell(1).setCellValue(map.get("name").toString()); row.createCell(2).setCellValue(map.get("tel").toString()); row.createCell(3).setCellValue(map.get("type").toString()); - row.createCell(4).setCellValue(map.get("payType").toString()); - row.createCell(5).setCellValue(map.get("orderSn").toString()); + row.createCell(4).setCellValue(map.get("payMethod").toString()); + row.createCell(5).setCellValue(map.get("payNo").toString()); row.createCell(6).setCellValue(map.get("changeAmount").toString()); row.createCell(7).setCellValue(map.get("note").toString()); row.createCell(8).setCellValue(map.get("goodsType").toString()); @@ -185,18 +277,19 @@ public class StatisticsController { titleRow.createCell(2).setCellValue("VIP类型"); titleRow.createCell(3).setCellValue("开始时间"); titleRow.createCell(4).setCellValue("结束时间"); - titleRow.createCell(5).setCellValue("订单号"); - titleRow.createCell(6).setCellValue("支付方式"); - titleRow.createCell(7).setCellValue("备注"); - titleRow.createCell(8).setCellValue("金额"); - titleRow.createCell(9).setCellValue("总天数"); - titleRow.createCell(10).setCellValue("每日摊销"); - titleRow.createCell(11).setCellValue("已摊销天数"); - titleRow.createCell(12).setCellValue("当月摊销天数"); - titleRow.createCell(13).setCellValue("未摊销天数"); - titleRow.createCell(14).setCellValue("已摊销金额"); - titleRow.createCell(15).setCellValue("当月摊销金额"); - titleRow.createCell(16).setCellValue("剩余摊销金额"); + titleRow.createCell(5).setCellValue("支付时间"); + titleRow.createCell(6).setCellValue("订单号"); + titleRow.createCell(7).setCellValue("支付方式"); + titleRow.createCell(8).setCellValue("备注"); + titleRow.createCell(9).setCellValue("金额"); + titleRow.createCell(10).setCellValue("总天数"); + titleRow.createCell(11).setCellValue("每日摊销"); + titleRow.createCell(12).setCellValue("已摊销天数"); + titleRow.createCell(13).setCellValue("当月摊销天数"); + titleRow.createCell(14).setCellValue("未摊销天数"); + titleRow.createCell(15).setCellValue("已摊销金额"); + titleRow.createCell(16).setCellValue("当月摊销金额"); + titleRow.createCell(17).setCellValue("剩余摊销金额"); //序号,默认为1 int cell = 1; //遍历 @@ -207,18 +300,19 @@ public class StatisticsController { row.createCell(2).setCellValue(map.get("type").toString()); row.createCell(3).setCellValue(map.get("startTime").toString()); row.createCell(4).setCellValue(map.get("endTime").toString()); - row.createCell(5).setCellValue(map.get("orderSn").toString()); - row.createCell(6).setCellValue(map.get("payType").toString()); - row.createCell(7).setCellValue(map.get("remark").toString()); - row.createCell(8).setCellValue(map.get("fee").toString()); - row.createCell(9).setCellValue(map.get("totalDays").toString()); - row.createCell(10).setCellValue(map.get("dayAmount").toString()); - row.createCell(11).setCellValue(map.get("alreadyDays").toString()); - row.createCell(12).setCellValue(map.get("currentDays").toString()); - row.createCell(13).setCellValue(map.get("notyetDays").toString()); - row.createCell(14).setCellValue(map.get("alreadyTanxiao").toString()); - row.createCell(15).setCellValue(map.get("currentTanxiao").toString()); - row.createCell(16).setCellValue(map.get("notyetTanxiao").toString()); + row.createCell(5).setCellValue(map.get("payTime").toString()); + row.createCell(6).setCellValue(map.get("orderSn").toString()); + row.createCell(7).setCellValue(map.get("payType").toString()); + row.createCell(8).setCellValue(map.get("remark").toString()); + row.createCell(9).setCellValue(map.get("fee").toString()); + row.createCell(10).setCellValue(map.get("totalDays").toString()); + row.createCell(11).setCellValue(map.get("dayAmount").toString()); + row.createCell(12).setCellValue(map.get("alreadyDays").toString()); + row.createCell(13).setCellValue(map.get("currentDays").toString()); + row.createCell(14).setCellValue(map.get("notyetDays").toString()); + row.createCell(15).setCellValue(map.get("alreadyTanxiao").toString()); + row.createCell(16).setCellValue(map.get("currentTanxiao").toString()); + row.createCell(17).setCellValue(map.get("notyetTanxiao").toString()); //序号自增 cell++; } diff --git a/src/main/java/com/peanut/modules/master/controller/UserCourseBuyController.java b/src/main/java/com/peanut/modules/master/controller/UserCourseBuyController.java index 4470f7ae..003979da 100644 --- a/src/main/java/com/peanut/modules/master/controller/UserCourseBuyController.java +++ b/src/main/java/com/peanut/modules/master/controller/UserCourseBuyController.java @@ -5,10 +5,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.peanut.common.utils.DateUtils; import com.peanut.common.utils.R; -import com.peanut.modules.common.entity.CourseCatalogueEntity; -import com.peanut.modules.common.entity.CourseEntity; -import com.peanut.modules.common.entity.MyUserEntity; -import com.peanut.modules.common.entity.UserCourseBuyEntity; +import com.peanut.modules.common.entity.*; +import com.peanut.modules.common.service.UserCourseBuyLogService; import com.peanut.modules.common.to.AddCourses; import com.peanut.modules.common.vo.AddCoursesFrag; import com.peanut.modules.master.service.CourseCatalogueService; @@ -24,6 +22,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.io.*; +import java.math.BigDecimal; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; @@ -43,6 +42,8 @@ public class UserCourseBuyController { private UserCourseBuyService userCourseBuyService; @Autowired private CourseCatalogueService courseCatalogueService; + @Autowired + private UserCourseBuyLogService userCourseBuyLogService; @RequestMapping("/listByPage") public R listByPage(@RequestBody Map params) { @@ -98,6 +99,18 @@ public class UserCourseBuyController { userCourseBuyEntity.setDays(days); userCourseBuyEntity.setCome(come); userCourseBuyService.save(userCourseBuyEntity); + UserCourseBuyLog userCourseBuyLog = new UserCourseBuyLog(); + userCourseBuyLog.setUserCourseBuyId(userCourseBuyEntity.getId()); + userCourseBuyLog.setUserId(userCourseBuyEntity.getUserId()); + userCourseBuyLog.setType("master"); + userCourseBuyLog.setPayType(params.get("payType").toString()); + userCourseBuyLog.setPayTime(new Date()); + userCourseBuyLog.setOrderSn(params.get("orderSn").toString()); + userCourseBuyLog.setDays(days); + userCourseBuyLog.setFee(new BigDecimal(params.get("fee").toString())); + userCourseBuyLog.setJf(new BigDecimal(params.get("jf").toString())); + userCourseBuyLog.setRemark(params.get("remark").toString()); + userCourseBuyLogService.save(userCourseBuyLog); }else { CourseCatalogueEntity catalogueEntity = courseCatalogueService.getById(id); return R.error(catalogueEntity.getTitle()+"已开通"); @@ -107,15 +120,30 @@ public class UserCourseBuyController { } @RequestMapping("/delayUserCourseBuy") + @Transactional public R delayUserCourseBuy(@RequestBody Map params) { UserCourseBuyEntity userCourseBuyEntity = userCourseBuyService.getById(params.get("id").toString()); int days = Integer.parseInt(params.get("days").toString()); + int oldDay = userCourseBuyEntity.getDays(); userCourseBuyEntity.setDays(userCourseBuyEntity.getDays()+days); if (userCourseBuyEntity.getEndTime()!=null){ userCourseBuyEntity.setEndTime(DateUtils.addDateDays(userCourseBuyEntity.getEndTime(),days)); } userCourseBuyEntity.setCome(userCourseBuyEntity.getCome()+";延期(管理员操作:"+days+","+DateUtils.format(new Date(),"yyyyMMdd")+")"); userCourseBuyService.updateById(userCourseBuyEntity); + UserCourseBuyLog userCourseBuyLog = new UserCourseBuyLog(); + userCourseBuyLog.setUserCourseBuyId(userCourseBuyEntity.getId()); + userCourseBuyLog.setUserId(userCourseBuyEntity.getUserId()); + userCourseBuyLog.setType("master"); + userCourseBuyLog.setPayType(params.get("payType").toString()); + userCourseBuyLog.setPayTime(new Date()); + userCourseBuyLog.setOrderSn(params.get("orderSn").toString()); + userCourseBuyLog.setBeginDay(oldDay+1); + userCourseBuyLog.setDays(days); + userCourseBuyLog.setFee(new BigDecimal(params.get("fee").toString())); + userCourseBuyLog.setJf(new BigDecimal(params.get("jf").toString())); + userCourseBuyLog.setRemark(params.get("remark").toString()); + userCourseBuyLogService.save(userCourseBuyLog); return R.ok(); } @@ -127,6 +155,7 @@ public class UserCourseBuyController { } @RequestMapping("/AddCourses") + @Transactional public R AddCourses(@RequestBody AddCourses addCourses){ Map> stringArrayListMap = userCourseBuyService.addCourses(addCourses); return R.ok().put("result",stringArrayListMap); diff --git a/src/main/java/com/peanut/modules/master/controller/UserVipController.java b/src/main/java/com/peanut/modules/master/controller/UserVipController.java index ca6acf05..e919655b 100644 --- a/src/main/java/com/peanut/modules/master/controller/UserVipController.java +++ b/src/main/java/com/peanut/modules/master/controller/UserVipController.java @@ -93,14 +93,13 @@ public class UserVipController { if(user.getPeanutCoin().compareTo(fee)>=0){ user.setPeanutCoin(user.getPeanutCoin().subtract(fee)); TransactionDetailsEntity transactionDetailsEntity = new TransactionDetailsEntity(); - transactionDetailsEntity.setRemark("后台充扣操作"); transactionDetailsEntity.setUserId(user.getId()); transactionDetailsEntity.setUserName(user.getNickname()); transactionDetailsEntity.setChangeAmount(fee.negate()); transactionDetailsEntity.setUserBalance(user.getPeanutCoin()); transactionDetailsEntity.setTel(user.getTel()); - transactionDetailsEntity.setOrderType("扣费"); - transactionDetailsEntity.setNote("购买VIP"); + transactionDetailsEntity.setOrderType("后台扣费"); + transactionDetailsEntity.setNote(params.get("remark").toString()); transactionDetailsService.save(transactionDetailsEntity); }else { return R.error("天医币不足"); @@ -210,7 +209,7 @@ public class UserVipController { userVipLog.setUserId(userVip.getUserId()); userVipLog.setUserVipId(userVip.getId()); userVipLog.setType(params.get("type").toString()); - userVipLog.setPayTime(params.containsKey("payTime")?DateUtils.stringToDate(params.get("payTime").toString(), "yyyy-MM-dd HH:mm:ss"):null); + userVipLog.setPayTime(params.containsKey("payTime")?DateUtils.stringToDate(params.get("payTime").toString(), "yyyy-MM-dd HH:mm:ss"):new Date()); if (params.containsKey("orderSn")){ userVipLog.setOrderSn(params.get("orderSn").toString()); } @@ -233,7 +232,7 @@ public class UserVipController { userVipLog.setUserId(Integer.parseInt(userId)); userVipLog.setUserVipId(Integer.parseInt(params.get("userVipId").toString())); userVipLog.setType(params.get("type").toString()); - userVipLog.setPayTime(params.containsKey("payTime")?DateUtils.stringToDate(params.get("payTime").toString(), "yyyy-MM-dd HH:mm:ss"):null); + userVipLog.setPayTime(params.containsKey("payTime")?DateUtils.stringToDate(params.get("payTime").toString(), "yyyy-MM-dd HH:mm:ss"):new Date()); if (params.containsKey("orderSn")){ userVipLog.setOrderSn(params.get("orderSn").toString()); } diff --git a/src/main/java/com/peanut/modules/master/service/UserCourseBuyService.java b/src/main/java/com/peanut/modules/master/service/UserCourseBuyService.java index 0522f9ba..cea08cd6 100644 --- a/src/main/java/com/peanut/modules/master/service/UserCourseBuyService.java +++ b/src/main/java/com/peanut/modules/master/service/UserCourseBuyService.java @@ -6,8 +6,10 @@ import com.peanut.modules.common.entity.MyUserEntity; import com.peanut.modules.common.entity.UserCourseBuyEntity; import com.peanut.modules.common.to.AddCourses; import com.peanut.modules.common.vo.AddCoursesFrag; +import org.apache.ibatis.annotations.Param; import java.util.ArrayList; +import java.util.List; import java.util.Map; public interface UserCourseBuyService extends IService { @@ -19,4 +21,8 @@ public interface UserCourseBuyService extends IService { Map readExcelForAddCourse(String file); Map> addCourses(AddCourses addCourses); + + List> getUserCourseBuyInfoTotal(String date); + + List> getUserCourseBuyInfo(String date); } diff --git a/src/main/java/com/peanut/modules/master/service/impl/UserCourseBuyServiceImpl.java b/src/main/java/com/peanut/modules/master/service/impl/UserCourseBuyServiceImpl.java index f4dfad3a..d3d39db6 100644 --- a/src/main/java/com/peanut/modules/master/service/impl/UserCourseBuyServiceImpl.java +++ b/src/main/java/com/peanut/modules/master/service/impl/UserCourseBuyServiceImpl.java @@ -3,10 +3,8 @@ package com.peanut.modules.master.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; -import com.peanut.modules.common.dao.CourseCatalogueDao; -import com.peanut.modules.common.dao.MyUserDao; -import com.peanut.modules.common.dao.ShopProductCourseDao; -import com.peanut.modules.common.dao.UserCourseBuyDao; +import com.peanut.common.utils.DateUtils; +import com.peanut.modules.common.dao.*; import com.peanut.modules.common.entity.*; import com.peanut.modules.common.to.AddCourses; import com.peanut.modules.common.vo.AddCoursesFrag; @@ -16,9 +14,11 @@ import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.io.InputStream; +import java.math.BigDecimal; import java.net.URL; import java.net.URLConnection; import java.util.*; @@ -33,8 +33,11 @@ public class UserCourseBuyServiceImpl extends ServiceImpl() @@ -49,7 +52,21 @@ public class UserCourseBuyServiceImpl extends ServiceImpl l = new ArrayList<>(); + ArrayList logs = new ArrayList<>(); for (MyUserEntity m : addCourses.getList()){ for (String s : cata) { int check = this.getBaseMapper().selectCount(new LambdaQueryWrapper() @@ -134,11 +152,36 @@ public class UserCourseBuyServiceImpl extends ServiceImpl> getUserCourseBuyInfoTotal(String date) { + return this.baseMapper.getUserCourseBuyInfoTotal(date); + } + + @Override + public List> getUserCourseBuyInfo(String date) { + return this.baseMapper.getUserCourseBuyInfo(date); + } + @Override public Map readExcelForAddCourse(String file) { Map stringArrayListMap = new HashMap<>(); diff --git a/src/main/java/com/peanut/modules/pay/alipay/service/impl/AliPayServiceImpl.java b/src/main/java/com/peanut/modules/pay/alipay/service/impl/AliPayServiceImpl.java index f19e36fd..aad9c7dc 100644 --- a/src/main/java/com/peanut/modules/pay/alipay/service/impl/AliPayServiceImpl.java +++ b/src/main/java/com/peanut/modules/pay/alipay/service/impl/AliPayServiceImpl.java @@ -81,6 +81,8 @@ public class AliPayServiceImpl implements AliPayService { private TrainingClassService trainingClassService; @Autowired private AiVipLogService aiVipLogService; + @Autowired + private UserCourseBuyLogDao userCourseBuyLogDao; @Override public String pay(AlipayDTO payDto) { @@ -265,8 +267,18 @@ public class AliPayServiceImpl implements AliPayService { wrapper2.eq(UserCourseBuyEntity::getCatalogueId,s.getCatalogueId()); wrapper2.and(r->r.isNull(UserCourseBuyEntity::getEndTime).or().gt(UserCourseBuyEntity::getEndTime,new Date())); List userCourseBuyEntities = userCourseBuyDao.selectList(wrapper2); + //插入开课记录 + UserCourseBuyLog userCourseBuyLog = new UserCourseBuyLog(); + userCourseBuyLog.setUserId(order.getUserId()); + userCourseBuyLog.setType("order"); + userCourseBuyLog.setPayType("支付宝"); + userCourseBuyLog.setPayTime(order.getCreateTime()); + userCourseBuyLog.setOrderSn(order.getOrderSn()); if(userCourseBuyEntities.size()>0){ UserCourseBuyEntity userCourseBuyEntity = userCourseBuyEntities.get(0); + userCourseBuyLog.setUserCourseBuyId(userCourseBuyEntity.getId()); + userCourseBuyLog.setBeginDay(userCourseBuyEntity.getDays()+1); + userCourseBuyLog.setDays(s.getDays()); userCourseBuyEntity.setDays(userCourseBuyEntity.getDays()+s.getDays()); if(userCourseBuyEntity.getEndTime()!=null){ Calendar calendar = Calendar.getInstance(); @@ -290,7 +302,13 @@ public class AliPayServiceImpl implements AliPayService { // userCourseBuyEntity.setEndTime(cal.getTime()); userCourseBuyEntity.setCome("支付宝购买:"+order.getOrderSn()); userCourseBuyDao.insert(userCourseBuyEntity); + userCourseBuyLog.setUserCourseBuyId(userCourseBuyEntity.getId()); + userCourseBuyLog.setBeginDay(0); + userCourseBuyLog.setDays(s.getDays()); } + userCourseBuyLog.setFee(order.getRealMoney().divide(new BigDecimal(orderCourse.size()),2, BigDecimal.ROUND_HALF_UP)); + userCourseBuyLog.setJf(order.getJfDeduction().divide(new BigDecimal(orderCourse.size()),2, BigDecimal.ROUND_HALF_UP)); + userCourseBuyLogDao.insert(userCourseBuyLog); } //开通course,end //发放优惠卷 diff --git a/src/main/java/com/peanut/modules/pay/refund/service/impl/PayRefundOrderServiceImpl.java b/src/main/java/com/peanut/modules/pay/refund/service/impl/PayRefundOrderServiceImpl.java index 8e8cc98f..94fac024 100644 --- a/src/main/java/com/peanut/modules/pay/refund/service/impl/PayRefundOrderServiceImpl.java +++ b/src/main/java/com/peanut/modules/pay/refund/service/impl/PayRefundOrderServiceImpl.java @@ -66,12 +66,11 @@ public class PayRefundOrderServiceImpl extends ServiceImplr.isNull(UserCourseBuyEntity::getEndTime).or().gt(UserCourseBuyEntity::getEndTime,new Date())); List userCourseBuyEntities = userCourseBuyDao.selectList(wrapper2); + //插入开课记录 + UserCourseBuyLog userCourseBuyLog = new UserCourseBuyLog(); + userCourseBuyLog.setUserId(order.getUserId()); + userCourseBuyLog.setType("order"); + userCourseBuyLog.setPayType("微信"); + userCourseBuyLog.setPayTime(order.getCreateTime()); + userCourseBuyLog.setOrderSn(order.getOrderSn()); if(userCourseBuyEntities.size()>0){ UserCourseBuyEntity userCourseBuyEntity = userCourseBuyEntities.get(0); + userCourseBuyLog.setUserCourseBuyId(userCourseBuyEntity.getId()); + userCourseBuyLog.setBeginDay(userCourseBuyEntity.getDays()+1); + userCourseBuyLog.setDays(s.getDays()); userCourseBuyEntity.setDays(userCourseBuyEntity.getDays()+s.getDays()); if(userCourseBuyEntity.getEndTime()!=null){ Calendar calendar = Calendar.getInstance(); @@ -248,7 +260,13 @@ public class WxpayServiceImpl extends ServiceImpl map){ return courseService.startStudyForMF(map.get("catalogueId")); } diff --git a/src/main/java/com/peanut/modules/sociology/service/impl/CourseServiceImpl.java b/src/main/java/com/peanut/modules/sociology/service/impl/CourseServiceImpl.java index 50a5c302..43d16e0c 100644 --- a/src/main/java/com/peanut/modules/sociology/service/impl/CourseServiceImpl.java +++ b/src/main/java/com/peanut/modules/sociology/service/impl/CourseServiceImpl.java @@ -17,6 +17,8 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + +import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -49,6 +51,8 @@ public class CourseServiceImpl extends ServiceImpl impl private ShopProductDao shopProductDao; @Autowired private UserVipDao userVipDao; + @Autowired + private UserCourseBuyLogDao userCourseBuyLogDao; //根据标签获取课程列表 @@ -240,6 +244,15 @@ public class CourseServiceImpl extends ServiceImpl impl userCourseBuyEntity.setEndTime(cal.getTime()); userCourseBuyEntity.setCome("免费领取课程"); userCourseBuyDao.insert(userCourseBuyEntity); + UserCourseBuyLog userCourseBuyLog = new UserCourseBuyLog(); + userCourseBuyLog.setUserCourseBuyId(userCourseBuyEntity.getId()); + userCourseBuyLog.setUserId(userCourseBuyEntity.getUserId()); + userCourseBuyLog.setType("master"); + userCourseBuyLog.setPayType("其他"); + userCourseBuyLog.setPayTime(new Date()); + userCourseBuyLog.setDays(userCourseBuyEntity.getDays()); + userCourseBuyLog.setRemark("免费领取课程"); + userCourseBuyLogDao.insert(userCourseBuyLog); return R.ok(); } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 045d501a..c9cfd55a 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -11,7 +11,7 @@ connection-timeout: 6000000ms spring: # 环境 dev/dev1|test|prod profiles: - active: dev + active: prod # jackson时间格式化 jackson: time-zone: GMT+8 diff --git a/src/main/resources/mapper/book/BuyOrderDao.xml b/src/main/resources/mapper/book/BuyOrderDao.xml index b39338e7..03507037 100644 --- a/src/main/resources/mapper/book/BuyOrderDao.xml +++ b/src/main/resources/mapper/book/BuyOrderDao.xml @@ -65,7 +65,7 @@ left join shop_product sp on sp.product_id = bop.product_id where u.id not in (select id from user where tel in ('18812616272','13110039505','18526084267','12222222222','13333333333','14444444444','15555555555','16666666666','17777777777','18888888888','1774455','15533','165965','164964','54321','111','13662001490','15505153873','18834844847','17602219785','19999999999','12299','166933','16855','17602634511','16161616161','17171717171','112112112','21212121211','222222','666666','123123','789789','96','25252525','3434343434','123789','124789','789789','163963','5656','19966','1664455','15151515151','256366','986986','18834844846','18834844849','15611027864','18047689535','18834844848','456456456')) and bo.order_status in (1,2,3,4) and sp.goods_type != '05' -and DATE_FORMAT(bo.create_time,'%Y-%m') = #{date} +and DATE_FORMAT(bo.create_time,'%Y-%m') = SUBSTR(#{date},1,7) group by bo.order_sn ) t left join buy_order_product bop on bop.order_id = t.order_id @@ -89,7 +89,7 @@ and DATE_FORMAT(bo.create_time,'%Y-%m') = #{date} left join shop_product sp on sp.product_id = bop.product_id where u.id not in (select id from user where tel in ('18812616272','13110039505','18526084267','12222222222','13333333333','14444444444','15555555555','16666666666','17777777777','18888888888','1774455','15533','165965','164964','54321','111','13662001490','15505153873','18834844847','17602219785','19999999999','12299','166933','16855','17602634511','16161616161','17171717171','112112112','21212121211','222222','666666','123123','789789','96','25252525','3434343434','123789','124789','789789','163963','5656','19966','1664455','15151515151','256366','986986','18834844846','18834844849','15611027864','18047689535','18834844848','456456456')) and bo.order_status in (1,2,3,4) and sp.goods_type != '05' - and DATE_FORMAT(bo.create_time,'%Y-%m') = #{date} + and DATE_FORMAT(bo.create_time,'%Y-%m') = SUBSTR(#{date},1,7) group by bo.order_sn ) t left join buy_order_product bop on bop.order_id = t.order_id diff --git a/src/main/resources/mapper/book/TransactionDetailsDao.xml b/src/main/resources/mapper/book/TransactionDetailsDao.xml index b16aa898..ba3f558c 100644 --- a/src/main/resources/mapper/book/TransactionDetailsDao.xml +++ b/src/main/resources/mapper/book/TransactionDetailsDao.xml @@ -18,46 +18,53 @@ + diff --git a/src/main/resources/mapper/master/UserCourseBuyDao.xml b/src/main/resources/mapper/master/UserCourseBuyDao.xml new file mode 100644 index 00000000..8ddb2bd8 --- /dev/null +++ b/src/main/resources/mapper/master/UserCourseBuyDao.xml @@ -0,0 +1,69 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/master/UserVipLogDao.xml b/src/main/resources/mapper/master/UserVipLogDao.xml index 34bed6bd..8060b6b5 100644 --- a/src/main/resources/mapper/master/UserVipLogDao.xml +++ b/src/main/resources/mapper/master/UserVipLogDao.xml @@ -7,14 +7,14 @@ select t.*,dayAmount*alreadyDays alreadyTanxiao, dayAmount*currentDays currentTanxiao, fee-(dayAmount*alreadyDays)-(dayAmount*currentDays) notyetTanxiao from ( select u.name,if(u.tel is null,if(u.email is null,'',u.email),u.tel) tel,IF(uv.type=4,'中医学',IF(uv.type=5,'针灸学',IF(uv.type=6,'肿瘤学',IF(uv.type=7,'国学',IF(uv.type=8,'心理学','中西汇通学'))))) type, - uvl.start_time startTime,uvl.end_time endTime,uvl.order_sn orderSn,uvl.pay_type payType,uvl.remark,uvl.fee,DATEDIFF(uvl.end_time,uvl.start_time)+1 totalDays,ROUND(uvl.fee/(DATEDIFF(uvl.end_time,uvl.start_time)+1),2) dayAmount, - IF(DATE_FORMAT(uvl.end_time, '%Y-%m') < #{date},DATEDIFF(uvl.end_time,uvl.start_time)+1,IF(DATE_FORMAT(uvl.start_time, '%Y-%m') > #{date},0,IF(DATE_FORMAT(uvl.start_time, '%Y-%m') < #{date},DATEDIFF(concat(#{date},'-01'),uvl.start_time),0))) alreadyDays, - IF(DATE_FORMAT(uvl.start_time, '%Y-%m') > #{date},0,IF(DATE_FORMAT(uvl.end_time, '%Y-%m') < #{date},0,IF(DATE_FORMAT(uvl.end_time, '%Y-%m') > #{date},DAY(LAST_DAY(concat(#{date},'-01'))),DATEDIFF(uvl.end_time,concat(#{date},'-01'))+1))) currentDays, - IF(DATE_FORMAT(uvl.start_time, '%Y-%m') > #{date},DATEDIFF(uvl.end_time,uvl.start_time)+1,(IF(DATE_FORMAT(uvl.end_time, '%Y-%m') <= #{date},0,DATEDIFF(uvl.end_time,LAST_DAY(concat(#{date},'-01')))))) notyetDays + uvl.start_time startTime,uvl.end_time endTime,if(uvl.pay_time is null,'',uvl.pay_time) payTime,uvl.order_sn orderSn,uvl.pay_type payType,uvl.remark,uvl.fee,DATEDIFF(uvl.end_time,uvl.start_time)+1 totalDays,ROUND(uvl.fee/(DATEDIFF(uvl.end_time,uvl.start_time)+1),2) dayAmount, + IF(DATE_FORMAT(uvl.end_time, '%Y-%m') < SUBSTR(#{date},1,7),DATEDIFF(uvl.end_time,uvl.start_time)+1,IF(DATE_FORMAT(uvl.start_time, '%Y-%m') > SUBSTR(#{date},1,7),0,IF(DATE_FORMAT(uvl.start_time, '%Y-%m') < SUBSTR(#{date},1,7),DATEDIFF(concat(SUBSTR(#{date},1,7),'-01'),uvl.start_time),0))) alreadyDays, + IF(DATE_FORMAT(uvl.start_time, '%Y-%m') > SUBSTR(#{date},1,7),0,IF(DATE_FORMAT(uvl.end_time, '%Y-%m') < SUBSTR(#{date},1,7),0,IF(DATE_FORMAT(uvl.end_time, '%Y-%m') > SUBSTR(#{date},1,7),DAY(#{date}),DATEDIFF(uvl.end_time,concat(SUBSTR(#{date},1,7),'-01'))+1))) currentDays, + IF(DATE_FORMAT(uvl.start_time, '%Y-%m') > SUBSTR(#{date},1,7),DATEDIFF(uvl.end_time,uvl.start_time)+1,(IF(DATE_FORMAT(uvl.end_time, '%Y-%m') <= SUBSTR(#{date},1,7),0,DATEDIFF(uvl.end_time,#{date})))) notyetDays from user_vip_log uvl left join user_vip uv on uv.id = uvl.user_vip_id left join user u on u.id = uvl.user_id - where u.del_flag = 0 and uvl.del_flag = 0 and uv.del_flag = 0 and u.id not in (select id from user where tel in ('18812616272','13110039505','18526084267','12222222222','13333333333','14444444444','15555555555','16666666666','17777777777','18888888888','1774455','15533','165965','164964','54321','111','13662001490','15505153873','18834844847','17602219785','19999999999','12299','166933','16855','17602634511','16161616161','17171717171','112112112','21212121211','222222','666666','123123','789789','96','25252525','3434343434','123789','124789','789789','163963','5656','19966','1664455','15151515151','256366','986986','18834844846','18834844849','15611027864','18047689535','18834844848','456456456')) + where u.del_flag = 0 and uvl.del_flag = 0 and uv.del_flag = 0 and DATE_FORMAT(IF(uvl.pay_time is NULL,uvl.start_time,uvl.pay_time), '%Y-%m') <= SUBSTR(#{date},1,7) and u.id not in (select id from user where tel in ('18812616272','13110039505','18526084267','12222222222','13333333333','14444444444','15555555555','16666666666','17777777777','18888888888','1774455','15533','165965','164964','54321','111','13662001490','15505153873','18834844847','17602219785','19999999999','12299','166933','16855','17602634511','16161616161','17171717171','112112112','21212121211','222222','666666','123123','789789','96','25252525','3434343434','123789','124789','789789','163963','5656','19966','1664455','15151515151','256366','986986','18834844846','18834844849','15611027864','18047689535','18834844848','456456456')) order by uvl.end_time asc ) t order by currentDays desc @@ -22,20 +22,20 @@