package com.dsh.guns.modular.system.controller.code; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.course.feignClient.activity.CouponClient; import com.dsh.course.feignClient.activity.model.Coupon; import com.dsh.course.feignClient.activity.model.CouponCity; import com.dsh.course.feignClient.activity.model.TicketDetailVO; import com.dsh.guns.core.base.controller.BaseController; import com.dsh.guns.core.common.constant.factory.PageFactory; import com.dsh.guns.modular.system.model.*; import com.dsh.guns.modular.system.service.IProtocolService; import com.dsh.guns.modular.system.service.IStoreService; import com.dsh.guns.modular.system.service.IVipService; import com.dsh.guns.modular.system.util.ResultUtil; import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; /** * @author zhibing.pu * @Date 2023/8/1 14:02 */ @Controller @RequestMapping("/vip") public class TVipController extends BaseController { @Autowired private IVipService vipService; @Autowired private CouponClient couponClient; @Autowired private IStoreService storeService; private String PREFIX = "/system/vip/"; /** * 跳转到优惠券管理首页 */ @RequestMapping("") public String index(Model model) { return PREFIX + "vip.html"; } @RequestMapping("/add") public String add(Model model) { return PREFIX + "vip_add.html"; } @RequestMapping("/edit/{id}") public String edit(@PathVariable("id")Integer id,Model model) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Vip vip = vipService.getById(id); model.addAttribute("vip",vip); if (vip.getCouponJson() != null && !vip.getCouponJson().isEmpty()){ String couponJson = vip.getCouponJson(); // 转化为jsonArray JSONArray couponJsonArray = JSONArray.parseArray(couponJson); List couponIds = new ArrayList<>(); Map integerIntegerHashMap = new HashMap<>(); // 收集里面得id for (Object o : couponJsonArray) { JSONObject couponJsonObject = (JSONObject) o; Integer couponId = couponJsonObject.getInteger("id"); Integer count = couponJsonObject.getInteger("value"); integerIntegerHashMap.put(couponId, count); couponIds.add(couponId); } List coupons = couponClient.queryCouponList(); if (!couponIds.isEmpty()){ coupons = coupons.stream().filter(coupon -> couponIds.contains(coupon.getId())).collect(Collectors.toList()); for (Coupon coupon : coupons) { Date startTime = coupon.getStartTime(); Date endTime = coupon.getEndTime(); coupon.setTimeValue(simpleDateFormat.format(startTime) + "至" + simpleDateFormat.format(endTime)); Integer orDefault = integerIntegerHashMap.getOrDefault(coupon.getId(), 0); coupon.setCount(orDefault); switch (coupon.getUseScope()){ case 1: coupon.setUseScopeValue("全国"); break; case 2: coupon.setUseScopeValue("指定城市"); break; case 3: coupon.setUseScopeValue("指定门店"); break; } switch (coupon.getType()){ case 1: coupon.setTypeValue("满减券"); break; case 2: coupon.setTypeValue("代金券"); break; case 3: coupon.setTypeValue("体验券"); break; } switch (coupon.getUserPopulation()){ case 1: coupon.setUserPopulationValue("全部用户"); break; case 2: coupon.setUserPopulationValue("会员"); break; case 3: coupon.setUserPopulationValue("已有学员用户"); break; } } model.addAttribute("couponList", coupons); }else{ model.addAttribute("couponList", new ArrayList()); } } if (vip.getTicketJson() != null && !vip.getTicketJson().isEmpty()){ String ticketJson = vip.getTicketJson(); // 转化为jsonArray JSONArray ticketJsonArray = JSONArray.parseArray(ticketJson); // 收集里面得id List ticketDetailVOS = new ArrayList<>(); for (Object o : ticketJsonArray) { JSONObject couponJsonObject = (JSONObject) o; TicketDetailVO ticketDetailVO = new TicketDetailVO(); ticketDetailVO.setName(couponJsonObject.getString("name")); ticketDetailVO.setTime(couponJsonObject.getInteger("time")); ticketDetailVO.setCount(couponJsonObject.getInteger("count")); ticketDetailVOS.add(ticketDetailVO); } model.addAttribute("ticketList", ticketDetailVOS); } return PREFIX + "vip_edit.html"; } public static void main(String[] args) { String temp = "[{\"id\":\"36\",\"value\":\"1\"}]"; JSONArray couponJsonArray = JSONArray.parseArray(temp); for (Object o : couponJsonArray) { JSONObject couponJsonObject = (JSONObject) o; Integer couponId = couponJsonObject.getInteger("id"); } } @RequestMapping("/detail/{id}") public String detail(@PathVariable("id")Integer id, Model model) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Vip vip = vipService.getById(id); model.addAttribute("vip",vip); if (vip.getCouponJson() != null && !vip.getCouponJson().isEmpty()){ String couponJson = vip.getCouponJson(); // 转化为jsonArray JSONArray couponJsonArray = JSONArray.parseArray(couponJson); List couponIds = new ArrayList<>(); Map integerIntegerHashMap = new HashMap<>(); // 收集里面得id for (Object o : couponJsonArray) { JSONObject couponJsonObject = (JSONObject) o; Integer couponId = couponJsonObject.getInteger("id"); Integer count = couponJsonObject.getInteger("value"); integerIntegerHashMap.put(couponId, count); couponIds.add(couponId); } List coupons = couponClient.queryCouponList(); if (!couponIds.isEmpty()){ coupons = coupons.stream().filter(coupon -> couponIds.contains(coupon.getId())).collect(Collectors.toList()); for (Coupon coupon : coupons) { Date startTime = coupon.getStartTime(); Date endTime = coupon.getEndTime(); coupon.setTimeValue(simpleDateFormat.format(startTime) + "至" + simpleDateFormat.format(endTime)); Integer orDefault = integerIntegerHashMap.getOrDefault(coupon.getId(), 0); coupon.setCount(orDefault); switch (coupon.getUseScope()){ case 1: coupon.setUseScopeValue("全国"); break; case 2: coupon.setUseScopeValue("指定城市"); break; case 3: coupon.setUseScopeValue("指定门店"); break; } switch (coupon.getType()){ case 1: coupon.setTypeValue("满减券"); break; case 2: coupon.setTypeValue("代金券"); break; case 3: coupon.setTypeValue("体验券"); break; } switch (coupon.getUserPopulation()){ case 1: coupon.setUserPopulationValue("全部用户"); break; case 2: coupon.setUserPopulationValue("会员"); break; case 3: coupon.setUserPopulationValue("已有学员用户"); break; } } model.addAttribute("couponList", coupons); }else{ model.addAttribute("couponList", new ArrayList()); } } if (vip.getTicketJson() != null && !vip.getTicketJson().isEmpty()){ String ticketJson = vip.getTicketJson(); // 转化为jsonArray JSONArray ticketJsonArray = JSONArray.parseArray(ticketJson); // 收集里面得id List ticketDetailVOS = new ArrayList<>(); for (Object o : ticketJsonArray) { JSONObject couponJsonObject = (JSONObject) o; TicketDetailVO ticketDetailVO = new TicketDetailVO(); ticketDetailVO.setName(couponJsonObject.getString("name")); ticketDetailVO.setTime(couponJsonObject.getInteger("time")); ticketDetailVO.setCount(couponJsonObject.getInteger("count")); ticketDetailVOS.add(ticketDetailVO); } model.addAttribute("ticketList", ticketDetailVOS); } return PREFIX + "vip_detail.html"; } /** * 跳转到门店管理列表页 */ @RequestMapping("/couponList") public String couponList(Model model) { return PREFIX + "TCoupon.html"; } @RequestMapping(value = "/addVipInfo") @ResponseBody public ResultUtil addVipInfo(String vipName, Integer time, Integer timeType, String price,String couponJson, String ticketJson) { Vip vip = new Vip(); vip.setVipName(vipName); vip.setTimeType(timeType); vip.setTime(time); vip.setPrice(new BigDecimal(price)); vip.setStatus(1); vip.setInsertTime(new Date()); vip.setCouponJson(couponJson); vip.setTicketJson(ticketJson); vipService.save(vip); return ResultUtil.success(); } @RequestMapping(value = "/editVipInfo") @ResponseBody public ResultUtil addVipInfo(Integer id,String vipName, Integer time, Integer timeType, String price,String couponJson, String ticketJson) { Vip vip = vipService.getById(id); vip.setVipName(vipName); vip.setTimeType(timeType); vip.setTime(time); vip.setPrice(new BigDecimal(price)); vip.setInsertTime(new Date()); if (couponJson==null){ couponJson = ""; } vip.setCouponJson(couponJson); if (ticketJson==null){ ticketJson = ""; } vip.setTicketJson(ticketJson); vipService.updateById(vip); return ResultUtil.success(); } @RequestMapping(value = "/offShelf") @ResponseBody public ResultUtil offShelf(Integer id) { Vip vip = vipService.getById(id); vip.setStatus(2); vipService.updateById(vip); return ResultUtil.success(); } @RequestMapping(value = "/onShelf") @ResponseBody public ResultUtil onShelf(Integer id) { Vip vip = vipService.getById(id); vip.setStatus(1); vipService.updateById(vip); return ResultUtil.success(); } /** * 获取 会员卡列表 */ @RequestMapping(value = "/list") @ResponseBody public List> list(String vipName, Integer status) { Page> page = new PageFactory>().defaultPage(); List> maps = vipService.listOfPage(vipName, status, page); for (Map map : maps) { Object timeType = map.get("timeType"); Object time = map.get("time"); Integer timeTypeValue = Integer.valueOf(timeType.toString()); Integer timeValue = Integer.valueOf(time.toString()); switch (timeTypeValue) { case 1: map.put("time",timeValue+"天"); break; case 2: map.put("time",timeValue+"月"); break; case 3: map.put("time",timeValue+"年"); break; } } return maps; } // APP查询所有上架的会员卡 @ResponseBody @PostMapping("/listAll") public List listAll() { List list = vipService.lambdaQuery().eq(Vip::getStatus, 1).list(); List coupons = couponClient.queryCouponAll(); List couponCityList = couponClient.queryAllCity(); List storeList = couponClient.queryAllStore(); List shopList = storeService.list(); // 封装会员权益 for (Vip vip : list) { List couponVipRespList = new ArrayList<>(); List ticketVipRespList = new ArrayList<>(); String couponJson = vip.getCouponJson(); JSONArray couponJsonArray = JSONArray.parseArray(couponJson); for (Object o : couponJsonArray) { JSONObject couponJsonObject = (JSONObject) o; // 优惠券id Integer id = Integer.valueOf(couponJsonObject.getString("id")); // 优惠券数量 Integer value = Integer.valueOf(couponJsonObject.getString("value")); Coupon coupon = coupons.stream().filter(e -> e.getId().equals(id)).findFirst().orElse(new Coupon()); CouponVipResp couponVipResp = new CouponVipResp(); couponVipResp.setId(coupon.getId()); couponVipResp.setName(coupon.getName()); couponVipResp.setType(coupon.getType()); couponVipResp.setUseCondition(coupon.getUseScope()); couponVipResp.setCount(value); switch (coupon.getUseScope()) { case 1: couponVipResp.setAvailable("全国通用"); break; case 2: couponVipResp.setAvailable("指定城市可用"); List couponId = couponCityList.stream().filter(e -> e.getCouponId().equals(id)) .collect(Collectors.toList()); StringBuilder stringBuilder = new StringBuilder(); for (CouponCity couponCity : couponId) { stringBuilder.append(couponCity.getCity()); } couponVipResp.setCityOrStore(String.valueOf(stringBuilder)); break; case 3: couponVipResp.setAvailable("指定门店可用"); // 门店ids List storeIds = storeList.stream().filter(e -> e.getCouponId().equals(id)) .map(CouponStore::getStoreId).collect(Collectors.toList()); StringBuilder storeNames = new StringBuilder(""); if (!storeIds.isEmpty()) { List stores = shopList.stream().filter(e -> storeIds.contains(e.getId())).collect(Collectors.toList()); for (TStore store : stores) { storeNames.append(store.getName()).append(","); } // 去除最后一位 StringBuilder res = storeNames.deleteCharAt(storeNames.length() - 1); couponVipResp.setCityOrStore(res.toString()); } else { couponVipResp.setCityOrStore("无可用门店"); } break; default: break; } couponVipResp.setInstructionsForUse(coupon.getIllustrate()); ConponJsonRuleModel ruleModel = new ConponJsonRuleModel(); JSONObject jsonObject = JSON.parseObject(coupon.getContent()); switch (coupon.getType()) { case 1: // 满减券 Double num1 = jsonObject.getDouble("conditionalAmount"); Double num2 = jsonObject.getDouble("deductionAmount"); ruleModel.setConditionalAmount("满" + num1 + "可用"); ruleModel.setDeductionAmount("¥ " + num2); ruleModel.setExperienceName(""); break; case 2: // 代金券 Double jsonObjectDouble = jsonObject.getDouble("conditionalAmount"); ruleModel.setConditionalAmount(""); ruleModel.setDeductionAmount("¥ " + jsonObjectDouble); ruleModel.setExperienceName(""); break; case 3: // 体验券 ruleModel.setConditionalAmount(""); ruleModel.setDeductionAmount(""); ruleModel.setExperienceName(jsonObject.getString("experienceName")); break; default: break; } couponVipResp.setRuleModel(ruleModel); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); couponVipResp.setEffectiveTime(simpleDateFormat.format(coupon.getEndTime())); couponVipRespList.add(couponVipResp); } vip.setCouponList(couponVipRespList); String ticketJson = vip.getTicketJson(); JSONArray ticketJsonArray = JSONArray.parseArray(ticketJson); for (Object o : ticketJsonArray) { JSONObject ticketJsonObject = (JSONObject) o; TicketVipResp ticketVipResp = new TicketVipResp(); ticketVipResp.setName(ticketJsonObject.getString("name")); ticketVipResp.setTime(ticketJsonObject.getInteger("time")); ticketVipResp.setCount(ticketJsonObject.getInteger("count")); ticketVipRespList.add(ticketVipResp); } vip.setTicketList(ticketVipRespList); } return list; } @Autowired private IProtocolService protocolService; @ResponseBody @PostMapping("/getAgreement") public String getAgreement() { Protocol one = protocolService.lambdaQuery().eq(Protocol::getType, 6).one(); if (one==null){ Protocol protocol = new Protocol(); protocol.setType(6); protocol.setContent(""); protocol.setInsertTime(new Date()); protocolService.save( protocol); return ""; }else{ return one.getContent(); } } @ResponseBody @PostMapping("/getVipByIds") public List getVipByIds(@RequestBody String ids) { List list = vipService.lambdaQuery().in(Vip::getId, Arrays.asList(ids.split(","))).list(); return list; } }