From cc0ec85811749c677fa2c01cd41f70b3ab47682e Mon Sep 17 00:00:00 2001 From: "1215525055@qq.com" <1215525055@qq.com> Date: Wed, 9 Jul 2025 18:00:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=A5=97=E9=A4=90?= =?UTF-8?q?=E5=8C=85=E6=9C=89=E6=95=88=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dtos/packageinfo/PackageInfoAppDTO.java | 11 +++- .../pojo/dtos/packageinfo/PackageInfoDTO.java | 10 ++++ .../dtos/packageorder/PackageOrderDTO.java | 20 +++++++ .../pojo/vos/packageinfo/PackageInfoVO.java | 11 ++++ .../packageorder/IPackageOrderService.java | 2 + .../impl/PackageOrderServiceImpl.java | 41 ++++++++++++- .../operator/task/ClosePackageOrder.java | 59 +++++++++++++++++++ .../packageinfo/package-info-mapper.xml | 11 ++++ .../packageorder/package-order-mapper.xml | 23 ++++++++ .../resources/templates/packageinfo/list.html | 13 +++- .../resources/templates/packageinfo/save.html | 21 +++++-- .../templates/packageinfo/update.html | 20 +++++-- 12 files changed, 229 insertions(+), 13 deletions(-) create mode 100644 src/main/java/cn/com/tenlion/operator/task/ClosePackageOrder.java diff --git a/src/main/java/cn/com/tenlion/operator/pojo/dtos/packageinfo/PackageInfoAppDTO.java b/src/main/java/cn/com/tenlion/operator/pojo/dtos/packageinfo/PackageInfoAppDTO.java index c4cd86f..084d891 100644 --- a/src/main/java/cn/com/tenlion/operator/pojo/dtos/packageinfo/PackageInfoAppDTO.java +++ b/src/main/java/cn/com/tenlion/operator/pojo/dtos/packageinfo/PackageInfoAppDTO.java @@ -13,7 +13,8 @@ import io.swagger.annotations.ApiModelProperty; **/ @ApiModel public class PackageInfoAppDTO { - + @ApiModelProperty(name = "packageExpire", value = "有效天数") + private String packageExpire; @ApiModelProperty(name = "packageInfoId", value = "套餐ID") private String packageInfoId; @ApiModelProperty(name = "packageName", value = "套餐名称") @@ -39,6 +40,14 @@ public class PackageInfoAppDTO { @ApiModelProperty(name = "createTime", value = "") private String createTime; + public String getPackageExpire() { + return packageExpire == null ? "" : packageExpire.trim(); + } + + public void setPackageExpire(String packageExpire) { + this.packageExpire = packageExpire; + } + public String getPackageOnlienTime() { return packageOnlienTime == null ? "" : packageOnlienTime.trim(); } diff --git a/src/main/java/cn/com/tenlion/operator/pojo/dtos/packageinfo/PackageInfoDTO.java b/src/main/java/cn/com/tenlion/operator/pojo/dtos/packageinfo/PackageInfoDTO.java index 5e6b19f..9e7b925 100644 --- a/src/main/java/cn/com/tenlion/operator/pojo/dtos/packageinfo/PackageInfoDTO.java +++ b/src/main/java/cn/com/tenlion/operator/pojo/dtos/packageinfo/PackageInfoDTO.java @@ -23,6 +23,8 @@ public class PackageInfoDTO { private String packageInfoId; @ApiModelProperty(name = "packageName", value = "套餐名称") private String packageName; + @ApiModelProperty(name = "packageExpire", value = "有效天数") + private String packageExpire; @ApiModelProperty(name = "packageType", value = "类型写材料 . 全托管等的枚举名") private String packageType; @ApiModelProperty(name = "packageMode", value = "可购买次数 single(每个用户可购买1次), infinite(不限)") @@ -68,6 +70,14 @@ public class PackageInfoDTO { @ApiModelProperty(name = "userList", value = "") List userList = new ArrayList<>(); + public String getPackageExpire() { + return packageExpire == null ? "" : packageExpire.trim(); + } + + public void setPackageExpire(String packageExpire) { + this.packageExpire = packageExpire; + } + public List getUserList() { return userList == null ? new ArrayList<>() : userList; } diff --git a/src/main/java/cn/com/tenlion/operator/pojo/dtos/packageorder/PackageOrderDTO.java b/src/main/java/cn/com/tenlion/operator/pojo/dtos/packageorder/PackageOrderDTO.java index bcb654f..8db0ed9 100644 --- a/src/main/java/cn/com/tenlion/operator/pojo/dtos/packageorder/PackageOrderDTO.java +++ b/src/main/java/cn/com/tenlion/operator/pojo/dtos/packageorder/PackageOrderDTO.java @@ -41,6 +41,10 @@ public class PackageOrderDTO { private String creator; @ApiModelProperty(name = "gmtCreate", value = "下单时间") private String gmtCreate; + @ApiModelProperty(name = "packageExpireTime", value = "到期日期") + private String packageExpireTime; + @ApiModelProperty(name = "packageExpire", value = "有效天数") + private String packageExpire; @ApiModelProperty(name = "modifier", value = "") private String modifier; @ApiModelProperty(name = "gmtModified", value = "") @@ -56,6 +60,22 @@ public class PackageOrderDTO { @ApiModelProperty(name = "packageInfoAppDTO", value = "") private PackageInfoAppDTO packageInfoAppDTO; + public String getPackageExpireTime() { + return packageExpireTime == null ? "" : packageExpireTime.trim(); + } + + public void setPackageExpireTime(String packageExpireTime) { + this.packageExpireTime = packageExpireTime; + } + + public String getPackageExpire() { + return packageExpire == null ? "" : packageExpire.trim(); + } + + public void setPackageExpire(String packageExpire) { + this.packageExpire = packageExpire; + } + public PackageInfoAppDTO getPackageInfoAppDTO() { return packageInfoAppDTO; } diff --git a/src/main/java/cn/com/tenlion/operator/pojo/vos/packageinfo/PackageInfoVO.java b/src/main/java/cn/com/tenlion/operator/pojo/vos/packageinfo/PackageInfoVO.java index 55c864f..7241836 100644 --- a/src/main/java/cn/com/tenlion/operator/pojo/vos/packageinfo/PackageInfoVO.java +++ b/src/main/java/cn/com/tenlion/operator/pojo/vos/packageinfo/PackageInfoVO.java @@ -23,6 +23,9 @@ public class PackageInfoVO { @ApiModelProperty(name = "packageName", value = "套餐名称") @CheckEmptyAnnotation(name = "套餐名称") private String packageName; + @ApiModelProperty(name = "packageExpire", value = "套餐有效天数") + @CheckNumberAnnotation(name = "套餐有效天数") + private Integer packageExpire; @ApiModelProperty(name = "packageType", value = "类型写材料 . 全托管等的枚举名") @CheckEmptyAnnotation(name = "类型") private String packageType; @@ -66,6 +69,14 @@ public class PackageInfoVO { @ApiModelProperty(name = "userList", value = "") List userList = new ArrayList<>(); + public Integer getPackageExpire() { + return packageExpire == null ? 0 : packageExpire; + } + + public void setPackageExpire(Integer packageExpire) { + this.packageExpire = packageExpire; + } + public List getUserList() { return userList == null ? new ArrayList<>() : userList; } diff --git a/src/main/java/cn/com/tenlion/operator/service/packageorder/IPackageOrderService.java b/src/main/java/cn/com/tenlion/operator/service/packageorder/IPackageOrderService.java index 12a92d2..f62a95d 100644 --- a/src/main/java/cn/com/tenlion/operator/service/packageorder/IPackageOrderService.java +++ b/src/main/java/cn/com/tenlion/operator/service/packageorder/IPackageOrderService.java @@ -205,4 +205,6 @@ public interface IPackageOrderService { Map getCount(String userId); void updateWriteoff(String packageOrderId, PackageOrderWriteoffVO packageOrderWriteoffVO); + + List getExpireList(); } \ No newline at end of file diff --git a/src/main/java/cn/com/tenlion/operator/service/packageorder/impl/PackageOrderServiceImpl.java b/src/main/java/cn/com/tenlion/operator/service/packageorder/impl/PackageOrderServiceImpl.java index 4ae766e..5f47717 100644 --- a/src/main/java/cn/com/tenlion/operator/service/packageorder/impl/PackageOrderServiceImpl.java +++ b/src/main/java/cn/com/tenlion/operator/service/packageorder/impl/PackageOrderServiceImpl.java @@ -46,6 +46,7 @@ import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import java.util.*; /** @@ -218,11 +219,15 @@ public class PackageOrderServiceImpl extends DefaultBaseService implements IPack /** * 1. 更改到账时间 , 状态 */ + String time = DateUtil.getTime(); Map params = super.getHashMap(2); params.put("packageNo", packageOrderVO.getAccountRechargeId());// 关联支付 params.put("packageAccountItem", packageOrderVO.getPackageAccountItem()); // 关联扣款流水 params.put("packagePayStatus", "1"); // 已支付 - params.put("packagePay", DateUtil.getTime()); // 支付时间 + params.put("packagePay", time); // 支付时间 + if(!StringUtils.isEmpty(infoAppDTO.getPackageExpire())) { + params.put("packageExpireTime", calculateFutureDate(time, Integer.valueOf(infoAppDTO.getPackageExpire()))); // 到期时间 + } packageOrderDao.updatePay(params); return true; } @@ -250,11 +255,15 @@ public class PackageOrderServiceImpl extends DefaultBaseService implements IPack /** * 1. 更改到账时间 , 状态 */ + String time = DateUtil.getTime(); Map params = super.getHashMap(2); params.put("packageNo", packageOrderVO.getAccountRechargeId());// 关联支付 params.put("packageAccountItem", packageOrderVO.getPackageAccountItem()); // 关联扣款流水 params.put("packagePayStatus", "1"); // 已支付 - params.put("packagePay", DateUtil.getTime()); // 支付时间 + params.put("packagePay", time); // 支付时间 + if(!StringUtils.isEmpty(infoAppDTO.getPackageExpire())) { + params.put("packageExpireTime", calculateFutureDate(time, Integer.valueOf(infoAppDTO.getPackageExpire()))); // 到期时间 + } packageOrderDao.updatePay(params); } @@ -319,6 +328,14 @@ public class PackageOrderServiceImpl extends DefaultBaseService implements IPack packageOrderItemService.saveApp("minus", packageOrderItemAppVO); } + @Override + public List getExpireList() { + Map params = new HashMap<>(); + params.put("queryExpire", "queryExpire"); + List list = packageOrderDao.list(params); + return list; + } + @Override public List list(Map params) { List list = packageOrderDao.list(params); @@ -426,6 +443,10 @@ public class PackageOrderServiceImpl extends DefaultBaseService implements IPack data.put("packageOrderId", packageOrderId); String currentDate = DateUtil.getTime(); data.put("packageNo", packageOrderVO.getAccountRechargeId()); + if(!StringUtils.isEmpty(packageInfoDTO.getPackageExpire())) { + data.put("packageExpire", packageInfoDTO.getPackageExpire()); + data.put("packageExpireTime", calculateFutureDate(DateUtil.getTime(), Integer.valueOf(packageInfoDTO.getPackageExpire()))); + } data.put("creator", packageOrderVO.getUserId()); data.put("gmtCreate", currentDate); data.put("modifier", packageOrderVO.getUserId()); @@ -435,6 +456,22 @@ public class PackageOrderServiceImpl extends DefaultBaseService implements IPack } + public static String calculateFutureDate(String dateTimeStr, int days) { + // 定义日期时间格式 + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + try { + // 解析输入字符串 + LocalDateTime dateTime = LocalDateTime.parse(dateTimeStr, formatter); + // 添加指定天数 + LocalDateTime futureDate = dateTime.plusDays(days); + // 格式化输出 + return futureDate.format(formatter); + } catch (DateTimeParseException e) { + throw new IllegalArgumentException("无效的日期时间格式,请使用:yyyy-MM-dd HH:mm:ss", e); + } + } + @Override public PackageOrderDTO getByPackageNo(String packageNo) { Map params = super.getHashMap(2); diff --git a/src/main/java/cn/com/tenlion/operator/task/ClosePackageOrder.java b/src/main/java/cn/com/tenlion/operator/task/ClosePackageOrder.java new file mode 100644 index 0000000..2b324c2 --- /dev/null +++ b/src/main/java/cn/com/tenlion/operator/task/ClosePackageOrder.java @@ -0,0 +1,59 @@ +package cn.com.tenlion.operator.task; + +import cn.com.tenlion.operator.enums.SysCallbackStatusEnum; +import cn.com.tenlion.operator.pojo.dtos.packageorder.PackageOrderDTO; +import cn.com.tenlion.operator.pojo.pos.callback.SysCallbackPO; +import cn.com.tenlion.operator.pojo.vos.packageorder.PackageOrderWriteoffVO; +import cn.com.tenlion.operator.service.packageorder.IPackageOrderService; +import cn.com.tenlion.operator.service.sys.callback.SysCallbackService; +import cn.com.tenlion.operator.service.sys.task.SysTaskService; +import cn.com.tenlion.operator.serviceother.operator.accountrecharge.IAccountRechargeService; +import cn.com.tenlion.quartzconfig.service.quartzconfig.IQuartzConfigService; +import cn.com.tenlion.quartzconfig.util.QuartzConfigLog; +import cn.com.tenlion.quartzconfig.util.QuartzConfigSpringUtil; +import ink.wgink.interfaces.start.IApplicationStart; +import org.apache.commons.lang3.StringUtils; +import org.quartz.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +@DisallowConcurrentExecution // 防止定时任务并行执行【防止1个没有执行完,另一个又开始了】 +public class ClosePackageOrder implements Job { + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + JobDataMap dataMap = jobExecutionContext.getJobDetail().getJobDataMap(); + Map params = (Map) dataMap.get("params");// 获取参数 + String jobId = params.get("jobId").toString();// 定时ID + String jobClassName = params.get("jobClassName").toString();// 定时类名 + String jobTitle = params.get("jobTitle").toString();// 定时名称 + /// 定时任务中通过工具类可以获取容器Bean + QuartzConfigLog.info(jobId, jobClassName, jobTitle + "开始执行");// 自定义日志记录 + try { + IPackageOrderService orderService = QuartzConfigSpringUtil.getBean(IPackageOrderService.class); + // 查找已经过期的 , 数量还大于0的 , + List list = orderService.getExpireList(); + // 扣除所有次数 + for(PackageOrderDTO orderDTO : list) { + if (orderDTO.getPackageTotalSurplusCount() > 0 && !StringUtils.isEmpty(orderDTO.getPackageExpireTime())) { + PackageOrderWriteoffVO vo = new PackageOrderWriteoffVO(); + vo.setPackageOutCount(orderDTO.getPackageTotalSurplusCount()); + vo.setPackageOutRemark("套餐包到期"); + orderService.updateWriteoff(orderDTO.getPackageOrderId(), vo); + } + } + QuartzConfigLog.info(jobId, jobClassName, jobTitle + "执行成功");// 自定义日志记录 + }catch(Exception e) { + + QuartzConfigLog.error(jobId, jobTitle + "执行失败", e);// 自定义日志记录 + } + } + +} \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/packageinfo/package-info-mapper.xml b/src/main/resources/mybatis/mapper/packageinfo/package-info-mapper.xml index d31a698..a291698 100644 --- a/src/main/resources/mybatis/mapper/packageinfo/package-info-mapper.xml +++ b/src/main/resources/mybatis/mapper/packageinfo/package-info-mapper.xml @@ -5,6 +5,7 @@ + @@ -20,6 +21,7 @@ + @@ -100,6 +102,7 @@ INSERT INTO operator_package_info( package_info_id, package_name, + package_expire, package_type, package_mode, package_original_price, @@ -124,6 +127,7 @@ ) VALUES( #{packageInfoId}, #{packageName}, + #{packageExpire}, #{packageType}, #{packageMode}, #{packageOriginalPrice}, @@ -205,6 +209,9 @@ package_name = #{packageName}, + + package_expire = #{packageExpire}, + package_type = #{packageType}, @@ -251,6 +258,7 @@ SELECT t1.package_info_id, + t1.package_expire, t1.package_name, t1.package_type, t1.package_mode, @@ -405,6 +414,7 @@ +
+
+
+ +
+ +
+
+
+
+
+ +
+ + +
+
diff --git a/src/main/resources/templates/packageinfo/update.html b/src/main/resources/templates/packageinfo/update.html index 2a6fa34..ff7f9b1 100644 --- a/src/main/resources/templates/packageinfo/update.html +++ b/src/main/resources/templates/packageinfo/update.html @@ -25,10 +25,22 @@
-
- -
- +
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+