ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constant/AppErrorConstant.java
@@ -65,4 +65,6 @@ String COUPON_TYPE_ERROR = "只能核销商品优惠券"; String STAFF_MOBILE_DOUBLE = "手机号码已被注册"; String SHOP_USER_DOUBLE = "账号已经关联其他商户登录"; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/MemberTotalChangeDto.java
New file @@ -0,0 +1,62 @@ package com.ruoyi.system.api.domain.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.Date; /** * @ClassName MemberTotalChangeDto * @Description TODO * @Author jqs * @Date 2023/6/28 13:58 * @Version 1.0 */ @Data public class MemberTotalChangeDto { @ApiModelProperty(value = "会员id") private String memberId; @ApiModelProperty(value = "积分变化") private Integer changeIntegral; @ApiModelProperty(value = "积分变化类型1加2减") private Integer typeIntegral; @ApiModelProperty(value = "消费金额") private BigDecimal payMoney; @ApiModelProperty(value = "消费时间") private Date payTime; @ApiModelProperty(value = "服务时间") private Date serviceTime; @ApiModelProperty(value = "服务次数变化类型1加2减") private Integer typeService; @ApiModelProperty(value = "服务次数") private Integer serviceCount; @ApiModelProperty(value = "下次跟进时间") private Date nextTaskTime; @ApiModelProperty(value = "活动时间") private Date activityTime; @ApiModelProperty(value = "周期订单变化") private Integer cycleOrderChange; @ApiModelProperty(value = "体验订单变化") private Integer experienceOrderChange; @ApiModelProperty(value = "服务订单变化") private Integer serviceOrderChange; @ApiModelProperty(value = "单品订单变化") private Integer goodsOrderChange; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/ShopTotalChangeDto.java
New file @@ -0,0 +1,67 @@ package com.ruoyi.system.api.domain.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; /** * @ClassName ShopTotalChangeDto * @Description TODO * @Author jqs * @Date 2023/6/28 17:20 * @Version 1.0 */ @Data public class ShopTotalChangeDto { @ApiModelProperty(value = "商户id") private Long shopId; @ApiModelProperty(value = "周期订单金额") private BigDecimal cycleMoney; @ApiModelProperty(value = "体验订单金额") private BigDecimal experienceMoney; @ApiModelProperty(value = "服务订单金额") private BigDecimal serviceMoney; @ApiModelProperty(value = "单品订单金额") private BigDecimal goodsMoney; @ApiModelProperty(value = "活动次数") private Integer activityCount; @ApiModelProperty(value = "周期服务1加2减") private Integer typeCycleService; @ApiModelProperty(value = "周期服务次数") private Integer cycleService; @ApiModelProperty(value = "周期服务人数") private Integer cyclePerson; @ApiModelProperty(value = "服务服务1加2减") private Integer typeServiceService; @ApiModelProperty(value = "服务服务次数") private Integer serviceService; @ApiModelProperty(value = "服务服务人数") private Integer servicePerson; @ApiModelProperty(value = "体验服务1加2减") private Integer typeExperienceService; @ApiModelProperty(value = "体验服务次数") private Integer experienceService; @ApiModelProperty(value = "体验服务人数") private Integer experiencePerson; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/MemberCoupon.java
@@ -45,6 +45,9 @@ */ @TableField("user_id") private Long userId; @TableField("shop_id") private Long shopId; /** * 优惠券类型1.满减2.折扣3.代金4.商品 */ ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/MerVerifyCouponGetVo.java
@@ -17,14 +17,19 @@ @Data public class MerVerifyCouponGetVo { @ApiModelProperty(value = "优惠券id") private String memberCouponId; @ApiModelProperty(value = "用户id") private Long userId; @ApiModelProperty(value = "优惠券") private MemberCoupon memberCoupon; @ApiModelProperty(value = "优惠券来源") private String couponFrom; @ApiModelProperty(value = "商品列表") private List<Goods> goodsList; @ApiModelProperty(value = "优惠券") private MemberCoupon memberCoupon; } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/CouponController.java
@@ -55,4 +55,18 @@ return R.ok(verifyCouponGetVo); } /** * @description 核销优惠券 * @author jqs * @date 2023/6/28 11:43 * @param memberCouponId * @return R<MerVerifyCouponGetVo> */ @PostMapping("/sureVerifyCoupon") public R<MerVerifyCouponGetVo> sureVerifyCoupon(@RequestBody String memberCouponId) { MerVerifyCouponGetVo verifyCouponGetVo = memberCouponService.sureVerifyCoupon(memberCouponId); return R.ok(verifyCouponGetVo); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java
@@ -4,6 +4,7 @@ import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.member.service.member.MemberService; import com.ruoyi.member.service.member.MemberSuggestService; import com.ruoyi.member.service.member.MemberTotalService; import com.ruoyi.system.api.domain.dto.*; import com.ruoyi.system.api.domain.poji.member.Member; import com.ruoyi.system.api.domain.vo.*; @@ -28,6 +29,8 @@ @Resource private MemberSuggestService memberSuggestService; @Resource private MemberTotalService memberTotalService; /** * @description: getMember @@ -234,5 +237,17 @@ return R.ok(shopTotalMemberVo); } /** * @description 更新会员统计 * @author jqs * @date 2023/6/28 17:52 * @param memberTotalChangeDto * @return R */ @PostMapping("/changeMemberTotal") public R changeMemberTotal(@RequestBody MemberTotalChangeDto memberTotalChangeDto) { memberTotalService.changeMemberTotal(memberTotalChangeDto); return R.ok(); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/member/MemberTotal.java
@@ -1,16 +1,16 @@ package com.ruoyi.member.domain.pojo.member; import java.math.BigDecimal; import java.util.Date; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.activerecord.Model; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; /** * <p> @@ -116,8 +116,8 @@ /** * 总体验订单数 */ @TableField("tolta_experience_order") private Integer toltaExperienceOrder; @TableField("total_experience_order") private Integer totalExperienceOrder; /** * 总服务订单数 */ ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/coupon/CouponServiceImpl.java
@@ -328,6 +328,7 @@ memberCoupon.setDelFlag(0); memberCoupon.setCouponId(coupon.getCouponId()); memberCoupon.setUserId(userId); memberCoupon.setShopId(coupon.getShopId()); memberCoupon.setCouponType(coupon.getCouponType()); memberCoupon.setCouponStatus(coupon.getCouponStatus()); memberCoupon.setCouponName(coupon.getCouponName()); ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberCouponServiceImpl.java
@@ -2,7 +2,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.member.domain.pojo.coupon.Coupon; import com.ruoyi.member.mapper.member.MemberCouponMapper; import com.ruoyi.member.service.coupon.CouponService; import com.ruoyi.member.service.member.MemberCouponService; import com.ruoyi.system.api.constant.AppErrorConstant; import com.ruoyi.system.api.domain.poji.goods.Goods; @@ -13,6 +15,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; import java.util.List; /** @@ -31,6 +34,9 @@ @Resource private RemoteGoodsService remoteGoodsService; @Resource private CouponService couponService; /** * @description: TODO @@ -54,7 +60,53 @@ @Override public MerVerifyCouponGetVo getVerifyCoupon(String verifyCoupon){ MemberCoupon memberCoupon = this.getById(verifyCoupon); // 检查是否存在该优惠券 if(memberCoupon==null){ throw new ServiceException(AppErrorConstant.COUPON_NO_FIND); } // 检查优惠券状态 int couponStatus = memberCoupon.getCouponStatus(); if (couponStatus == 0) { throw new ServiceException(AppErrorConstant.COUPON_EXPIRED); } else if (couponStatus == 2) { throw new ServiceException(AppErrorConstant.COUPON_USED); } else if (couponStatus != 0) { throw new ServiceException(AppErrorConstant.COUPON_NO_FIND); } // 检查优惠券类型 int couponType = memberCoupon.getCouponType(); if (couponType != 4) { throw new ServiceException(AppErrorConstant.COUPON_TYPE_ERROR); } MerVerifyCouponGetVo merVerifyCouponGetVo = new MerVerifyCouponGetVo(); merVerifyCouponGetVo.setUserId(memberCoupon.getUserId()); String relGoodsIds = memberCoupon.getRelGoodsIds(); List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(relGoodsIds).getData(); if (goodsList != null) { merVerifyCouponGetVo.setGoodsList(goodsList); } merVerifyCouponGetVo.setMemberCouponId(memberCoupon.getId()); Coupon coupon = couponService.getById(memberCoupon.getCouponId()); // 设置优惠券来源 if (coupon.getCouponFrom() == 1) { merVerifyCouponGetVo.setCouponFrom("平台"); } else { merVerifyCouponGetVo.setCouponFrom("商户"); } return merVerifyCouponGetVo; } /** * @description 核销优惠券 * @author jqs * @date 2023/6/28 11:44 * @param memberCouponId * @return MerVerifyCouponGetVo */ @Override public MerVerifyCouponGetVo sureVerifyCoupon(String memberCouponId){ MemberCoupon memberCoupon = this.getById(memberCouponId); if(memberCoupon==null||memberCoupon.getDelFlag()==1){ throw new ServiceException(AppErrorConstant.COUPON_NO_FIND); } if(memberCoupon.getCouponStatus()==0){ @@ -69,12 +121,22 @@ } MerVerifyCouponGetVo merVerifyCouponGetVo = new MerVerifyCouponGetVo(); merVerifyCouponGetVo.setUserId(memberCoupon.getUserId()); merVerifyCouponGetVo.setMemberCoupon(memberCoupon); String relGoodsIds = memberCoupon.getRelGoodsIds(); List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(relGoodsIds).getData(); if(goodsList!=null){ merVerifyCouponGetVo.setGoodsList(goodsList); } merVerifyCouponGetVo.setMemberCouponId(memberCoupon.getId()); Coupon coupon = couponService.getById(memberCoupon.getCouponId()); if (coupon.getCouponFrom()==1) { merVerifyCouponGetVo.setCouponFrom("平台"); } else { merVerifyCouponGetVo.setCouponFrom("商户"); } memberCoupon.setCouponStatus(2); memberCoupon.setUseTime(new Date()); this.saveOrUpdate(memberCoupon); merVerifyCouponGetVo.setMemberCoupon(memberCoupon); return merVerifyCouponGetVo; } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberTotalServiceImpl.java
@@ -1,9 +1,10 @@ package com.ruoyi.member.service.impl.member; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.member.domain.pojo.member.MemberTotal; import com.ruoyi.member.mapper.member.MemberTotalMapper; import com.ruoyi.member.service.member.MemberTotalService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.system.api.domain.dto.MemberTotalChangeDto; import org.springframework.stereotype.Service; /** @@ -17,4 +18,66 @@ @Service public class MemberTotalServiceImpl extends ServiceImpl<MemberTotalMapper, MemberTotal> implements MemberTotalService { /** * @description 会员统计变动 * @author jqs * @date 2023/6/28 14:34 * @param memberTotalChangeDto * @return void */ @Override public void changeMemberTotal(MemberTotalChangeDto memberTotalChangeDto){ MemberTotal memberTotal = this.getById(memberTotalChangeDto.getMemberId()); //积分变动 if(memberTotalChangeDto.getChangeIntegral()!=null){ if(memberTotalChangeDto.getTypeIntegral()==2){ memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()-memberTotalChangeDto.getChangeIntegral()); memberTotal.setUsedIntegral(memberTotal.getUsedIntegral()+memberTotalChangeDto.getChangeIntegral()); }else{ memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+memberTotalChangeDto.getChangeIntegral()); memberTotal.setTotalIntegral(memberTotal.getTotalIntegral()+memberTotalChangeDto.getChangeIntegral()); } } //消费变动 if(memberTotalChangeDto.getPayMoney()!=null){ memberTotal.setTotalPayMoney(memberTotal.getTotalPayMoney().add(memberTotalChangeDto.getPayMoney())); memberTotal.setTotalPayCount(memberTotal.getTotalPayCount()+1); memberTotal.setLastPayMoney(memberTotalChangeDto.getPayMoney()); memberTotal.setLastPayTime(memberTotalChangeDto.getPayTime()); } //服务次数变动 if(memberTotalChangeDto.getServiceCount()!=null){ if(memberTotalChangeDto.getTypeService()==2){ memberTotal.setUseableServiceCount(memberTotal.getUseableServiceCount()-memberTotalChangeDto.getServiceCount()); memberTotal.setUsedServiceCount(memberTotal.getUsedServiceCount()+memberTotalChangeDto.getServiceCount()); }else{ memberTotal.setUseableIntegral(memberTotal.getUseableIntegral()+memberTotalChangeDto.getServiceCount()); memberTotal.setTotalServiceCount(memberTotal.getTotalServiceCount()+memberTotalChangeDto.getServiceCount()); } } //跟进时间 if(memberTotalChangeDto.getNextTaskTime()!=null){ memberTotal.setNextTaskTime(memberTotalChangeDto.getNextTaskTime()); } //活动次数变动 if(memberTotalChangeDto.getActivityTime()!=null){ memberTotal.setTotalActivityCount(memberTotal.getTotalActivityCount()+1); memberTotal.setLastActivityTime(memberTotalChangeDto.getActivityTime()); } //订单数量变动 if(memberTotalChangeDto.getCycleOrderChange()!=null){ memberTotal.setTotalCycleOrder(memberTotal.getTotalCycleOrder()+memberTotalChangeDto.getCycleOrderChange()); } if(memberTotalChangeDto.getExperienceOrderChange()!=null){ memberTotal.setTotalExperienceOrder(memberTotal.getTotalExperienceOrder()+memberTotalChangeDto.getExperienceOrderChange()); } if(memberTotalChangeDto.getServiceOrderChange()!=null){ memberTotal.setTotalServiceOrder(memberTotal.getTotalServiceOrder()+memberTotalChangeDto.getServiceOrderChange()); } if(memberTotalChangeDto.getGoodsOrderChange()!=null){ memberTotal.setTotalGoodsOrder(memberTotal.getTotalGoodsOrder()+memberTotalChangeDto.getGoodsOrderChange()); } this.saveOrUpdate(memberTotal); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberCouponService.java
@@ -33,4 +33,13 @@ * @return void */ MerVerifyCouponGetVo getVerifyCoupon(String verifyCoupon); /** * @description 核销优惠券 * @author jqs * @date 2023/6/28 11:44 * @param memberCouponId * @return MerVerifyCouponGetVo */ MerVerifyCouponGetVo sureVerifyCoupon(String memberCouponId); } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberTotalService.java
@@ -1,7 +1,8 @@ package com.ruoyi.member.service.member; import com.ruoyi.member.domain.pojo.member.MemberTotal; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.member.domain.pojo.member.MemberTotal; import com.ruoyi.system.api.domain.dto.MemberTotalChangeDto; /** * <p> @@ -13,4 +14,13 @@ */ public interface MemberTotalService extends IService<MemberTotal> { /** * @description 会员统计变动 * @author jqs * @date 2023/6/28 14:34 * @param memberTotalChangeDto * @return void */ void changeMemberTotal(MemberTotalChangeDto memberTotalChangeDto); } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerOrderController.java
@@ -75,6 +75,15 @@ return R.ok(merVerifyOrderVo); } @RequestMapping(value = "/sureVerifyCoupon", method = RequestMethod.POST) @ApiOperation(value = "核销优惠券") public R<MerVerifyCouponVo> sureVerifyCoupon(@RequestBody MerVerifyCouponDto merVerifyCouponDto) { Long userId = SecurityUtils.getUserId(); merVerifyCouponDto.setUserId(userId); MerVerifyCouponVo merVerifyCouponVo = orderService.sureVerifyCoupon(merVerifyCouponDto); return R.ok(merVerifyCouponVo); } @RequestMapping(value = "/pageMerMemberNoClearOrder", method = RequestMethod.POST) @ApiOperation(value = "分页获取用户未结清订单") ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/MerVerifyCouponDto.java
New file @@ -0,0 +1,21 @@ package com.ruoyi.order.domain.dto; import com.ruoyi.system.api.domain.dto.MgtBaseDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @ClassName MerVerifyCouponDto * @Description TODO * @Author jqs * @Date 2023/6/28 11:22 * @Version 1.0 */ @Data public class MerVerifyCouponDto extends MgtBaseDto { @ApiModelProperty(value = "优惠券id") private String memberCouponId; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/ConsumerGoods.java
@@ -123,6 +123,16 @@ */ @TableField("goods_nurses") private String goodsNurses; /** * 来源1订单2优惠券3奖品 */ @TableField("source_from") private Integer sourceFrom; /** * 用户优惠券id */ @TableField("member_coupon_id") private String memberCouponId; @Override protected Serializable pkVal() { ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerVerifyCouponVo.java
@@ -22,9 +22,13 @@ @ApiModelProperty(value = "用户电话") private String userMobile; @ApiModelProperty(value = "优惠券id") private String memberCouponId; @ApiModelProperty(value = "优惠券来源") private String couponFrom; @ApiModelProperty(value = "优惠券来源") private List<MerCouponGoodsListVo> goodsList; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -8,29 +8,29 @@ import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.uuid.IdUtils; import com.ruoyi.common.security.utils.CodeFactoryUtil; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.order.domain.dto.*; import com.ruoyi.order.domain.pojo.order.ConsumerGoods; import com.ruoyi.order.domain.pojo.order.Order; import com.ruoyi.order.domain.pojo.order.OrderGoods; import com.ruoyi.order.domain.vo.*; import com.ruoyi.order.mapper.order.OrderMapper; import com.ruoyi.order.service.order.ConsumerGoodsService; import com.ruoyi.order.service.order.OrderGoodsService; import com.ruoyi.common.security.utils.CodeFactoryUtil; import com.ruoyi.order.service.order.OrderService; import com.ruoyi.order.service.order.UserServiceRecordService; import com.ruoyi.system.api.domain.dto.*; import com.ruoyi.system.api.domain.vo.*; import com.ruoyi.system.api.domain.vo.MgtMapTotalVo; import com.ruoyi.system.api.service.*; import com.ruoyi.system.api.constant.AppErrorConstant; import com.ruoyi.system.api.domain.dto.*; import com.ruoyi.system.api.domain.poji.goods.Goods; import com.ruoyi.system.api.domain.poji.goods.GoodsFile; import com.ruoyi.system.api.domain.poji.goods.ShopGoods; import com.ruoyi.system.api.domain.poji.member.Member; import com.ruoyi.system.api.domain.poji.member.MemberCoupon; import com.ruoyi.system.api.domain.poji.shop.Shop; import com.ruoyi.system.api.domain.poji.sys.SysUser; import com.ruoyi.order.mapper.order.OrderMapper; import com.ruoyi.order.service.order.OrderService; import com.ruoyi.system.api.domain.vo.*; import com.ruoyi.system.api.service.*; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -577,12 +577,20 @@ this.saveOrUpdate(order); //创建服务商品 List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listAppVoByOrderId(orderId); StringJoiner goodsIdSj = new StringJoiner(","); for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) { goodsIdSj.add(appUserOrderGoodsPageVo.getGoodsId()); } String goodsIds = goodsIdSj.toString(); List<Goods> goodsList = remoteGoodsService.listGoodsByGoodsId(goodsIds).getData(); Map<String,Goods> goodsMap = goodsList.stream() .collect(Collectors.toMap(Goods::getGoodsId, Function.identity())); ConsumerGoods consumerGoods; String consumerGoodsId; Goods goods; for (AppUserOrderGoodsPageVo appUserOrderGoodsPageVo : appUserOrderGoodsPageVoList) { consumerGoods = new ConsumerGoods(); goods = remoteGoodsService.getGoods(appUserOrderGoodsPageVo.getGoodsId()).getData(); goods = goodsMap.get(appUserOrderGoodsPageVo.getGoodsId()); consumerGoodsId = IdUtils.simpleUUID(); consumerGoods.setConsumerGoodsId(consumerGoodsId); consumerGoods.setDelFlag(0); @@ -601,6 +609,7 @@ consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); consumerGoods.setGoodsPicture(appUserOrderGoodsPageVo.getGoodsPicture()); consumerGoods.setGoodsNurses(goods.getGoodsNurses()); consumerGoods.setSourceFrom(1); consumerGoodsService.save(consumerGoods); } //生成返回 @@ -623,6 +632,70 @@ merVerifyOrderVo.setUserName(sysUser.getNickName()); merVerifyOrderVo.setUserMobile(sysUser.getPhonenumber()); return merVerifyOrderVo; } /** * @description 确认核销优惠券 * @author jqs * @date 2023/6/28 11:26 * @param merVerifyCouponDto * @return MerVerifyCouponVo */ @Override public MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto){ MerVerifyCouponGetVo verifyCouponGetVo = remoteCouponService.getVerifyCoupon(merVerifyCouponDto.getMemberCouponId()).getData(); // 创建MerVerifyCouponVo对象 MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo(); // 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象 List<Goods> goodsList = verifyCouponGetVo.getGoodsList(); Long userId = verifyCouponGetVo.getUserId(); // 调用remoteMemberService的getMember方法获取Member对象 Member member = remoteMemberService.getMember(userId).getData(); merVerifyCouponVo.setUserName(member.getNickName()); merVerifyCouponVo.setUserMobile(member.getMobile()); merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom()); // 将goodsList转换为MerCouponGoodsListVo列表,并设置相应属性 List<MerCouponGoodsListVo> merCouponGoodsList = goodsList.stream() .map(goods -> { MerCouponGoodsListVo merCouponGoods = new MerCouponGoodsListVo(); merCouponGoods.setGoodsId(goods.getGoodsId()); merCouponGoods.setGoodsName(goods.getGoodsName()); // 设置其他属性 return merCouponGoods; }) .collect(Collectors.toList()); // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList merVerifyCouponVo.setGoodsList(merCouponGoodsList); MemberCoupon memberCoupon = verifyCouponGetVo.getMemberCoupon(); //生成服务 ConsumerGoods consumerGoods; String consumerGoodsId; GoodsFile goodsFile; for (Goods goods : goodsList) { consumerGoods = new ConsumerGoods(); consumerGoodsId = IdUtils.simpleUUID(); consumerGoods.setConsumerGoodsId(consumerGoodsId); consumerGoods.setDelFlag(0); consumerGoods.setServiceStatus(1); consumerGoods.setShopId(memberCoupon.getShopId()); consumerGoods.setUserId(memberCoupon.getUserId()); consumerGoods.setSourceFrom(2); consumerGoods.setMemberCouponId(memberCoupon.getId()); consumerGoods.setGoodsId(goods.getGoodsId()); consumerGoods.setGoodsName(goods.getGoodsName()); consumerGoods.setCycleNumFlag(goods.getCycleNumFlag()); consumerGoods.setServiceNum(goods.getServiceNum()); consumerGoods.setUsedNum(0); consumerGoods.setGoodsType(goods.getGoodsType()); consumerGoods.setCreateTime(new Date()); consumerGoods.setGoodsIntroduction(goods.getGoodsIntroduction()); goodsFile = remoteGoodsService.getGoodsFile(goods.getGoodsId()).getData(); consumerGoods.setGoodsPicture(goodsFile.getFileUrl()); consumerGoods.setGoodsNurses(goods.getGoodsNurses()); consumerGoods.setSourceFrom(1); consumerGoodsService.save(consumerGoods); } return merVerifyCouponVo; } /** @@ -1843,9 +1916,29 @@ */ @Override public MerVerifyCouponVo verifyCoupon(String verifyCode) { // 创建MerVerifyCouponVo对象 MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo(); // 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象 MerVerifyCouponGetVo verifyCouponGetVo = remoteCouponService.getVerifyCoupon(verifyCode).getData(); List<Goods> goodsList = verifyCouponGetVo.getGoodsList(); Long userId = verifyCouponGetVo.getUserId(); // 调用remoteMemberService的getMember方法获取Member对象 Member member = remoteMemberService.getMember(userId).getData(); merVerifyCouponVo.setUserName(member.getNickName()); merVerifyCouponVo.setUserMobile(member.getMobile()); merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom()); // 将goodsList转换为MerCouponGoodsListVo列表,并设置相应属性 List<MerCouponGoodsListVo> merCouponGoodsList = goodsList.stream() .map(goods -> { MerCouponGoodsListVo merCouponGoods = new MerCouponGoodsListVo(); merCouponGoods.setGoodsId(goods.getGoodsId()); merCouponGoods.setGoodsName(goods.getGoodsName()); // 设置其他属性 return merCouponGoods; }) .collect(Collectors.toList()); // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList merVerifyCouponVo.setGoodsList(merCouponGoodsList); return merVerifyCouponVo; } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -89,6 +89,15 @@ MerVerifyOrderVo sureVerifyOrder(MerVerifyOrderDto merVerifyOrderDto); /** * @description 确认核销优惠券 * @author jqs * @date 2023/6/28 11:26 * @param merVerifyCouponDto * @return MerVerifyCouponVo */ MerVerifyCouponVo sureVerifyCoupon(MerVerifyCouponDto merVerifyCouponDto); /** * 收银未结清订单列表 * @param page * @param merMemberNoClearOrderDto ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java
@@ -4,14 +4,9 @@ import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.shop.domain.pojo.shop.ShopRelUser; import com.ruoyi.shop.domain.pojo.shop.ShopStaff; import com.ruoyi.shop.service.shop.ShopRelUserService; import com.ruoyi.shop.service.shop.ShopService; import com.ruoyi.shop.service.shop.ShopStaffService; import com.ruoyi.shop.service.shop.ShopSuggestService; import com.ruoyi.shop.service.shop.*; import com.ruoyi.shop.service.task.ShopTaskService; import com.ruoyi.system.api.domain.dto.MgtBaseBathDto; import com.ruoyi.system.api.domain.dto.MgtBasePlatformDto; import com.ruoyi.system.api.domain.dto.MgtShopIdByCodeDto; import com.ruoyi.system.api.domain.dto.*; import com.ruoyi.system.api.domain.poji.shop.Shop; import com.ruoyi.system.api.domain.poji.sys.SysUser; import com.ruoyi.system.api.domain.vo.MgtBulletinBoardVo; @@ -58,6 +53,9 @@ @Resource private ShopTaskService shopTaskService; @Resource private ShopTotalService shopTotalService; /** @@ -189,4 +187,19 @@ List<Long> shopIdList = shopService.listShopIdByPlTotal(mgtBasePlatformDto); return R.ok(shopIdList); } /** * @description 更新商户统计 * @author jqs * @date 2023/6/28 17:52 * @param shopTotalChangeDto * @return R */ @PostMapping("/changeShopTotal") public R changeShopTotal(@RequestBody ShopTotalChangeDto shopTotalChangeDto) { shopTotalService.changeShopTotal(shopTotalChangeDto); return R.ok(); } } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/management/MgtShopController.java
@@ -110,6 +110,14 @@ return R.ok(); } @RequestMapping(value = "/transferMgtShop", method = RequestMethod.POST) @Log(title = "商户管理", businessType = BusinessType.UPDATE,operContent = "转移客户") @ApiOperation(value = "转移客户") public R transferMgtShop(@RequestBody MgtTransferShopDto mgtTransferShopDto) { shopService.transferMgtShop(mgtTransferShopDto); return R.ok(); } @RequestMapping(value = "/terminateMgtCooperation", method = RequestMethod.POST) @Log(title = "商户管理", businessType = BusinessType.UPDATE,operContent = "终止合作") @ApiOperation(value = "终止合作") ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MgtShopPageDto.java
@@ -4,8 +4,6 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; /** * @author jqs34 * @ClassName MgtShopPageDto @@ -31,8 +29,11 @@ @ApiModelProperty(value = "店铺地址区code") private String shopAreaCode; @ApiModelProperty(value = "签约时间") private String signTime; @ApiModelProperty(value = "签约开始时间") private String signStartTime; @ApiModelProperty(value = "签约结束时间") private String signEndTime; @ApiModelProperty(value = "签约省code") private String signProvinceCode; ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/dto/MgtTransferShopDto.java
New file @@ -0,0 +1,25 @@ package com.ruoyi.shop.domain.dto; import com.ruoyi.system.api.domain.dto.MgtBaseDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @ClassName MgtTransferShopDto * @Description TODO * @Author jqs * @Date 2023/6/28 16:34 * @Version 1.0 */ @Data public class MgtTransferShopDto extends MgtBaseDto { @ApiModelProperty(value = "商户id") private Long shopId; @ApiModelProperty("转移用户id") private Long transferUserId; @ApiModelProperty("转移备注") private String transferRemark; } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/shop/ShopTotal.java
File was renamed from ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/ShopTotal.java @@ -1,4 +1,4 @@ package com.ruoyi.shop.domain.pojo; package com.ruoyi.shop.domain.pojo.shop; import com.baomidou.mybatisplus.activerecord.Model; import com.baomidou.mybatisplus.annotation.TableField; ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopRelTagMapper.java
@@ -21,13 +21,13 @@ * 通过商户id删除关联 * @param shopId */ void deleteByShopId(@Param("param") Long shopId); void deleteByShopId(@Param("shopId") Long shopId); /** * 获取商户标签 * @param shopId * @return */ List<MgtShopTagVo> listShopTagVo(@Param("param")Long shopId); List<MgtShopTagVo> listShopTagVo(@Param("shopId")Long shopId); } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopTotalMapper.java
@@ -1,6 +1,6 @@ package com.ruoyi.shop.mapper.shop; import com.ruoyi.shop.domain.pojo.ShopTotal; import com.ruoyi.shop.domain.pojo.shop.ShopTotal; import com.baomidou.mybatisplus.core.mapper.BaseMapper; /** ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopRelTagServiceImpl.java
@@ -1,6 +1,7 @@ package com.ruoyi.shop.service.impl.shop; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.utils.StringUtils; @@ -91,4 +92,16 @@ return mgtShopTagVoList; } /** * 通过商户id删除关联 * @param tagId */ @Override public void deleteByTagId(Long tagId){ LambdaUpdateWrapper<ShopRelTag> updateWrapper = new LambdaUpdateWrapper(); updateWrapper.set(ShopRelTag::getDelFlag,1); updateWrapper.eq(ShopRelTag::getDelFlag,0); updateWrapper.eq(ShopRelTag::getTagId,tagId); this.update(updateWrapper); } } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopRelUserServiceImpl.java
@@ -1,6 +1,7 @@ package com.ruoyi.shop.service.impl.shop; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.shop.domain.pojo.shop.ShopRelUser; import com.ruoyi.shop.mapper.shop.ShopRelUserMapper; @@ -58,4 +59,17 @@ queryWrapper.eq(ShopRelUser::getDelFlag, 0).eq(ShopRelUser::getUserId, userId); return this.getOne(queryWrapper,false); } /** * 通过用户id删除关联 * @param userId */ @Override public void deleteByUserId(Long userId){ LambdaUpdateWrapper<ShopRelUser> updateWrapper = new LambdaUpdateWrapper(); updateWrapper.set(ShopRelUser::getDelFlag,1); updateWrapper.eq(ShopRelUser::getUserId,userId); updateWrapper.eq(ShopRelUser::getDelFlag,0); this.update(updateWrapper); } } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -7,10 +7,11 @@ import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.bean.BeanUtils; import com.ruoyi.common.core.utils.uuid.IdUtils; import com.ruoyi.common.security.utils.CodeFactoryUtil; import com.ruoyi.shop.domain.dto.*; import com.ruoyi.shop.domain.pojo.ShopTotal; import com.ruoyi.shop.domain.pojo.shop.ShopTotal; import com.ruoyi.shop.domain.pojo.shop.*; import com.ruoyi.shop.domain.pojo.task.ShopFile; import com.ruoyi.shop.domain.vo.*; @@ -29,7 +30,6 @@ import com.ruoyi.system.api.service.RemoteMemberService; import com.ruoyi.system.api.service.RemoteOrderService; import com.ruoyi.system.api.service.RemoteUserService; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -98,6 +98,13 @@ @Resource private MemberTaskService memberTaskService; @Resource private ShopTransferRecordService shopTransferRecordService; @Resource private RemoteUserService remoteUserService; /** * 获取商户详情 * @param shopId @@ -142,6 +149,21 @@ Shop shop = new Shop(); Boolean newShop = false; BigDecimal zeroBig = BigDecimal.ZERO; //验证关联账号唯一 String relUserIds = mgtEditShopDto.getRelUserIds(); if(StringUtils.isNotBlank(relUserIds)) { String[] relUserIdArray = relUserIds.split(","); ShopRelUser shopRelUser; Long userId; for (String str : relUserIdArray) { userId = Long.valueOf(str); shopRelUser = shopRelUserService.getByUserId(userId); if(shopRelUser!=null){ throw new ServiceException(AppErrorConstant.SHOP_USER_DOUBLE); } } } //验证商户名唯一 Shop shopSame = this.getOne(new LambdaQueryWrapper<Shop>().eq(Shop::getDelFlag,0).eq(Shop::getShopName,mgtEditShopDto.getShopName())); if(mgtEditShopDto.getShopId()!=null){ if(shopSame!=null&&!Objects.equals(shopSame.getShopId(),mgtEditShopDto.getShopId())){ @@ -171,12 +193,12 @@ newShop = true; } BeanUtils.copyProperties(mgtEditShopDto,shop); this.saveOrUpdate(shop); //商户编号 if(mgtEditShopDto.getShopId()==null){ String shopNo = CodeFactoryUtil.getShopNo(); shop.setShopNumber(shopNo); } this.saveOrUpdate(shop); //商户标签 String shopTagIds = mgtEditShopDto.getShopTagIds(); if(StringUtils.isNotBlank(shopTagIds)){ @@ -199,13 +221,13 @@ this.saveOrUpdate(shop); } //商户归属员工 if(shop.getBelongUserId()!=null){ /*if(shop.getBelongUserId()!=null){ SysUser belongSysUser = sysUserService.getSysUser(shop.getBelongUserId()).getData(); handleShopStaff(shop.getShopId(),belongSysUser); } }*/ //商户关联人员 String relUserIds = mgtEditShopDto.getRelUserIds(); if(StringUtils.isNotBlank(relUserIds)){ shopStaffService.clearShopStaffRelation(shop.getShopId()); String[] relUserIdArray = relUserIds.split(","); ShopRelUser shopRelUser; Long userId; @@ -524,6 +546,40 @@ this.saveOrUpdate(shop); } /** * @description 转移客户 * @author jqs * @date 2023/6/28 16:36 * @param mgtTransferShopDto * @return void */ @Override public void transferMgtShop(MgtTransferShopDto mgtTransferShopDto){ Shop shop = this.getByShopId(mgtTransferShopDto.getShopId()); if(shop.getBelongUserId()!=null){ ShopTransferRecord shopTransferRecord = new ShopTransferRecord(); shopTransferRecord.setDelFlag(0); shopTransferRecord.setShopId(shop.getShopId()); shopTransferRecord.setBeforeUserId(shop.getBelongUserId()); shopTransferRecord.setAfterUserId(mgtTransferShopDto.getTransferUserId()); shopTransferRecord.setTransferRemark(mgtTransferShopDto.getTransferRemark()); shopTransferRecordService.save(shopTransferRecord); shopRelUserService.deleteByUserId(shop.getBelongUserId()); } shop.setBelongUserId(mgtTransferShopDto.getTransferUserId()); this.saveOrUpdate(shop); ShopRelUser shopRelUser = new ShopRelUser(); shopRelUser.setDelFlag(0); shopRelUser.setShopId(shop.getShopId()); shopRelUser.setUserId(mgtTransferShopDto.getTransferUserId()); SysUser sysUser = remoteUserService.getSysUser(mgtTransferShopDto.getTransferUserId()).getData(); shopRelUser.setUserMobile(sysUser.getPhonenumber()); shopRelUser.setUserDeptId(sysUser.getDeptId()); shopRelUser.setUserName(sysUser.getNickName()); shopRelUserService.save(shopRelUser); } /** * 获取附近门店 * @param appNearbyShopDto ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopTotalServiceImpl.java
@@ -1,10 +1,16 @@ package com.ruoyi.shop.service.impl.shop; import com.ruoyi.shop.domain.pojo.ShopTotal; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.shop.domain.pojo.shop.ShopTotal; import com.ruoyi.shop.mapper.shop.ShopTotalMapper; import com.ruoyi.shop.service.shop.ShopTotalService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.system.api.domain.dto.ShopTotalChangeDto; import org.springframework.stereotype.Service; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * <p> @@ -17,4 +23,28 @@ @Service public class ShopTotalServiceImpl extends ServiceImpl<ShopTotalMapper, ShopTotal> implements ShopTotalService { private Lock lock = new ReentrantLock(); private ExecutorService executor = Executors.newSingleThreadExecutor(); /** * @param shopTotalChangeDto * @return void * @description 更新商户统计 */ @Override public void changeShopTotal(ShopTotalChangeDto shopTotalChangeDto) { executor.execute(() -> { lock.lock(); try { handleShopTotal(shopTotalChangeDto); } finally { lock.unlock(); } }); } private void handleShopTotal(ShopTotalChangeDto shopTotalChangeDto){ ShopTotal shopTotal = this.getById(shopTotalChangeDto.getShopId()); this.saveOrUpdate(shopTotal); } } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopRelTagService.java
@@ -35,4 +35,10 @@ * @return */ List<MgtShopTagVo> listShopTagVo(MgtBaseGetDto mgtBaseGetDto); /** * 通过商户id删除关联 * @param tagId */ void deleteByTagId(Long tagId); } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopRelUserService.java
@@ -34,4 +34,10 @@ * @return */ ShopRelUser getByUserId(Long userId); /** * 通过用户id删除关联 * @param userId */ void deleteByUserId(Long userId); } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java
@@ -75,6 +75,15 @@ void editShopTag(MgtEditShopTagDto mgtEditShopTagDto); /** * @description 转移客户 * @author jqs * @date 2023/6/28 16:36 * @param mgtTransferShopDto * @return void */ void transferMgtShop(MgtTransferShopDto mgtTransferShopDto); /** * 获取附近门店 * @param appNearbyShopDto * @return ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopTotalService.java
@@ -1,7 +1,8 @@ package com.ruoyi.shop.service.shop; import com.ruoyi.shop.domain.pojo.ShopTotal; import com.ruoyi.shop.domain.pojo.shop.ShopTotal; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.system.api.domain.dto.ShopTotalChangeDto; /** * <p> @@ -13,4 +14,12 @@ */ public interface ShopTotalService extends IService<ShopTotal> { /** * @description 更新商户统计 * @author jqs * @date 2023/6/28 17:56 * @param shopTotalChangeDto * @return void */ void changeShopTotal(ShopTotalChangeDto shopTotalChangeDto); } ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
@@ -321,8 +321,11 @@ <if test="param.shopAreaCode!=null and param.shopAreaCode!=''"> AND ts.shop_area_code = #{param.shopAreaCode} </if> <if test="param.signTime!=null and param.signTime!=''"> AND ts.sign_time = #{param.signTime} <if test="param.signStartTime!=null and param.signStartTime!=''"> AND ts.sign_time >= #{param.signStartTime} </if> <if test="param.signEndTime!=null and param.signEndTime!=''"> AND ts.sign_time <= #{param.signEndTime} </if> <if test="param.signProvinceCode!=null and param.signProvinceCode!=''"> AND ts.sign_province_code = #{param.signProvinceCode} ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopRelTagMapper.xml
@@ -62,7 +62,7 @@ </delete> <update id="deleteByShopId"> UPDATE shop_rel_tag SET del_flag = 1 WHERE shop_id = #{shopId} UPDATE t_shop_rel_tag SET del_flag = 1 WHERE shop_id = #{shopId} </update> <select id="listShopTagVo" resultType="com.ruoyi.shop.domain.vo.MgtShopTagVo"> @@ -71,7 +71,7 @@ st.tag_name tagName, CASE WHEN srt.id IS NULL THEN 0 ELSE 1 END selectFlag FROM sys_tag st LEFT JOIN shop_rel_tag srt ON srt.tag_id = st.tag_id LEFT JOIN t_shop_rel_tag srt ON srt.tag_id = st.tag_id WHERE srt.del_flag = 0 AND shop_id = #{shopId} </select> </mapper>