package com.dsh.other.controller; 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.other.entity.Protocol; import com.dsh.other.entity.Store; import com.dsh.other.feignclient.activity.CouponClient; import com.dsh.other.feignclient.activity.model.Coupon; import com.dsh.other.feignclient.activity.model.PointsMerchandise; import com.dsh.other.model.*; import com.dsh.other.service.IProtocolService; import com.dsh.other.service.IVipService; import com.dsh.other.service.StoreService; import com.dsh.other.util.ResultUtil; 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 { @Autowired private IVipService vipService; @Autowired private CouponClient couponClient; @Autowired private StoreService storeService; // 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 pointsMerchandiseList = couponClient.queryAllPointGoods(); 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 (Store 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; case 4: // 抵扣券 ruleModel.setConditionalAmount(""); ruleModel.setDeductionAmount(""); PointsMerchandise pointsMerchandise = pointsMerchandiseList.stream().findFirst().orElse(null); if (pointsMerchandise!=null){ ruleModel.setExperienceName(pointsMerchandise.getName()); } break; default: break; } couponVipResp.setRuleModel(ruleModel); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); couponVipResp.setEffectiveTime(simpleDateFormat.format(coupon.getEndTime())); couponVipResp.setStartTime(simpleDateFormat.format(coupon.getStartTime())); couponVipRespList.add(couponVipResp); } vip.setCouponList(couponVipRespList); String ticketJson = vip.getTicketJson(); if(ticketJson!=null && !"".equals(ticketJson)){ JSONArray ticketJsonArray = JSONArray.parseArray(ticketJson); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); for (Object o : ticketJsonArray) { JSONObject ticketJsonObject = (JSONObject) o; TicketVipResp ticketVipResp = new TicketVipResp(); Integer count = ticketJsonObject.getInteger("count"); ticketVipResp.setName(ticketJsonObject.getString("name")); ticketVipResp.setTime(ticketJsonObject.getInteger("time")); ticketVipResp.setCount(ticketJsonObject.getInteger("count")); ticketVipResp.setStartTime(simpleDateFormat.format(new Date())); Date date = new Date(); // 给这个date加X天 date.setTime(date.getTime() + ticketJsonObject.getInteger("time") * 24 * 60 * 60 * 1000); ticketVipResp.setEffectiveTime(simpleDateFormat.format(date)); 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; } }