diff --git a/pom.xml b/pom.xml index 93ebbc3..0876372 100644 --- a/pom.xml +++ b/pom.xml @@ -122,6 +122,16 @@ pagehelper-spring-boot-starter 1.4.6 + + jakarta.validation + jakarta.validation-api + 3.0.2 + + + org.hibernate.validator + hibernate-validator + 8.0.0.Final + diff --git a/src/main/java/com/example/demo/controller/AuditController.java b/src/main/java/com/example/demo/controller/AuditController.java index 7c58292..bec1e92 100644 --- a/src/main/java/com/example/demo/controller/AuditController.java +++ b/src/main/java/com/example/demo/controller/AuditController.java @@ -1,11 +1,17 @@ package com.example.demo.controller; +import com.example.demo.domain.vo.AuditRequest; +import com.example.demo.domain.vo.Page; +import com.example.demo.domain.vo.RechargeAudit; +import com.example.demo.domain.vo.RefundAudit; +import com.example.demo.service.AuditService; +import com.github.pagehelper.PageInfo; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** * @program: gold-java @@ -23,4 +29,34 @@ import org.springframework.web.bind.annotation.RestController; @Transactional @CrossOrigin public class AuditController { + + @Autowired + private AuditService auditService; + + //审核订单 + @PostMapping("audit") + public ResponseEntity auditOrder( + @RequestBody AuditRequest request) { + boolean result = auditService.auditOrder(request.getToken(),request.getOrderCode(), request.getAuditId(), request.getAction(),request.getRejectReason()); + return ResponseEntity.ok(result); +} + //多条件查询充值审核订单列表 + @PostMapping("selectRecharge") + public PageInfo searchRechargeAudit( + @RequestBody Page page) { + Integer pageNum = page.getPageNum(); + Integer pageSize = page.getPageSize(); + RechargeAudit rechargeAudit = page.getRechargeAudit(); + + return auditService.selectRechargeBy(pageNum, pageSize, rechargeAudit); +} //多条件查询退款审核订单列表 + @PostMapping("selectRefund") + public PageInfo searchRefundAudit( + @RequestBody Page page) { + Integer pageNum = page.getPageNum(); + Integer pageSize = page.getPageSize(); + RefundAudit refundAudit = page.getRefundAudit(); + + return auditService.selectRefundBy(pageNum, pageSize, refundAudit); +} } diff --git a/src/main/java/com/example/demo/controller/ConsumeController.java b/src/main/java/com/example/demo/controller/ConsumeController.java index cb99af9..9ddf11b 100644 --- a/src/main/java/com/example/demo/controller/ConsumeController.java +++ b/src/main/java/com/example/demo/controller/ConsumeController.java @@ -6,6 +6,7 @@ import com.example.demo.domain.vo.Gold; import com.example.demo.domain.vo.Page; import com.example.demo.domain.vo.Result; import com.example.demo.service.ConsumeService; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -85,6 +86,13 @@ public class ConsumeController { public Result add(@RequestBody ConsumeUser consumeUser) { try { return consumeService.add(consumeUser); +// if(consumeUser.getJwcode().equals(94226013)) +// { +// return consumeService.add(consumeUser); +// }else { +// return Result.error("不是测试的精网号,无法添加消费"); +// } +// } catch (Exception e) { return Result.error("接口调用失败"); } diff --git a/src/main/java/com/example/demo/controller/RechargeController.java b/src/main/java/com/example/demo/controller/RechargeController.java index 7ecf564..005e08a 100644 --- a/src/main/java/com/example/demo/controller/RechargeController.java +++ b/src/main/java/com/example/demo/controller/RechargeController.java @@ -78,7 +78,7 @@ public class RechargeController { } } - //消耗金币增加 + //充值金币增加 @PostMapping("/add") public Result add(@RequestBody RechargeUser rechargeUser) { try { diff --git a/src/main/java/com/example/demo/controller/RefundController.java b/src/main/java/com/example/demo/controller/RefundController.java index 30c180a..edd707b 100644 --- a/src/main/java/com/example/demo/controller/RefundController.java +++ b/src/main/java/com/example/demo/controller/RefundController.java @@ -1,9 +1,6 @@ package com.example.demo.controller; -import com.example.demo.domain.vo.Gold; -import com.example.demo.domain.vo.Page; -import com.example.demo.domain.vo.RefundUser; -import com.example.demo.domain.vo.Result; +import com.example.demo.domain.vo.*; import com.example.demo.service.ConsumeService; import com.example.demo.service.RefundService; import lombok.RequiredArgsConstructor; @@ -12,6 +9,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.*; +import java.util.List; + /** * @program: gold-java * @ClassName RefundMapper.xml @@ -76,4 +75,27 @@ public class RefundController { } } + @PostMapping("/refundType") + public Result getRefundType() + { + List list = refundService.getRefundType(); + return Result.success(list); + } + + @PostMapping("/selectGoods") + public Result getSelectGoods(@RequestBody RefundUser refundUser) + { + List list = refundService.selectGoods(refundUser.getJwcode()); + return Result.success(list); + } + + //消耗金币增加 + @PostMapping("/add") + public Result add(@RequestBody RefundUser refundUser) { + try { + return refundService.add(refundUser); + } catch (Exception e) { + return Result.error("接口调用失败"); + } + } } diff --git a/src/main/java/com/example/demo/controller/StatisticsController.java b/src/main/java/com/example/demo/controller/StatisticsController.java index d18fee3..c1a9726 100644 --- a/src/main/java/com/example/demo/controller/StatisticsController.java +++ b/src/main/java/com/example/demo/controller/StatisticsController.java @@ -44,6 +44,11 @@ public class StatisticsController { public void HourlyTask2() { statisticsService.runHourlyTaskPart2(); } + //测试一周内定时任务part2 + @PostMapping("/Daily2") + public void DailyTask2() { + statisticsService.runDailyTaskPart2(); + } diff --git a/src/main/java/com/example/demo/controller/WorkbenchController.java b/src/main/java/com/example/demo/controller/WorkbenchController.java index 3e73097..f6fcf8c 100644 --- a/src/main/java/com/example/demo/controller/WorkbenchController.java +++ b/src/main/java/com/example/demo/controller/WorkbenchController.java @@ -43,7 +43,7 @@ public class WorkbenchController { */ @PostMapping("getCard") public ResponseEntity card1(@RequestBody WorkbenchCard workbench){ - WorkbenchCard result =workbenchService.getCard(workbench.getToken(),workbench.getMarkets()); + WorkbenchCard result =workbenchService.getCard(workbench.getToken()); return ResponseEntity.ok(result); } /* diff --git a/src/main/java/com/example/demo/domain/vo/AuditRequest.java b/src/main/java/com/example/demo/domain/vo/AuditRequest.java new file mode 100644 index 0000000..3be612a --- /dev/null +++ b/src/main/java/com/example/demo/domain/vo/AuditRequest.java @@ -0,0 +1,18 @@ +package com.example.demo.domain.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class AuditRequest { + private String token; + private String orderCode; //订单号 + private Integer auditId; //审核人id + private Integer action; //操作 + private String rejectReason; //驳回理由 + + +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/domain/vo/ConsumeUser.java b/src/main/java/com/example/demo/domain/vo/ConsumeUser.java index 40768ea..d2370ce 100644 --- a/src/main/java/com/example/demo/domain/vo/ConsumeUser.java +++ b/src/main/java/com/example/demo/domain/vo/ConsumeUser.java @@ -1,6 +1,7 @@ package com.example.demo.domain.vo; import com.fasterxml.jackson.annotation.JsonFormat; +import jakarta.validation.constraints.PositiveOrZero; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; diff --git a/src/main/java/com/example/demo/domain/vo/Page.java b/src/main/java/com/example/demo/domain/vo/Page.java index 16d172d..72b26bf 100644 --- a/src/main/java/com/example/demo/domain/vo/Page.java +++ b/src/main/java/com/example/demo/domain/vo/Page.java @@ -24,5 +24,7 @@ public class Page { private User user; private RefundUser refundUser; private Permission permission; + private RechargeAudit rechargeAudit; + private RefundAudit refundAudit; private RechargeUser rechargeUser; } diff --git a/src/main/java/com/example/demo/domain/vo/RechargeAudit.java b/src/main/java/com/example/demo/domain/vo/RechargeAudit.java new file mode 100644 index 0000000..4438ea6 --- /dev/null +++ b/src/main/java/com/example/demo/domain/vo/RechargeAudit.java @@ -0,0 +1,57 @@ +package com.example.demo.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @program: gold-java + * @ClassName RechargeAudit + * @description: 充值审核 + * @author: Ethan + * @create: 2025−06-30 10:29 + * @Version 1.0 + **/ + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class RechargeAudit { + private static final long serialVersionUID = 1L; + + private String name; // 客户姓名 + private Integer jwcode; // 精网号 + private String orderCode; // 订单号 + private String activity; // 活动名称 + private String market; // 所属地区 + private Byte refundType; // 退款类型 + private Integer sumGold; //充值金额 + private Integer permanentGold; // 永久金币 + private Integer freeGold; // 免费金币 + private Integer freeJune; // 6月免费金币 + private Integer freeDecember; // 12月免费金币 + private String remark; // 备注 + private String payModel; //支付方式 + private String voucher; //支付凭证 + private Integer adminId; //提交人Id + private String adminName; //提交人姓名 + private String auditStatus; //审核状态 + private Integer auditId; //审核人Id + private String auditName; //审核人姓名 + private Byte type; //类型 + private String rejectReason; //驳回理由 + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private String payTime; //支付时间 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date createTime; // 创建时间 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date startTime; // 开始时间 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date endTime; // 结束时间 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date auditTime; // 审核时间 +} diff --git a/src/main/java/com/example/demo/domain/vo/RefundAudit.java b/src/main/java/com/example/demo/domain/vo/RefundAudit.java new file mode 100644 index 0000000..f7715c8 --- /dev/null +++ b/src/main/java/com/example/demo/domain/vo/RefundAudit.java @@ -0,0 +1,55 @@ +package com.example.demo.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @program: gold-java + * @ClassName RechargeAudit + * @description: 退款审核 + * @author: Ethan + * @create: 2025−06-30 13:29 + * @Version 1.0 + **/ + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class RefundAudit { + private static final long serialVersionUID = 1L; + private String name; // 客户姓名 + private Integer jwcode; // 精网号 + private String orderCode; // 订单号 + private String market; // 所属地区 + private Byte refundModel; // 退款方式-全额 部分 + private String goodsName; // 商品名称 + private Integer sumGold; // 退款金额 + private Integer permanentGold; // 永久金币 + private Integer freeGold; // 免费金币 + private Integer freeJune; // 6月免费金币 + private Integer freeDecember; // 12月免费金币 + private String remark; // 备注 + private String payModel; //支付方式 + private String voucher; //支付凭证 + private Integer adminId; //提交人Id + private String adminName; //提交人姓名 + private String auditStatus; //审核状态 + private Integer auditId; //审核人Id + private String auditName; //审核人姓名 + private String rejectReason; //驳回理由 + private Byte type; //类型 + + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date createTime; // 创建时间 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date startTime; // 开始时间 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date endTime; // 结束时间 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") + private Date auditTime; // 审核时间 +} diff --git a/src/main/java/com/example/demo/domain/vo/RefundUser.java b/src/main/java/com/example/demo/domain/vo/RefundUser.java index 6ca6b78..e0e42f6 100644 --- a/src/main/java/com/example/demo/domain/vo/RefundUser.java +++ b/src/main/java/com/example/demo/domain/vo/RefundUser.java @@ -23,6 +23,7 @@ public class RefundUser { private static final long serialVersionUID = 1L; + private String orderCode; // 订单号 private String name; // 客户姓名 private Integer jwcode; // 精网号 private String market; // 所属地区 diff --git a/src/main/java/com/example/demo/domain/vo/WorkbenchMarketCard.java b/src/main/java/com/example/demo/domain/vo/WorkbenchMarketCard.java index 747c0bc..36db07f 100644 --- a/src/main/java/com/example/demo/domain/vo/WorkbenchMarketCard.java +++ b/src/main/java/com/example/demo/domain/vo/WorkbenchMarketCard.java @@ -45,7 +45,7 @@ public class WorkbenchMarketCard implements Serializable { private Integer refundFreeJune; // 当日新增退款(六月免费) private Integer refundFreeDecember; // 当日新增退款(十二月免费) private Integer refundTask; // 当日新增退款(任务) - private Integer dailyConsume; // 当日总消耗 = consumePermanent + consumeFreeJune + consumeFreeDecember + consumeTask - (refundPermanent + refundFreeJune + refundFreeDecember + refundTask) + private Integer dailyReduce; // 当日总消耗 = consumePermanent + consumeFreeJune + consumeFreeDecember + consumeTask - (refundPermanent + refundFreeJune + refundFreeDecember + refundTask) private Integer yearlyConsume; // 全年累计消费 private Integer yearlyRefund; // 全年累计退款金币数 private Integer yearlyReduce; // 全年累计消耗金币数 = yearlyConsume - yearlyRefund diff --git a/src/main/java/com/example/demo/mapper/AuditMapper.java b/src/main/java/com/example/demo/mapper/AuditMapper.java index 63dc767..1287ccd 100644 --- a/src/main/java/com/example/demo/mapper/AuditMapper.java +++ b/src/main/java/com/example/demo/mapper/AuditMapper.java @@ -1,6 +1,14 @@ package com.example.demo.mapper; +import com.example.demo.domain.entity.User; +import com.example.demo.domain.entity.UserGoldRecord; +import com.example.demo.domain.vo.RechargeAudit; +import com.example.demo.domain.vo.RefundAudit; +import com.github.pagehelper.PageInfo; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * @program: gold-java @@ -13,6 +21,21 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface AuditMapper { - + //根据订单号查订单 + UserGoldRecord selectOrderByOrderCode(String orderCode); + //修改订单审核人与审核状态 + int updateOrder (UserGoldRecord userGoldRecord); + //修改用户余额 + int updateUserGold(User user); + //修改消费订单为以退款 + int updateOrderRefund(String orderCode); + //多条件查询充值审核订单 + List selectRechargeBy(@Param("pageNum") Integer pageNum, + @Param("pageSize") Integer pageSize, + @Param("rechargeAudit") RechargeAudit rechargeAudit); + //多条件查询消费审核订单 + List selectRefundBy(@Param("pageNum") Integer pageNum, + @Param("pageSize") Integer pageSize, + @Param("refundAudit") RefundAudit refundAudit); } diff --git a/src/main/java/com/example/demo/mapper/ConsumeMapper.java b/src/main/java/com/example/demo/mapper/ConsumeMapper.java index 489028a..fd6bf53 100644 --- a/src/main/java/com/example/demo/mapper/ConsumeMapper.java +++ b/src/main/java/com/example/demo/mapper/ConsumeMapper.java @@ -23,4 +23,6 @@ public interface ConsumeMapper { List selectBy(ConsumeUser consumeUser); void add(UserGoldRecord userGoldRecord); + + void updateIsRefund(String orderCode); } diff --git a/src/main/java/com/example/demo/mapper/RefundMapper.java b/src/main/java/com/example/demo/mapper/RefundMapper.java index fd6c184..3f8f14c 100644 --- a/src/main/java/com/example/demo/mapper/RefundMapper.java +++ b/src/main/java/com/example/demo/mapper/RefundMapper.java @@ -24,4 +24,9 @@ public interface RefundMapper { List selectBy(RefundUser refundUser); void add(UserGoldRecord userGoldRecord); + + List getRefundType(); + + List selectGoods(Integer jwcode); + } diff --git a/src/main/java/com/example/demo/service/AuditService.java b/src/main/java/com/example/demo/service/AuditService.java index ca524e9..36107e2 100644 --- a/src/main/java/com/example/demo/service/AuditService.java +++ b/src/main/java/com/example/demo/service/AuditService.java @@ -1,5 +1,10 @@ package com.example.demo.service; +import com.example.demo.domain.vo.Gold; +import com.example.demo.domain.vo.RechargeAudit; +import com.example.demo.domain.vo.RefundAudit; +import com.github.pagehelper.PageInfo; + /** * @program: gold-java * @ClassName AuditService @@ -11,4 +16,12 @@ package com.example.demo.service; public interface AuditService { + //审核订单并修改用户余额等 + boolean auditOrder(String token, String orderCode, Integer auditId,Integer action,String rejectReason); + //多条件查询充值审核订单 + PageInfo selectRechargeBy(Integer pageNum, Integer pageSize, RechargeAudit rechargeAudit); + //多条件查询退款审核订单 + PageInfo selectRefundBy(Integer pageNum, Integer pageSize, RefundAudit refundAudit); + //金币合计数 + Gold sumRechargeGold(); } diff --git a/src/main/java/com/example/demo/service/RefundService.java b/src/main/java/com/example/demo/service/RefundService.java index 40e0b25..f8cbb41 100644 --- a/src/main/java/com/example/demo/service/RefundService.java +++ b/src/main/java/com/example/demo/service/RefundService.java @@ -7,6 +7,8 @@ import com.example.demo.domain.vo.RefundUser; import com.example.demo.domain.vo.Result; import com.github.pagehelper.PageInfo; +import java.util.List; + /** * @program: gold-java * @ClassName RefundService @@ -25,4 +27,9 @@ public interface RefundService { PageInfo selectBy(Integer pageNum, Integer pageSize, RefundUser refundUser); Result add(RefundUser refundUser); + + //获取退款类型 + List getRefundType(); + + List selectGoods(Integer jwcode); } diff --git a/src/main/java/com/example/demo/service/WorkbenchService.java b/src/main/java/com/example/demo/service/WorkbenchService.java index 30fad16..c66e860 100644 --- a/src/main/java/com/example/demo/service/WorkbenchService.java +++ b/src/main/java/com/example/demo/service/WorkbenchService.java @@ -18,7 +18,7 @@ import java.util.List; public interface WorkbenchService { //获取不同地区的工作台统计卡片 - WorkbenchCard getCard(String token, List markets); + WorkbenchCard getCard(String token); //获取不同地区的工作台柱状图数据(根据类型,起止时间,地区查询) WorkbenchCard getGraph(String token, Date startDate, Date endDate, List markets); //根据类型获取年初至今的统计数据 diff --git a/src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java index 19b30c0..8019806 100644 --- a/src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/AuditServiceImpl.java @@ -1,6 +1,18 @@ package com.example.demo.serviceImpl; +import com.example.demo.domain.entity.User; +import com.example.demo.domain.entity.UserGoldRecord; +import com.example.demo.domain.vo.Gold; +import com.example.demo.domain.vo.RechargeAudit; +import com.example.demo.domain.vo.RefundAudit; +import com.example.demo.mapper.AuditMapper; import com.example.demo.service.AuditService; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; /** * @program: gold-java @@ -11,6 +23,96 @@ import com.example.demo.service.AuditService; * @Version 1.0 **/ - +@Service public class AuditServiceImpl implements AuditService { + @Autowired + private AuditMapper auditMapper; + /* + 审核订单并修改用户余额等 + */ + @Override + public boolean auditOrder(String token, String orderCode, Integer auditId, Integer action,String rejectReason) { + UserGoldRecord order=auditMapper.selectOrderByOrderCode(orderCode); + if (order == null || order.getAuditStatus() != 0) { + throw new IllegalArgumentException("订单不存在或已被审核"); + } + //更新订单的审核状态和审核人 + UserGoldRecord updateOrder = new UserGoldRecord(); + updateOrder.setOrderCode(orderCode); + updateOrder.setAuditId(auditId); + //判断是通过还是驳回 + if (action==2){ //驳回 + updateOrder.setAuditStatus(2); + updateOrder.setRejectReason(rejectReason); + auditMapper.updateOrder(updateOrder); + return true; + }else if (action==1) { //通过 + updateOrder.setAuditStatus(1); + } + // 执行审核更新 + auditMapper.updateOrder(updateOrder); + //判断是充值还是退款 + if (order.getType()==0){ //充值 + //更新用户余额 + User update = new User(); + update.setJwcode(order.getJwcode()); //精网号 + update.setSumPermanentGold(order.getPermanentGold()); //历史永久金币 + update.setSumFreeJune(order.getFreeJune()); //历史六月免费金币 + update.setSumFreeDecember(order.getFreeDecember()); //历史十二月免费金币 + update.setSumTaskGold(order.getTaskGold()); //历史任务金币 + update.setCurrentPermanentGold(order.getPermanentGold()); //当前永久金币 + update.setCurrentFreeJune(order.getFreeJune()); //当前六月免费金币 + update.setCurrentFreeDecember(order.getFreeDecember()); //当前十二月免费金币 + update.setCurrentTaskGold(order.getTaskGold()); //当前任务金币 + auditMapper.updateUserGold(update); + }else if (order.getType()==2) { //退款 + //1.更新用户余额,并标记对应的消费订单为已退款 + User update = new User(); + update.setJwcode(order.getJwcode()); + update.setCurrentPermanentGold(order.getPermanentGold()); //当前永久金币 + update.setCurrentFreeJune(order.getFreeJune()); //当前六月免费金币 + update.setCurrentFreeDecember(order.getFreeDecember()); //当前十二月免费金币 + update.setCurrentTaskGold(order.getTaskGold()); //当前任务金币 + auditMapper.updateUserGold(update); + //2.获取对应的消费订单(退款订单号去掉开头"TK"即为对应消费订单) + String consumeOrderCode = order.getOrderCode().replaceFirst("TK", ""); + //3.更新消费订单是否已退款状态为1 + UserGoldRecord consumeOrder = auditMapper.selectOrderByOrderCode(consumeOrderCode); + if (consumeOrderCode != null&&consumeOrder.getType()==1){ //确保是消费订单 + auditMapper.updateOrderRefund(consumeOrderCode); + }else { + throw new IllegalArgumentException("找不到对应的订单或不是有效订单"); + } + } + return true; + } + /* + * 多条件查询充值订单列表 + */ + @Override + public PageInfo selectRechargeBy(Integer pageNum, Integer pageSize, RechargeAudit rechargeAudit) { + PageHelper.startPage(pageNum, pageSize); + + List rechargeAudits = auditMapper.selectRechargeBy(pageNum, pageSize, rechargeAudit); + return new PageInfo<>(rechargeAudits); + } + + @Override + public PageInfo selectRefundBy(Integer pageNum, Integer pageSize, RefundAudit refundAudit) { + PageHelper.startPage(pageNum, pageSize); + + List refundAudits = auditMapper.selectRefundBy(pageNum, pageSize, refundAudit); + + return new PageInfo<>(refundAudits); + } + /* + 金币合计数 + */ + @Override + public Gold sumRechargeGold() { + Gold gold = new Gold(); + //获取充值审核订单列表 + List rechargeAudits = auditMapper.selectRechargeBy(1, 1000, null); + return null; + } } diff --git a/src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java index 7fb3df7..7faf332 100644 --- a/src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/ConsumeServiceImpl.java @@ -1,5 +1,6 @@ package com.example.demo.serviceImpl; +import com.example.demo.Util.GoldTistV2; import com.example.demo.domain.entity.User; import com.example.demo.domain.entity.UserGoldRecord; import com.example.demo.domain.vo.ConsumeUser; @@ -14,6 +15,7 @@ import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -158,6 +160,10 @@ public class ConsumeServiceImpl implements ConsumeService { user.setConsumeNum(gold.getConsumeNum() + 1); user.setSumConsume(consumeUser.getPermanentGold() + consumeUser.getFreeGold() + consumeUser.getTaskGold()); userMapper.updateGold(user); + //对接接口 +// GoldTistV2.addCoinNew(userGoldRecord.getJwcode().toString(), 65, +// (double) (userGoldRecord.getPermanentGold() + userGoldRecord.getFreeDecember() + userGoldRecord.getFreeJune() + userGoldRecord.getTaskGold()) /100, +// userGoldRecord.getRemark(),((double) userGoldRecord.getPermanentGold() /100), userGoldRecord.getPayPlatform(), userGoldRecord.getGoodsName()); return Result.success(); } } diff --git a/src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java index 200f391..2269d4a 100644 --- a/src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/RefundServiceImpl.java @@ -1,5 +1,6 @@ package com.example.demo.serviceImpl; +import com.example.demo.domain.entity.UserGoldRecord; import com.example.demo.domain.vo.ConsumeUser; import com.example.demo.domain.vo.Gold; import com.example.demo.domain.vo.RefundUser; @@ -13,7 +14,13 @@ import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Date; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; /** * @program: gold-java @@ -31,7 +38,7 @@ public class RefundServiceImpl implements RefundService { private RefundMapper refundMapper; @Autowired - private UserMapper userMapper; + private ConsumeMapper consumeMapper; @Override public PageInfo selectAll(Integer pageNum, Integer pageSize, RefundUser refundUser) { @@ -83,6 +90,80 @@ public class RefundServiceImpl implements RefundService { @Override public Result add(RefundUser refundUser) { - return null; + UserGoldRecord userGoldRecord = new UserGoldRecord(); + String goodsNameWithOrder = refundUser.getGoodsName(); + String orderCode = ""; + //订单号生成 + if (goodsNameWithOrder != null && goodsNameWithOrder.contains("_")) { + String[] parts = goodsNameWithOrder.split("_", 2); + if (parts.length >= 2) { + // 提取订单号(保留原始前缀) + orderCode = parts[0]; // XF202506281545524400006580 + + // 提取商品名(处理可能包含下划线的情况) + String goodsName = parts[1]; // 商品A + + // 设置属性(添加退款前缀) + userGoldRecord.setOrderCode("TK" + orderCode); // TKXF202506281545524400006580 + userGoldRecord.setGoodsName(goodsName); // 商品A + } + } + userGoldRecord.setJwcode(refundUser.getJwcode()); + userGoldRecord.setRefundType(refundUser.getRefundType()); + userGoldRecord.setRefundModel(refundUser.getRefundModel()); + userGoldRecord.setPermanentGold(refundUser.getPermanentGold()); + // 获取当前月份(1-12) + int currentMonth = LocalDate.now().getMonthValue(); + // 根据当前月份设置对应字段 + if (currentMonth >= 1 && currentMonth <= 6) { + // 1-6月:设置6月额度,12月保持默认值 + userGoldRecord.setFreeJune(0); + userGoldRecord.setFreeDecember(refundUser.getFreeGold()); + } else { + // 7-12月:设置12月额度,6月保持默认值 + userGoldRecord.setFreeJune(refundUser.getFreeGold()); + userGoldRecord.setFreeDecember(0); + } + userGoldRecord.setTaskGold(refundUser.getTaskGold()); + userGoldRecord.setSumGold(refundUser.getSumGold()); + userGoldRecord.setPayPlatform("金币系统"); + userGoldRecord.setRemark(refundUser.getRemark()); + userGoldRecord.setAdminId(refundUser.getAdminId()); + userGoldRecord.setType((byte) 2); + userGoldRecord.setAuditStatus(0); + userGoldRecord.setCreateTime(new Date()); + refundMapper.add(userGoldRecord); + consumeMapper.updateIsRefund(orderCode); + return Result.success(); + } + + @Override + public List getRefundType() { + List list = refundMapper.getRefundType(); + return list; + } + + @Override + public List selectGoods(Integer jwcode) { + List refundUsers = refundMapper.selectGoods(jwcode); + List list = new ArrayList<>(); + for (RefundUser record : refundUsers) { + if (record == null) { + continue; + } + + String orderCode = record.getOrderCode() != null ? record.getOrderCode() : "无订单号"; + String goodsName = record.getGoodsName() != null ? record.getGoodsName() : "无商品名"; + + // 拼接格式:订单号_商品名(例如:XF20250629_商品BC) + String combined = orderCode + "_" + goodsName; + RefundUser refundUser = new RefundUser(); + refundUser.setGoodsName(combined); + refundUser.setPermanentGold(record.getPermanentGold()); + refundUser.setFreeGold(record.getFreeGold()); + refundUser.setTaskGold(record.getTaskGold()); + list.add(refundUser); + } + return list; } } diff --git a/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java index b311ed8..8e346db 100644 --- a/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/StatisticsServiceImpl.java @@ -68,7 +68,17 @@ public class StatisticsServiceImpl implements StatisticsService { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_YEAR, -7); // 一周前 Date startDate = cal.getTime(); - Date endDate = generalService.getYesterday(); // 昨天 + Date yesterday = generalService.getYesterday(); // 昨天 + // 获取 Calendar 实例并设置为昨天的日期 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(yesterday); + + // 设置时间为昨天的23:55 + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 55); + //把yesterday的结束时间设为结束时间 + Date endDate= calendar.getTime(); //近一周的日期列表 List dateList =generalService.getAllDatesBetween(startDate, endDate); diff --git a/src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java index 669e4ee..9dad75b 100644 --- a/src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/WorkbenchServiceImpl.java @@ -39,7 +39,7 @@ public class WorkbenchServiceImpl implements WorkbenchService { @Autowired private StatisticsMapper statisticsMapper; @Override - public WorkbenchCard getCard(String token, List markets) { + public WorkbenchCard getCard(String token) { Date date=new Date(); // 获取开始时间和结束时间(当天) LocalDateTime startOfDay = date.toInstant() @@ -53,7 +53,7 @@ public class WorkbenchServiceImpl implements WorkbenchService { // 获取当前年份的第一天 LocalDate firstDayOfYear = today.withDayOfYear(1); Date yearlyStartDate=Date.from(firstDayOfYear.atStartOfDay(ZoneId.systemDefault()).toInstant()); - + List markets = generalService.getMarket(); List marketCards = new ArrayList<>(); // 遍历每个 marketCard 并填充数据 for (String market : markets) { @@ -95,7 +95,7 @@ public class WorkbenchServiceImpl implements WorkbenchService { int totalConsume = card.getConsumePermanent() + card.getConsumeFreeJune() + card.getConsumeFreeDecember() + card.getConsumeTask(); //当日总退款 int totalRefund = card.getRefundPermanent() + card.getRefundFreeJune() + card.getRefundFreeDecember() + card.getRefundTask(); - card.setDailyConsume(totalConsume - totalRefund);//当日总消耗 + card.setDailyReduce(totalConsume - totalRefund);//当日总消耗 card.setYearlyConsume(calculateSum(market, "consume", yearlyStartDate,date));//年累计消费 card.setYearlyRefund(calculateSum(market, "refund",yearlyStartDate ,date));//年累计退款 card.setYearlyReduce(card.getYearlyConsume() - card.getYearlyRefund());//年累计消耗 diff --git a/src/main/resources/mapper/AuditMapper.xml b/src/main/resources/mapper/AuditMapper.xml index f6453a2..71dd88c 100644 --- a/src/main/resources/mapper/AuditMapper.xml +++ b/src/main/resources/mapper/AuditMapper.xml @@ -1,5 +1,108 @@ + + + update user_gold_record + set audit_id = #{auditId}, + audit_status = #{auditStatus}, + reject_reason = #{rejectReason} + where order_code = #{orderCode} + + + + update user + set sum_permanent_gold = sum_permanent_gold + COALESCE(#{sumPermanentGold},0), + sum_free_june = sum_free_june + COALESCE(#{sumFreeJune},0), + sum_free_december = sum_free_december + COALESCE(#{sumFreeDecember},0), + sum_task_gold = sum_task_gold + COALESCE(#{sumTaskGold},0), + current_permanent_gold = current_permanent_gold + COALESCE(#{currentPermanentGold},0), + current_free_june = current_free_june + COALESCE(#{currentFreeJune},0), + current_free_december = current_free_december + COALESCE(#{currentFreeDecember},0), + current_task_gold = current_task_gold + COALESCE(#{currentTaskGold},0) + where jwcode = #{jwcode} + + + + update user_gold_record + set is_refund = 1 + where order_code = #{orderCode} + + + + + + + diff --git a/src/main/resources/mapper/ConsumeMapper.xml b/src/main/resources/mapper/ConsumeMapper.xml index 0098af5..c0d4592 100644 --- a/src/main/resources/mapper/ConsumeMapper.xml +++ b/src/main/resources/mapper/ConsumeMapper.xml @@ -171,4 +171,15 @@ #{payTime} + + + UPDATE user_gold_record + SET is_refund = 1 + + order_code = #{orderCode} + + AND is_refund != 0 + + + \ No newline at end of file diff --git a/src/main/resources/mapper/RechargeMapper.xml b/src/main/resources/mapper/RechargeMapper.xml index 5bec492..e8405f8 100644 --- a/src/main/resources/mapper/RechargeMapper.xml +++ b/src/main/resources/mapper/RechargeMapper.xml @@ -19,7 +19,7 @@ ugr.remark AS remark, ugr.admin_id AS adminId, a.admin_name AS adminName, - ugr.create_time AS createTime + ugr.pay_time AS payTime FROM user u JOIN user_gold_record ugr ON u.jwcode = ugr.jwcode JOIN admin a ON ugr.admin_id = a.id @@ -35,9 +35,9 @@ ugr.permanent_gold (COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) - ugr.create_time + ugr.pay_time - ugr.create_time + ugr.pay_time @@ -55,7 +55,7 @@ - ugr.create_time DESC + ugr.pay_time DESC @@ -78,7 +78,7 @@ ugr.remark AS remark, ugr.admin_id AS adminId, a.admin_name AS adminName, - ugr.create_time AS createTime + ugr.pay_time AS payTime FROM user u JOIN user_gold_record ugr ON u.jwcode = ugr.jwcode JOIN admin a ON ugr.admin_id = a.id @@ -98,7 +98,7 @@ AND ugr.pay_platform = #{payPlatform} - AND ugr.create_time BETWEEN #{startTime} AND #{endTime} + AND ugr.pay_time BETWEEN #{startTime} AND #{endTime} @@ -108,11 +108,12 @@ ugr.permanent_gold + ugr.money (COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) - ugr.create_time + ugr.pay_time - ugr.create_time + ugr.pay_time @@ -130,7 +131,7 @@ - ugr.create_time DESC + ugr.pay_time DESC diff --git a/src/main/resources/mapper/RefundMapper.xml b/src/main/resources/mapper/RefundMapper.xml index 2e70fec..faa99a7 100644 --- a/src/main/resources/mapper/RefundMapper.xml +++ b/src/main/resources/mapper/RefundMapper.xml @@ -7,6 +7,7 @@ SELECT u.name AS name, u.jwcode AS jwcode, u.market AS market, + ugr.order_code AS orderCode, ugr.goods_name AS goodsName, ugr.refund_model AS refundModel, ugr.refund_type AS refundType, @@ -64,6 +65,7 @@ SELECT u.name AS name, u.jwcode AS jwcode, u.market AS market, + ugr.order_code AS orderCode, ugr.goods_name AS goodsName, ugr.refund_model AS refundModel, ugr.refund_type AS refundType, @@ -138,37 +140,64 @@ order_code, jwcode, + refund_type, + refund_model, sum_gold, permanent_gold, free_june, free_december, task_gold, goods_name, + pay_platform, remark, type, - pay_platform, - is_refund, admin_id, - create_time, - pay_time + audit_status, + create_time VALUES #{orderCode}, #{jwcode}, + #{refundType}, + #{refundModel}, #{sumGold}, #{permanentGold}, #{freeJune}, #{freeDecember}, #{taskGold}, #{goodsName}, + #{payPlatform}, #{remark}, #{type}, - #{payPlatform}, - #{isRefund}, #{adminId}, - #{createTime}, - #{payTime} + #{auditStatus}, + #{createTime} + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/StatisticsMapper.xml b/src/main/resources/mapper/StatisticsMapper.xml index 76dda9d..700ed65 100644 --- a/src/main/resources/mapper/StatisticsMapper.xml +++ b/src/main/resources/mapper/StatisticsMapper.xml @@ -27,13 +27,13 @@ market, current_datetime, current_gold, daily_change, current_permanent, current_free_june, - current_free_december, current_task, + current_free_december, current_task ) VALUES ( #{market}, #{currentDatetime}, #{currentGold}, #{dailyChange}, #{currentPermanent}, #{currentFreeJune}, - #{currentFreeDecember}, #{currentTask}, + #{currentFreeDecember}, #{currentTask} )