From 631a5aa09e0147ca81fffcb1434e57b1cd1ba6f6 Mon Sep 17 00:00:00 2001 From: lisy <linlangsur163@163.com> Date: 星期三, 09 八月 2023 09:34:53 +0800 Subject: [PATCH] app端口:积分变动记录增加变动类型字段,代码同步更新;积分兑换操作的数量校验功能完善 --- cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java | 344 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 315 insertions(+), 29 deletions(-) diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java b/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java index 48661e0..0c446a5 100644 --- a/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java +++ b/cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java @@ -1,27 +1,31 @@ package com.dsh.activity.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.dsh.activity.entity.*; import com.dsh.activity.feignclient.course.CoursePackageClient; +import com.dsh.activity.feignclient.course.CoursePackageConfigClient; import com.dsh.activity.feignclient.course.model.CoursePackage; -import com.dsh.activity.feignclient.model.IntegralCommodity; -import com.dsh.activity.feignclient.model.ProductDetailRequest; -import com.dsh.activity.feignclient.model.ProductDetailsVo; +import com.dsh.activity.feignclient.course.model.CoursePackagePaymentConfig; +import com.dsh.activity.feignclient.model.*; import com.dsh.activity.feignclient.other.StoreClient; import com.dsh.activity.feignclient.other.model.StoreDetailOfCourse; +import com.dsh.activity.model.PointMerchandiseVo; +import com.dsh.activity.model.request.AppUserGoodResp; import com.dsh.activity.model.request.CommodityRequest; import com.dsh.activity.service.*; import com.dsh.activity.util.GDMapGeocodingUtil; import com.dsh.activity.util.StrUtils; +import com.dsh.activity.util.TokenUtil; +import com.dsh.activity.util.ToolUtil; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; @RestController @RequestMapping("") @@ -47,6 +51,9 @@ private StoreClient stoClient; @Autowired + private CoursePackageConfigClient cpcfigClient; + + @Autowired private PointsMerchandiseStoreService pmdstoService; @Autowired @@ -55,13 +62,20 @@ @Autowired private CouponStoreService cstoreService; + @Autowired + private TokenUtil tokenUtil; + @Resource + private CouponCityService ccityService; + + + @ResponseBody @PostMapping("/base/pointMerchars/convertGoods") public List<IntegralCommodity> getConvertibleGoods(){ List<IntegralCommodity> commodity = new ArrayList<>(); List<PointsMerchandise> merchandises = pmdsService.list(new QueryWrapper<PointsMerchandise>() .eq("state",1) - .lt("endTime",new Date())); + .gt("endTime",new Date())); if (merchandises.size() > 0){ for (PointsMerchandise merchandise : merchandises) { IntegralCommodity integralCommodity = new IntegralCommodity(); @@ -69,17 +83,25 @@ integralCommodity.setCommodityImg(merchandise.getProductImages()); integralCommodity.setCommodityName(merchandise.getName()); integralCommodity.setCommodityPrice(merchandise.getPrice()); + integralCommodity.setGoodsType(merchandise.getType()); commodity.add(integralCommodity); } } + System.out.println(commodity); return commodity; } + @ResponseBody @PostMapping("/base/pointMerchars/getCommoditys") - public List<PointsMerchandise> getVicinityGoods(@RequestBody CommodityRequest request){ + public PointMerchandiseVo getVicinityGoods(@RequestBody CommodityRequest request){ + PointMerchandiseVo pointMerchandiseVo = new PointMerchandiseVo(); + List<PointsMerchandise> list = new ArrayList<>(); String provinceCode = ""; String cityCode = ""; + if (ToolUtil.isEmpty(request.getLon()) && ToolUtil.isEmpty(request.getLat())){ + return pointMerchandiseVo; + } try { Map<String, String> geocode = gdMapGeocodingUtil.geocode(request.getLon(), request.getLat()); provinceCode = geocode.get("provinceCode"); @@ -88,7 +110,7 @@ e.printStackTrace(); } - List<PointsMerchandise> list = pmdsService.list(new QueryWrapper<PointsMerchandise>() + list = pmdsService.list(new QueryWrapper<PointsMerchandise>() .eq("state", 1)); if (list.size() > 0 ){ Iterator<PointsMerchandise> iterator = list.iterator(); @@ -98,8 +120,9 @@ iterator.remove(); // 移除符合条件的商品 } } + pointMerchandiseVo.setMerchandises(list); } - return list; + return pointMerchandiseVo; } @PostMapping("/base/pointMerchars/getRedeemedNums") @@ -117,32 +140,60 @@ switch (detailRequest.getGoodsType()){ case 2: // 课包 - CoursePackage coursePackage = cpClient.queryCoursePackageById(detailRequest.getGoodId()); + CoursePackage coursePackage = cpClient.queryCoursePackageById(merchandise.getCoursePackageId()); detailsVo.setGoodId(coursePackage.getId()); - detailsVo.setPics(Arrays.asList(StrUtils.splitStr2StrArr(coursePackage.getDetailDrawing(), ","))); + List<String> list1 = new ArrayList<>(); + list1.add(coursePackage.getCoverDrawing()); + list1.addAll(Arrays.asList(StrUtils.splitStr2StrArr(coursePackage.getDetailDrawing(), ","))); + detailsVo.setPics(list1); + Collections.sort(detailsVo.getPics(), (s1, s2) -> { + if (s1.equals(coursePackage.getCoverDrawing())) { + return -1; // s1排在前面 + } else if (s2.equals(coursePackage.getCoverDrawing())) { + return 1; // s2排在前面 + } else { + return 0; // 保持原顺序 + } + }); detailsVo.setGoodName(coursePackage.getName()); detailsVo.setBelongsScope(merchandise.getUserPopulation()); int coursePackageNums = upmseService.count(new QueryWrapper<UserPointsMerchandise>() .eq("pointsMerchandiseId",merchandise.getId() )); detailsVo.setRedeemedNum(coursePackageNums); - detailsVo.setResidueNum(merchandise.getQuantityIssued() - coursePackageNums); + detailsVo.setResidueNum(Math.max(merchandise.getQuantityIssued() - coursePackageNums, 0)); detailsVo.setPerLimit(merchandise.getPickUpQuantity()); - detailsVo.setIntegral(merchandise.getIntegral()); + if (merchandise.getRedemptionMethod() == 1){ + detailsVo.setExchangeType(1); + detailsVo.setIntegral(merchandise.getIntegral()); + }else { + detailsVo.setExchangeType(2); + detailsVo.setIntegral(merchandise.getIntegral()); + detailsVo.setCash(merchandise.getCash()); + } detailsVo.setCost(merchandise.getPrice()); if (merchandise.getUseScope() == 1){ + detailsVo.setExchangeAddrType(1); detailsVo.setBelongs("全国通用"); }else if (merchandise.getUseScope() == 2){ + detailsVo.setExchangeAddrType(2); detailsVo.setBelongs(merchandise.getProvince()+"|"+merchandise.getCity() + "用户可用"); }else { + detailsVo.setExchangeAddrType(3); List<PointsMerchandiseStore> list = pmdstoService.list(new QueryWrapper<PointsMerchandiseStore>() .eq("pointsMerchandiseId",merchandise.getId() )); PointsMerchandiseStore pointsMerchandiseStore = list.get(0); StoreDetailOfCourse courseOfStore = stoClient.getCourseOfStore(pointsMerchandiseStore.getStoreId()); detailsVo.setBelongs(courseOfStore.getStoreName()+"可用"); } - // TODO: 2023/7/12 课包的课时 -// detailsVo.setCourseHours(); + List<CoursePackagePaymentConfig> courseConfigList = cpcfigClient.getCourseConfigList(coursePackage.getId()); + + for (CoursePackagePaymentConfig coursePackagePaymentConfig : courseConfigList) { + if (Objects.equals(coursePackagePaymentConfig.getId(), merchandise.getCoursePackageConfigId())){ + detailsVo.setCourseHours(coursePackagePaymentConfig.getClassHours()); + break; + } + } detailsVo.setStartTime(format.format(merchandise.getStartTime())); detailsVo.setEndTime(format.format(merchandise.getEndTime())); @@ -154,22 +205,44 @@ case 3: detailsVo.setGoodId(merchandise.getId()); - String[] strings = StrUtils.splitStr2StrArr(merchandise.getProductImages(), ","); - detailsVo.setPics(Arrays.asList(strings)); + List<String> list2 = new ArrayList<>(); + String cover = merchandise.getCover(); + list2.add(cover); + list2.addAll(Arrays.asList(StrUtils.splitStr2StrArr(merchandise.getProductImages(), ","))); + detailsVo.setPics(list2); + Collections.sort(detailsVo.getPics(), (s1, s2) -> { + if (s1.equals(merchandise.getCover())) { + return -1; // s1排在前面 + } else if (s2.equals(merchandise.getCover())) { + return 1; // s2排在前面 + } else { + return 0; // 保持原顺序 + } + }); + detailsVo.setPics(list2); detailsVo.setGoodName(merchandise.getName()); detailsVo.setBelongsScope(merchandise.getUserPopulation()); int count = upmseService.count(new QueryWrapper<UserPointsMerchandise>() .eq("pointsMerchandiseId",merchandise.getId() )); detailsVo.setRedeemedNum(count); - detailsVo.setResidueNum(merchandise.getQuantityIssued()-count); + detailsVo.setResidueNum(Math.max(merchandise.getQuantityIssued() - count, 0)); detailsVo.setPerLimit(merchandise.getPickUpQuantity()); - detailsVo.setIntegral(merchandise.getIntegral()); + detailsVo.setExchangeType(merchandise.getRedemptionMethod()); + if (merchandise.getRedemptionMethod() == 1){ + detailsVo.setIntegral(merchandise.getIntegral()); + }else { + detailsVo.setIntegral(merchandise.getIntegral()); + detailsVo.setCash(merchandise.getCash()); + } detailsVo.setCost(merchandise.getPrice()); if (merchandise.getUseScope() == 1){ + detailsVo.setExchangeAddrType(1); detailsVo.setBelongs("全国通用"); }else if (merchandise.getUseScope() == 2){ + detailsVo.setExchangeAddrType(2); detailsVo.setBelongs(merchandise.getProvince()+"|"+merchandise.getCity() + "用户可用"); }else { + detailsVo.setExchangeAddrType(3); List<PointsMerchandiseStore> list = pmdstoService.list(new QueryWrapper<PointsMerchandiseStore>() .eq("pointsMerchandiseId",merchandise.getId() )); PointsMerchandiseStore pointsMerchandiseStore = list.get(0); @@ -187,27 +260,54 @@ // 优惠券 Coupon coupon = iCouponService.getById(detailRequest.getGoodId()); detailsVo.setGoodId(coupon.getId()); - detailsVo.setPics(Arrays.asList(StrUtils.splitStr2StrArr(coupon.getProductImages(), ","))); + List<String> list3 = new ArrayList<>(); + list3.add(ToolUtil.isEmpty(coupon.getCover()) ? "" : coupon.getCover()); + if (ToolUtil.isNotEmpty(coupon.getProductImages())){ + list3.addAll(Arrays.asList(StrUtils.splitStr2StrArr(coupon.getProductImages(), ","))); + } + detailsVo.setPics(list3); + Collections.sort(detailsVo.getPics(), (s1, s2) -> { + if (s1.equals(coupon.getCover())) { + return -1; // s1排在前面 + } else if (s2.equals(coupon.getCover())) { + return 1; // s2排在前面 + } else { + return 0; // 保持原顺序 + } + }); detailsVo.setGoodName(coupon.getName()); detailsVo.setBelongsScope(coupon.getUserPopulation()); - int couponNums = uconService.count(new QueryWrapper<UserCoupon>() - .eq("couponId",coupon.getId() )); + int couponNums = upmseService.count(new QueryWrapper<UserPointsMerchandise>() + .eq("pointsMerchandiseId",merchandise.getId() )); detailsVo.setRedeemedNum(couponNums); - detailsVo.setResidueNum(coupon.getQuantityIssued()-couponNums); + detailsVo.setResidueNum(Math.max(coupon.getQuantityIssued() - couponNums, 0)); detailsVo.setPerLimit(coupon.getPickUpQuantity()); - detailsVo.setIntegral(merchandise.getIntegral()); + detailsVo.setExchangeType(coupon.getRedemptionMethod()); + if (coupon.getRedemptionMethod() == 1){ + detailsVo.setIntegral(coupon.getIntegral().intValue()); + }else { + detailsVo.setIntegral(coupon.getIntegral().intValue()); + detailsVo.setCash(coupon.getCash()); + } if (coupon.getUseScope() == 1){ + detailsVo.setExchangeAddrType(1); detailsVo.setBelongs("全国通用"); }else if (coupon.getUseScope() == 2){ - detailsVo.setBelongs(coupon.getProvince()+"|"+coupon.getCity() + "用户可用"); + detailsVo.setExchangeAddrType(2); + List<CouponCity> list = ccityService.list(new LambdaQueryWrapper<CouponCity>() + .eq(CouponCity::getCouponId, coupon.getId())); + if (list.size() > 0){ + detailsVo.setBelongs(list.get(0).getProvince()+"|"+list.get(0).getCity() + "用户可用"); + } }else { + detailsVo.setExchangeAddrType(3); List<CouponStore> list = cstoreService.list(new QueryWrapper<CouponStore>() .eq("couponId",coupon.getId() )); StoreDetailOfCourse courseOfStore = stoClient.getCourseOfStore(list.get(0).getStoreId()); detailsVo.setBelongs(courseOfStore.getStoreName()+"可用"); } - detailsVo.setStartTime(format.format(merchandise.getStartTime())); - detailsVo.setEndTime(format.format(merchandise.getEndTime())); + detailsVo.setStartTime(format.format(coupon.getStartTime())); + detailsVo.setEndTime(format.format(coupon.getEndTime())); detailsVo.setContents(coupon.getIllustrate()); detailsVo.setGoodType(4); @@ -219,4 +319,190 @@ } + @ResponseBody + @PostMapping("/base/pointMerchars/getDetailsOfExchange") + public ExchangeDetailsVo getIntegralExchangeDetails(@RequestBody Integer appUserId){ + ExchangeDetailsVo detailsVo = new ExchangeDetailsVo(); + List<ExchangeDetailsResponse> responses = new ArrayList<>(); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + List<UserPointsMerchandise> pointsMerchandises = upmseService.list(new QueryWrapper<UserPointsMerchandise>() + .eq("userId",appUserId )); + if (pointsMerchandises.size() > 0 ){ + for (UserPointsMerchandise pointsMerchandise : pointsMerchandises) { + PointsMerchandise merchandise = pmdsService.getById(pointsMerchandise.getPointsMerchandiseId()); + ExchangeDetailsResponse detailsResponse = new ExchangeDetailsResponse(); + detailsResponse.setDetailsId(pointsMerchandise.getId()); + detailsResponse.setGoodName(merchandise.getName()); + if (merchandise.getRedemptionMethod() == 1){ + detailsResponse.setExchangeType(1); + detailsResponse.setIntegral(merchandise.getIntegral()); + }else { + detailsResponse.setExchangeType(2); + detailsResponse.setIntegral(merchandise.getIntegral()); + detailsResponse.setCash(merchandise.getCash()); + } + detailsResponse.setStartTime(simpleDateFormat.format(merchandise.getStartTime())); + detailsResponse.setEndTime(simpleDateFormat.format(merchandise.getEndTime())); + detailsResponse.setUseStatus(pointsMerchandise.getStatus() == 1 ? 2 : 1); + detailsResponse.setGoodType(merchandise.getType()); + responses.add(detailsResponse); + } + detailsVo.setDetailsResponses(responses); + } + return detailsVo; + } + + + @ResponseBody + @PostMapping("/base/pointMerchars/getSpecificsOfGoods") + public PointDetailsVo getSpecificsOfGoods(@RequestBody Integer speMercharsId){ + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + PointDetailsVo detailsVo = new PointDetailsVo(); + UserPointsMerchandise byId = upmseService.getById(speMercharsId); + if (ToolUtil.isNotEmpty(byId)){ + PointsMerchandise pmdsServiceById = pmdsService.getById(byId.getPointsMerchandiseId()); + detailsVo.setExchangeType(pmdsServiceById.getRedemptionMethod()); + detailsVo.setGoodType(pmdsServiceById.getType()); + if (pmdsServiceById.getRedemptionMethod() == 1){ + detailsVo.setIntegral(pmdsServiceById.getIntegral()); + }else { + detailsVo.setCash(pmdsServiceById.getCash()); + detailsVo.setIntegral(pmdsServiceById.getIntegral()); + } + detailsVo.setDetailsId(byId.getId()); + switch (pmdsServiceById.getType()){ + case 1: + case 3: + List<String> list2 = Arrays.asList(StrUtils.splitStr2StrArr(pmdsServiceById.getProductImages(), ",")); + list2.add(pmdsServiceById.getCover()); + detailsVo.setPics(list2); + Collections.sort(detailsVo.getPics(), (s1, s2) -> { + if (s1.equals(pmdsServiceById.getCover())) { + return -1; // s1排在前面 + } else if (s2.equals(pmdsServiceById.getCover())) { + return 1; // s2排在前面 + } else { + return 0; // 保持原顺序 + } + }); + break; + case 2: + CoursePackage coursePackage = cpClient.queryCoursePackageById(pmdsServiceById.getCoursePackageId()); + List<String> list1 = Arrays.asList(StrUtils.splitStr2StrArr(coursePackage.getDetailDrawing(), ",")); + list1.add(coursePackage.getCoverDrawing()); + detailsVo.setPics(list1); + CoursePackagePaymentConfig coursePackagePaymentConfig = cpClient.queryConfigCoursePackData(pmdsServiceById.getCoursePackageConfigId()); + detailsVo.setClassHours(coursePackagePaymentConfig.getClassHours()); + Collections.sort(detailsVo.getPics(), (s1, s2) -> { + if (s1.equals(coursePackage.getCoverDrawing())) { + return -1; // s1排在前面 + } else if (s2.equals(coursePackage.getCoverDrawing())) { + return 1; // s2排在前面 + } else { + return 0; // 保持原顺序 + } + }); + break; + case 4: + Coupon coupon = iCouponService.getById(pmdsServiceById.getId()); + List<String> list3 = Arrays.asList(StrUtils.splitStr2StrArr(coupon.getProductImages(), ",")); + list3.add(coupon.getCover()); + detailsVo.setPics(list3); + Collections.sort(detailsVo.getPics(), (s1, s2) -> { + if (s1.equals(coupon.getCover())) { + return -1; // s1排在前面 + } else if (s2.equals(coupon.getCover())) { + return 1; // s2排在前面 + } else { + return 0; // 保持原顺序 + } + }); + break; + default: + break; + } + + detailsVo.setGoodName(pmdsServiceById.getName()); + detailsVo.setStartTime(simpleDateFormat.format(pmdsServiceById.getStartTime())); + detailsVo.setEndTime(simpleDateFormat.format(pmdsServiceById.getEndTime())); + detailsVo.setOrderTime(simpleDateFormat.format(byId.getInsertTime())); + if (byId.getStatus() == 1){ + detailsVo.setUseType(2); + }else { + detailsVo.setUseType(1); + detailsVo.setWriteOffTime(simpleDateFormat.format(byId.getVerificationTime())); + StoreDetailOfCourse courseOfStore = stoClient.getCourseOfStore(byId.getVerifiStoreId()); + detailsVo.setWriteOffName(courseOfStore.getStoreName()); + } + switch (pmdsServiceById.getUseScope()){ + case 1: + detailsVo.setBelongs("全国通用"); + break; + case 2: + detailsVo.setBelongs(pmdsServiceById.getProvince()+pmdsServiceById.getCity()); + break; + case 3: + StoreDetailOfCourse courseOfStore = stoClient.getCourseOfStore(byId.getStoreId()); + detailsVo.setBelongs(courseOfStore.getStoreName()+" "+courseOfStore.getStoreAddr()); + break; + default: + break; + } + detailsVo.setContents(pmdsServiceById.getRedemptionInstructions()); + } + return detailsVo; + } + + + @PostMapping("/base/pointMerchars/selectPointsMerchandiseById") + public PointsMerchandise selectPointsMerchandiseById(@RequestBody Integer speMercharsId){ + return pmdsService.getById(speMercharsId); + } + + + @PostMapping("/base/pointMerchars/saveDetailsUserPointMercase") + public void saveDetailsUserPointMercase(@RequestBody UserPointsMerchandise merchandise){ + merchandise.setInsertTime(new Date()); + upmseService.save(merchandise); + } + + + @PostMapping("/base/pointMerchars/updateDetailsUserPointMercase") + public void updateDetailsUserPointMercase(@RequestBody UserPointsMerchandise merchandise){ + upmseService.updateById(merchandise); + } + + @PostMapping("/base/pointMerchars/queryUserPointMerchaseByCode") + public List<UserPointsMerchandise> queryUserPointMerchaseByCode(@RequestBody String code){ + return upmseService.list(new QueryWrapper<UserPointsMerchandise>() + .eq("code",code)); + } + + + @PostMapping("/base/pointMerchars/queryStoreIdsOfMerchandise") + public List<Integer> queryPointMerStoreIds(@RequestBody Integer pointMerId){ + List<Integer> storeIds = new ArrayList<>(); + List<PointsMerchandiseStore> list = pmdstoService.list(new QueryWrapper<PointsMerchandiseStore>() + .eq("pointsMerchandiseId",pointMerId)); + if (list.size() > 0){ + storeIds = list.stream().map(PointsMerchandiseStore::getStoreId).collect(Collectors.toList()); + } + return storeIds; + } + + /** + * 获取用户已兑换商品的数量 + * @param goodResp + * @return 数量 + */ + @ResponseBody + @PostMapping("/base/pointMerchars/queryUserHasGoodsNums") + public int queryUserHasGoodsNums(@RequestBody AppUserGoodResp goodResp){ + int count = upmseService.count(new LambdaQueryWrapper<UserPointsMerchandise>() + .eq(UserPointsMerchandise::getUserId,goodResp.getGoodId()) + .eq(UserPointsMerchandise::getPointsMerchandiseId,goodResp.getGoodId())); + System.out.println(count); + return count; + } + } -- Gitblit v1.7.1