package com.dsh.activity.controller; import cn.hutool.core.collection.CollUtil; import cn.mb.cloud.common.data.controller.BaseController; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.api.R; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.activity.entity.THuiminCard; import com.dsh.activity.entity.TPayHuimin; import com.dsh.activity.entity.TStudent; import com.dsh.activity.feignclient.account.StudentClient; import com.dsh.activity.service.HuiminCardService; import com.dsh.activity.service.PayHuiminService; import com.dsh.activity.util.UUIDUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @RestController @RequestMapping("/tHuiminCard") public class THuiminCardController extends BaseController { @Autowired private HuiminCardService tHuiminCardService; @Autowired private PayHuiminService payHuiminService; @Autowired private StudentClient studentClient; @PostMapping("/queryPage") public Page queryPage(@RequestBody THuiminCard tHuiminCard) { QueryWrapper queryWrapper = new QueryWrapper<>(); Integer objectType = tHuiminCard.getObjectType(); Integer objectId = tHuiminCard.getObjectId(); if (objectType == 2){ queryWrapper.eq("operatorId",objectId); } if (objectType == 3){ queryWrapper.apply("FIND_IN_SET("+objectId+",storeIds)"); } if (!StringUtils.isEmpty(tHuiminCard.getHuiMinName())){ queryWrapper.like("huiMinName",tHuiminCard.getHuiMinName()); } if (!StringUtils.isEmpty(tHuiminCard.getHuiMinType())){ queryWrapper.eq("huiMinType",tHuiminCard.getHuiMinType()); } if (tHuiminCard.getStartTime() != null && tHuiminCard.getEndTime() != null){ queryWrapper.ge("startTime",tHuiminCard.getStartTime()); queryWrapper.le("endTime",tHuiminCard.getEndTime()); } Integer huiMinStatus = tHuiminCard.getHuiMinStatus(); // 玩湃惠民卡状态:1未开始 2已开始 3已结束 if (huiMinStatus != null){ Date now = new Date(); switch (huiMinStatus) { case 1: queryWrapper.gt("startTime", now); break; case 2: queryWrapper.apply("(startTime <= now() AND endTime >= now()) OR(startTime IS NULL AND endTime IS NULL)"); break; case 3: queryWrapper.le("endTime", now); break; } } if (tHuiminCard.getStatus() != null){ queryWrapper.eq("status",tHuiminCard.getStatus()); } Page page = new Page<>(); page.setCurrent(tHuiminCard.getCurrent()); page.setSize(tHuiminCard.getSize()); Page page1 = tHuiminCardService.page(page, queryWrapper); List records = page1.getRecords(); if (records.isEmpty()){ return page1; } List cardIds = records.stream().map(THuiminCard::getId).collect(Collectors.toList()); List list = payHuiminService.list(new LambdaQueryWrapper() .in(TPayHuimin::getCardId, cardIds)); Map cardIdCountMap = list.stream() .collect(Collectors.groupingBy( TPayHuimin::getCardId, Collectors.counting() )); records.forEach(item -> { item.setBuyCount(cardIdCountMap.getOrDefault(item.getId(), 0L).intValue()); // 玩湃惠民卡状态计算逻辑 Date startTime = item.getStartTime(); Date endTime = item.getEndTime(); Date now = new Date(); if (startTime == null || endTime == null) { // 时间字段未填写时默认状态为「已开始」 item.setHuiMinStatus(2); } else { if (startTime.after(now)) { item.setHuiMinStatus(1); // 未开始 } else if (endTime.before(now)) { item.setHuiMinStatus(3); // 已结束 } else { item.setHuiMinStatus(2); // 已开始 } } }); return page1; } @GetMapping("/getById") public THuiminCard getById(@RequestParam("id") Integer id) { return tHuiminCardService.getById(id); } @PostMapping("/save") public R save(@RequestBody THuiminCard tHuiminCard) { tHuiminCardService.save(tHuiminCard); return R.ok(""); } @PostMapping("/updateById") public R updateById(@RequestBody THuiminCard tHuiminCard) { tHuiminCardService.updateById(tHuiminCard); return R.ok(""); } @GetMapping("/deleteById") public R deleteById(@RequestParam("id") Integer id) { tHuiminCardService.removeById(id); return R.ok(""); } /** * 批量删除 */ @PostMapping("/deleteBatchIds") public R deleteBatchIds(@RequestBody List ids) { tHuiminCardService.removeByIds(ids); return R.ok(""); } @GetMapping("/changeState") public String changeState(@RequestParam("id")Integer id, @RequestParam("status") Integer status){ THuiminCard tHuiminCard = tHuiminCardService.getById(id); tHuiminCard.setStatus(status); tHuiminCardService.updateById(tHuiminCard); return "success"; } @GetMapping("/getCards") public List getCards(@RequestParam("storeId")String storeId){ List list = tHuiminCardService.lambdaQuery().apply("FIND_IN_SET(" + storeId + ",storeIds)").list(); return list; } @GetMapping("/addPayHuiMing") public void addPayHuiMing(@RequestParam("studentId")Integer studentId, @RequestParam("cardId")Integer cardId){ TPayHuimin tPayHuimin = new TPayHuimin(); THuiminCard byId = tHuiminCardService.getById(cardId); List studentByIds = studentClient.getStudentByIds(studentId + ""); if (CollUtil.isNotEmpty(studentByIds)){ tPayHuimin.setAppUserId(studentByIds.get(0).getAppUserId()); } tPayHuimin.setSalesMoney(byId.getSalesMoney()); tPayHuimin.setStudentId(studentId+""); switch (byId.getHuiMinType()) { case 1: // 年度卡 LocalDateTime localDateTime = LocalDateTime.now().plusDays(365); // 将LocalDateTime转换为Date类型 Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant()); tPayHuimin.setEndTime(date); break; case 2: // 年内卡 Date date1 = new Date(); date1.setMonth(11); date1.setDate(31); date1.setHours(23); date1.setMinutes(59); date1.setSeconds(57); tPayHuimin.setEndTime(date1); break; } tPayHuimin.setInsertTime(new Date()); tPayHuimin.setPaymentType(3); tPayHuimin.setRefundStatus(1); tPayHuimin.setCardId(byId.getId()); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); tPayHuimin.setCode(sdf.format(new Date()) + UUIDUtil.getNumberRandom(5)); System.err.println("支付数据" + tPayHuimin); tPayHuimin.setPaymentTime(new Date()); tPayHuimin.setStatus(2); payHuiminService.save(tPayHuimin); } }