springcloud_k8s_panzhihuazhihuishequ/applets/src/main/java/com/panzhihua/applets/api/ComBatteryCommodityActivityApi.java
@@ -4,6 +4,7 @@ import com.panzhihua.common.model.dtos.common.*; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.common.ComBatteryCommodityActivityVo; import com.panzhihua.common.model.vos.common.ComBatteryCommodityOrderBargainVo; import com.panzhihua.common.model.vos.common.ComBatteryCommodityOrderCollageTeamVo; import com.panzhihua.common.service.community.ComBatteryCommodityActivityFeign; import com.panzhihua.common.service.community.ComBatteryCommodityOrderCollageTeamFeign; @@ -104,6 +105,50 @@ return this.comBatteryCommodityActivityService.startFight(orderDto); } /** * 创建砍价订单 * @param orderDto 请求参数 * @return 创建订单结果 */ @ApiOperation(value = "创建砍价订单") @PostMapping("/start/bargain") public R startBargain(@RequestBody StartBargainOrderDto orderDto){ return this.comBatteryCommodityActivityService.startBargain(orderDto); } /** * 帮好友砍价 * @param orderDto 请求参数 * @return 创建订单结果 */ @ApiOperation(value = "帮好友砍价") @PostMapping("/start/user/bargain") public R startUserBargain(@RequestBody StartUserBargainOrderDto orderDto){ return this.comBatteryCommodityActivityService.startUserBargain(orderDto); } /** * 查询砍价记录详情 * @param id 砍价记录id * @return 创建订单结果 */ @ApiOperation(value = "查询砍价记录详情",response = ComBatteryCommodityOrderBargainVo.class) @GetMapping("/user/bargain") public R getUserBargain(@RequestParam("id") Long id){ return this.comBatteryCommodityActivityService.getUserBargain(id); } /** * 创建秒杀订单 * @param orderDto 请求参数 * @return 创建订单结果 */ @ApiOperation(value = "创建秒杀订单") @PostMapping("/start/seckill") public R startSeckill(@RequestBody StartSeckillOrderDto orderDto){ return this.comBatteryCommodityActivityService.startSeckill(orderDto); } } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/common/StartBargainOrderDto.java
New file @@ -0,0 +1,35 @@ package com.panzhihua.common.model.dtos.common; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author lyq * 发起砍价订单请求参数 */ @Data @ApiModel("发起砍价订单请求参数") public class StartBargainOrderDto { @ApiModelProperty(value = "用户id",hidden = true) private Long userId; @ApiModelProperty(value = "用户openId",hidden = true) private String openId; @ApiModelProperty(value = "商品id") private Long commodityId; @ApiModelProperty(value = "活动id") private Long activityId; @ApiModelProperty(value = "用户收货地址id") private Long addressId; @ApiModelProperty(value = "购买商品数量") private Integer count; @ApiModelProperty(value = "订单备注") private String remark; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/common/StartSeckillOrderDto.java
New file @@ -0,0 +1,35 @@ package com.panzhihua.common.model.dtos.common; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author lyq * 发起秒杀订单请求参数 */ @Data @ApiModel("发起秒杀订单请求参数") public class StartSeckillOrderDto { @ApiModelProperty(value = "用户id",hidden = true) private Long userId; @ApiModelProperty(value = "用户openId",hidden = true) private String openId; @ApiModelProperty(value = "商品id") private Long commodityId; @ApiModelProperty(value = "活动id") private Long activityId; @ApiModelProperty(value = "用户收货地址id") private Long addressId; @ApiModelProperty(value = "购买商品数量") private Integer count; @ApiModelProperty(value = "订单备注") private String remark; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/dtos/common/StartUserBargainOrderDto.java
New file @@ -0,0 +1,20 @@ package com.panzhihua.common.model.dtos.common; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author lyq * 帮好友砍价请求参数 */ @Data @ApiModel("帮好友砍价请求参数") public class StartUserBargainOrderDto { @ApiModelProperty(value = "用户id",hidden = true) private Long userId; @ApiModelProperty(value = "原用户砍价记录id") private Long bargainId; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/common/ComBatteryCommodityOrderBargainRecordVo.java
@@ -61,4 +61,9 @@ @ApiModelProperty(value = "创建人id") private Long createBy; @ApiModelProperty(value = "用户头像") private String imageUrl; @ApiModelProperty(value = "用户昵称") private String nickName; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/model/vos/common/ComBatteryCommodityOrderBargainVo.java
@@ -2,6 +2,7 @@ import java.math.BigDecimal; import java.util.Date; import java.util.List; import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.format.annotation.DateTimeFormat; @@ -86,4 +87,6 @@ @ApiModelProperty(value = "创建人id") private Long createBy; @ApiModelProperty(value = "好友帮砍价记录列表") private List<ComBatteryCommodityOrderBargainRecordVo> orderBargainRecordList; } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/service/community/ComBatteryCommodityActivityFeign.java
@@ -101,4 +101,36 @@ */ @PostMapping("/start/fight") R startFight(@RequestBody StartFightOrderDto orderDto); /** * 创建砍价订单 * @param orderDto 请求参数 * @return 创建订单结果 */ @PostMapping("/start/bargain") R startBargain(@RequestBody StartBargainOrderDto orderDto); /** * 帮好友砍价 * @param orderDto 请求参数 * @return 创建订单结果 */ @PostMapping("/start/user/bargain") R startUserBargain(@RequestBody StartUserBargainOrderDto orderDto); /** * 查询砍价记录详情 * @param id 砍价记录id * @return 创建订单结果 */ @GetMapping("/user/bargain") R getUserBargain(@RequestParam("id") Long id); /** * 创建秒杀订单 * @param orderDto 请求参数 * @return 创建订单结果 */ @PostMapping("/start/seckill") R startSeckill(@RequestBody StartSeckillOrderDto orderDto); } springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/MathUtils.java
New file @@ -0,0 +1,24 @@ package com.panzhihua.common.utlis; import java.math.BigDecimal; /** * @author lyq * 数学计算公式工具类 */ public class MathUtils { /** * 生成区间随机数 * @param max 最大值 * @param min 最小值 * @return 随机数 */ public static BigDecimal getRandomNumber(BigDecimal max, BigDecimal min){ float minF = min.floatValue(); float maxF = max.floatValue(); //生成随机数 BigDecimal db = new BigDecimal(Math.random() * (maxF - minF) + minF); return db.setScale(2,BigDecimal.ROUND_DOWN); } } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/api/ComBatteryCommodityActivityController.java
@@ -3,7 +3,9 @@ import com.panzhihua.service_community.service.ComBatteryCommodityActivityService; import com.panzhihua.common.model.dtos.common.*; import com.panzhihua.common.model.vos.R; import com.panzhihua.service_community.service.ComBatteryCommodityOrderBargainService; import com.panzhihua.service_community.service.ComBatteryCommodityOrderCollageTeamService; import com.panzhihua.service_community.service.ComBatteryCommodityOrderService; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -26,6 +28,10 @@ private ComBatteryCommodityActivityService comBatteryCommodityActivityService; @Resource private ComBatteryCommodityOrderCollageTeamService orderCollageTeamService; @Resource private ComBatteryCommodityOrderBargainService orderBargainService; @Resource private ComBatteryCommodityOrderService commodityOrderService; /** * description queryByPage 分页查询 @@ -125,5 +131,45 @@ public R startFight(@RequestBody StartFightOrderDto orderDto){ return this.orderCollageTeamService.startFight(orderDto); } /** * 创建砍价订单 * @param orderDto 请求参数 * @return 创建订单结果 */ @PostMapping("/start/bargain") public R startBargain(@RequestBody StartBargainOrderDto orderDto){ return this.orderBargainService.startBargain(orderDto); } /** * 帮好友砍价 * @param orderDto 请求参数 * @return 创建订单结果 */ @PostMapping("/start/user/bargain") public R startUserBargain(@RequestBody StartUserBargainOrderDto orderDto){ return this.orderBargainService.startUserBargain(orderDto); } /** * 查询砍价记录详情 * @param id 砍价记录id * @return 创建订单结果 */ @GetMapping("/user/bargain") public R getUserBargain(@RequestParam("id") Long id){ return this.orderBargainService.getUserBargain(id); } /** * 创建秒杀订单 * @param orderDto 请求参数 * @return 创建订单结果 */ @PostMapping("/start/seckill") public R startSeckill(@RequestBody StartSeckillOrderDto orderDto){ return this.commodityOrderService.startSeckill(orderDto); } } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/dao/ComBatteryCommodityOrderBargainRecordMapper.java
@@ -54,5 +54,12 @@ * @date 2022-03-29 16:06:45 */ List<ComBatteryCommodityOrderBargainRecordVo> queryAllByList(@Param("dto") PageComBatteryCommodityOrderBargainRecordDto comBatteryCommodityOrderBargainRecord); /** * 根据砍价记录id查询好友帮砍价记录 * @param bargainId 砍价记录id * @return 好友帮砍价记录 */ List<ComBatteryCommodityOrderBargainRecordVo> queryAllByBargainId(@Param("bargainId") Long bargainId); } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComBatteryCommodityOrderBargainService.java
@@ -75,4 +75,25 @@ */ R queryByList(PageComBatteryCommodityOrderBargainDto comBatteryCommodityOrderBargain); /** * 创建砍价订单 * @param orderDto 请求参数 * @return 创建订单结果 */ R startBargain(StartBargainOrderDto orderDto); /** * 帮好友砍价 * @param orderDto 请求参数 * @return 创建订单结果 */ R startUserBargain(StartUserBargainOrderDto orderDto); /** * 查询砍价记录详情 * @param id 砍价记录id * @return 创建订单结果 */ R getUserBargain(Long id); } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/ComBatteryCommodityOrderService.java
@@ -131,4 +131,6 @@ * @return 购买商品支付回调 */ R batteryActivityPayNotify(WxPayNotifyOrderDTO notifyOrderDTO); R startSeckill(StartSeckillOrderDto orderDto); } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComBatteryCommodityOrderBargainServiceImpl.java
@@ -1,14 +1,30 @@ package com.panzhihua.service_community.service.impl; import com.panzhihua.service_community.entity.ComBatteryCommodityOrderBargain; import com.panzhihua.service_community.dao.ComBatteryCommodityOrderBargainMapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.panzhihua.common.constants.PayCpmstant; import com.panzhihua.common.model.vos.common.ComBatteryCommodityOrderBargainRecordVo; import com.panzhihua.common.model.vos.common.ComBatteryCommodityOrderBargainVo; import com.panzhihua.common.utlis.DateUtils; import com.panzhihua.common.utlis.MathUtils; import com.panzhihua.common.utlis.Snowflake; import com.panzhihua.common.utlis.WxPayUtils; import com.panzhihua.service_community.dao.*; import com.panzhihua.service_community.entity.*; import com.panzhihua.service_community.service.ComBatteryCommodityOrderBargainService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.panzhihua.service_community.service.ComBatteryTradeOrderService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import com.panzhihua.common.model.dtos.common.*; import com.panzhihua.common.model.vos.R; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; /** * title: 电动车商城-砍价订单记录表表服务实现类 @@ -20,8 +36,38 @@ * @author lyq * @date 2022-03-29 16:06:35 */ @Slf4j @Service("comBatteryCommodityOrderBargainService") public class ComBatteryCommodityOrderBargainServiceImpl extends ServiceImpl<ComBatteryCommodityOrderBargainMapper, ComBatteryCommodityOrderBargain> implements ComBatteryCommodityOrderBargainService { @Resource private ComBatteryCommodityActivityMapper commodityActivityMapper; @Resource private ComBatteryUserAddressMapper userAddressMapper; @Resource private SysUserMapper userMapper; @Resource private ComBatteryTradeOrderService tradeOrderService; @Resource private ComBatteryCommodityMapper commodityMapper; @Resource private ComBatteryCommoditySpecsMapper commoditySpecsMapper; @Resource private ComBatteryCommodityOrderMapper commodityOrderMapper; @Resource private ComBatteryCommodityOrderBargainRecordMapper orderBargainRecordMapper; @Value("${min.app.isTest}") private Boolean isTest; @Value("${min.app.isRefundTest}") private Boolean isRefundTest; @Value("${min.app.appid}") private String appid; @Value("${min.app.payKey}") private String payKey; @Value("${min.app.mchId}") private String mchId; @Value("${min.app.currencyNotifyUrl}") private String currencyNotifyUrl; /** * description queryByPage 分页查询 @@ -116,4 +162,263 @@ public R queryByList(PageComBatteryCommodityOrderBargainDto comBatteryCommodityOrderBargain) { return R.ok(this.baseMapper.queryAllByList(comBatteryCommodityOrderBargain)); } /** * 创建砍价订单 * @param orderDto 请求参数 * @return 创建订单结果 */ @Override public R startBargain(StartBargainOrderDto orderDto) { ComBatteryCommodityActivity commodityActivity = commodityActivityMapper.selectById(orderDto.getActivityId()); if(commodityActivity == null){ return R.fail("未查询到砍价活动"); } if(commodityActivity.getEndTime().getTime() - System.currentTimeMillis() <= 0 || commodityActivity.getStatus().equals(ComBatteryCommodityActivity.Status.YJS)){ return R.fail("该活动已结束"); } if(commodityActivity.getStatus().equals(ComBatteryCommodityActivity.Status.YXJ)){ return R.fail("该活动已下架"); } if(commodityActivity.getCommodityNum() <= commodityActivity.getCommoditySaleNum()){ return R.fail("活动商品已售空"); } Integer notSaleNum = commodityActivity.getCommodityNum() - commodityActivity.getCommoditySaleNum(); if(notSaleNum <= orderDto.getCount()){ return R.fail("活动商品库存不足"); } //查询商品 ComBatteryCommodity commodity = commodityMapper.selectById(orderDto.getCommodityId()); if(commodity == null){ return R.fail("未查询到商品信息"); } //查询商品规格信息 ComBatteryCommoditySpecs commoditySpecs = commoditySpecsMapper.selectById(commodityActivity.getSpecsId()); if(commoditySpecs == null){ return R.fail("未查询到商品规格信息"); } if(commoditySpecs.getStock() < orderDto.getCount()){ return R.fail("该商品库存不足,无法下单"); } //查询用户信息 SysUser user = userMapper.selectById(orderDto.getUserId()); if(user == null){ return R.fail("未查询到用户信息"); } //查询用户收货地址 ComBatteryUserAddress userAddress = userAddressMapper.selectById(orderDto.getAddressId()); if(userAddress == null){ return R.fail("未查询到用户收货地址"); } Date nowDate = new Date(); //初始化订单数据 Integer count = commodityOrderMapper.selectCount(new QueryWrapper<ComBatteryCommodityOrder>() .lambda().eq(ComBatteryCommodityOrder::getStatus,ComBatteryCommodityOrder.Status.DKJ) .eq(ComBatteryCommodityOrder::getBargainStatus,ComBatteryCommodityOrder.BargainStatus.KJZ) .eq(ComBatteryCommodityOrder::getIsDel,ComBatteryCommodityOrder.IsDel.NO)); if(count > 0){ return R.fail("您已存在正在砍价中的订单,不可再发起砍价订单"); } ComBatteryCommodityOrder commodityOrder = getCreateOrder(commodity,userAddress,user,commoditySpecs,orderDto,nowDate,commodityActivity); Map<String,Object> resultMap = new HashMap<>(2); if(commodityOrderMapper.insert(commodityOrder) > 0){ //更新商品库存 commoditySpecs.setStock(commoditySpecs.getStock() - orderDto.getCount()); commoditySpecsMapper.updateById(commoditySpecs); //微信支付需要调取小程序微信支付 String result = getWxPayResult(commodityOrder.getFinalAmount(),commodityOrder.getOpenId() ,commodityOrder.getOrderNo(),"购买商品",null); resultMap.put("payResult",result); resultMap.put("orderId",commodityOrder.getId()); // 添加微信支付交易流水 String wxTradeOrderNo = "wx" + Snowflake.getId(); tradeOrderService.addOrderTradeRecord(user.getUserId(), user.getOpenid(), wxTradeOrderNo, ComBatteryTradeOrder.PayType.WX, commodityOrder.getFinalAmount(), ComBatteryTradeOrder.TradeType.DDC_SHOP, commodityOrder.getId(), commodityOrder.getOrderNo(), user.getUserId(), nowDate); } return R.ok(resultMap); } /** * 初始化订单数据 * @param commodity 商品数据 * @param userAddress 用户收货地址信息 * @param user 用户数据 * @param commoditySpecs 商品规格数据 * @param orderDto 用户请求参数 * @param nowDate 操作时间 * @param commodityActivity 拼团活动数据 * @return 初始化订单数据 */ public static ComBatteryCommodityOrder getCreateOrder(ComBatteryCommodity commodity, ComBatteryUserAddress userAddress , SysUser user, ComBatteryCommoditySpecs commoditySpecs, StartBargainOrderDto orderDto, Date nowDate ,ComBatteryCommodityActivity commodityActivity){ ComBatteryCommodityOrder commodityOrder = new ComBatteryCommodityOrder(); commodityOrder.setUserId(user.getUserId()); commodityOrder.setOpenId(user.getOpenid()); commodityOrder.setStoreId(commodity.getStoreId()); commodityOrder.setActivityId(commodityActivity.getId()); commodityOrder.setCommodityId(commodity.getId()); commodityOrder.setSpecsId(commoditySpecs.getId()); commodityOrder.setOrderNo("PT" + Snowflake.getId()); commodityOrder.setActivityType(commodityActivity.getType()); commodityOrder.setStatus(ComBatteryCommodityOrder.Status.DFK); commodityOrder.setPayStatus(ComBatteryCommodityOrder.PayStatus.WZF); commodityOrder.setIsDel(ComBatteryCommodityOrder.IsDel.NO); commodityOrder.setPayType(ComBatteryCommodityOrder.PayType.WX); commodityOrder.setCount(orderDto.getCount()); commodityOrder.setPrice(commodityActivity.getPrice()); commodityOrder.setAmount(commodityActivity.getPrice().multiply(BigDecimal.valueOf(orderDto.getCount()))); commodityOrder.setFreight(commodity.getPostage()); commodityOrder.setFinalAmount(commodityOrder.getAmount().add(commodityOrder.getFreight())); commodityOrder.setCreateAt(nowDate); commodityOrder.setCreateBy(user.getUserId()); commodityOrder.setRemark(orderDto.getRemark()); //收货地址 commodityOrder.setAddressId(userAddress.getId()); commodityOrder.setReceivingName(userAddress.getName()); commodityOrder.setReceivingPhone(userAddress.getPhone()); commodityOrder.setReceivingRegionCode(userAddress.getProvinceAdcode() + "-" + userAddress.getCityAdcode() + "-" + userAddress.getDistrictAdcode()); commodityOrder.setReceivingRegion(userAddress.getProvinceName() + userAddress.getCityName() + userAddress.getDistrictName()); commodityOrder.setReceivingAddress(userAddress.getAddress()); return commodityOrder; } /** * 小程序唤起微信支付 * * @param money * 需要支付的金额 * @param openId * 用户唤起微信支付的openid * @param orderNo * 业务订单号 * @param remark * 交易备注 * @return 小程序支付参数 */ private String getWxPayResult(BigDecimal money, String openId, String orderNo, String remark,String type) { String result = ""; // 将剩余金额调起微信支付 if (isTest) { money = BigDecimal.valueOf(0.01); } // 调用wx支付 result = WxPayUtils.getUnifiedorder(appid, mchId, payKey, currencyNotifyUrl + PayCpmstant.BATTERY_STORE_ACTIVITY_PAY_NOTIFY_URL , remark, openId, orderNo, money,type); log.info("用户购买商品微信支付返回参数:" + result); return result; } /** * 帮好友砍价 * @param orderDto 请求参数 * @return 创建订单结果 */ @Override @Transactional(rollbackFor = Exception.class) public synchronized R startUserBargain(StartUserBargainOrderDto orderDto) { //查询砍价记录 ComBatteryCommodityOrderBargain orderBargain = this.baseMapper.selectById(orderDto.getBargainId()); if(orderBargain == null){ return R.fail("未查询到用户砍价记录"); } if(orderBargain.getUserId().equals(orderDto.getUserId())){ return R.fail("您不可砍自己的订单"); } //查询砍价订单 ComBatteryCommodityOrder commodityOrder = commodityOrderMapper.selectById(orderBargain.getOrderId()); if(commodityOrder == null){ return R.fail("未查询到砍价订单"); } Date nowDate = new Date(); //判断当前砍价订单的截止时间是否已结束 Date deadline = DateUtils.addDay(commodityOrder.getCreateAt(),1); if(DateUtils.dateCompare(deadline,nowDate) == -1){ return R.fail("该订单已超过砍价截止时间"); } //查询砍价活动 ComBatteryCommodityActivity commodityActivity = commodityActivityMapper.selectById(commodityOrder.getActivityId()); if(commodityActivity != null){ if(DateUtils.dateCompare(commodityActivity.getEndTime(),nowDate) == -1){ return R.fail("该砍价活动已结束"); } } //商品原价 BigDecimal originalPrice = orderBargain.getOriginalPrice(); //商品目标价格 BigDecimal targetPrice = orderBargain.getTargetPrice(); //商品当前价格 BigDecimal currentPrice = orderBargain.getCurrentPrice(); //商品当前剩余砍价金额 BigDecimal surplusPrice = currentPrice.subtract(targetPrice); //获取砍价随机金额 BigDecimal maxPrice = originalPrice.subtract(targetPrice).multiply(BigDecimal.valueOf(0.1)); BigDecimal minPrice = originalPrice.subtract(targetPrice).multiply(BigDecimal.valueOf(0.05)); BigDecimal randomNumber = MathUtils.getRandomNumber(maxPrice,minPrice); if(randomNumber.compareTo(surplusPrice) > 0){ randomNumber = currentPrice; } //初始化用户帮砍价记录 ComBatteryCommodityOrderBargainRecord orderBargainRecord = getOrderBargainRecord(orderBargain.getId() ,orderDto.getUserId(),randomNumber,commodityOrder.getUserId(),nowDate); orderBargainRecordMapper.insert(orderBargainRecord); //更新砍价记录 orderBargain.setCurrentPrice(orderBargain.getCurrentPrice().subtract(randomNumber)); orderBargain.setCount(orderBargain.getCount() + 1); this.baseMapper.updateById(orderBargain); //判断当前砍价订单是否已完成 if(orderBargain.getCurrentPrice().compareTo(orderBargain.getTargetPrice()) == 0){ //砍价完成,更新订单为已完成 commodityOrder.setStatus(ComBatteryCommodityOrder.Status.DFH); commodityOrder.setBargainStatus(ComBatteryCommodityOrder.BargainStatus.KJCG); commodityOrder.setUpdateAt(nowDate); commodityOrder.setUpdateBy(orderDto.getUserId()); commodityOrderMapper.updateById(commodityOrder); } return R.ok(randomNumber); } /** * 初始化用户帮砍价记录 * @param bargainId 砍价记录id * @param userId 帮砍价用户id * @param amount 砍价金额 * @param oldUserId 原发布砍价订单用户id * @param nowDate 操作时间 * @return 用户帮砍价记录 */ private ComBatteryCommodityOrderBargainRecord getOrderBargainRecord(Long bargainId,Long userId ,BigDecimal amount,Long oldUserId,Date nowDate){ ComBatteryCommodityOrderBargainRecord orderBargainRecord = new ComBatteryCommodityOrderBargainRecord(); orderBargainRecord.setBargainId(bargainId); orderBargainRecord.setUserId(userId); orderBargainRecord.setAmount(amount); orderBargainRecord.setOldUserId(oldUserId); orderBargainRecord.setCreateAt(nowDate); orderBargainRecord.setCreateBy(userId); return orderBargainRecord; } /** * 查询砍价记录详情 * @param id 砍价记录id * @return 创建订单结果 */ @Override public R getUserBargain(Long id) { //查询砍价记录 ComBatteryCommodityOrderBargainVo orderBargainVo = this.baseMapper.queryById(id); if(orderBargainVo != null){ //查询帮砍价记录 List<ComBatteryCommodityOrderBargainRecordVo> orderBargainRecordList = orderBargainRecordMapper.queryAllByBargainId(id); orderBargainVo.setOrderBargainRecordList(orderBargainRecordList); } return R.ok(orderBargainVo); } } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComBatteryCommodityOrderCollageTeamServiceImpl.java
@@ -199,10 +199,20 @@ if(count >= commodityActivity.getCollagePeopleNum()){ return R.fail("拼团人数已满"); } //判断该团是否已参与 Integer userCount = orderCollageTeamPeopleMapper.selectCount(new QueryWrapper<ComBatteryCommodityOrderCollageTeamPeople>().lambda() .eq(ComBatteryCommodityOrderCollageTeamPeople::getTeamId,orderDto.getTeamId()) .eq(ComBatteryCommodityOrderCollageTeamPeople::getUserId,orderDto.getUserId())); if(userCount >= commodityActivity.getCollagePeopleNum()){ return R.fail("您已参与该拼团,不可重复参与"); } //查询拼团团队 ComBatteryCommodityOrderCollageTeam orderCollageTeam = orderCollageTeamMapper.selectById(orderDto.getTeamId()); if(orderCollageTeam == null){ return R.fail("该拼团不存在"); } if(orderDto.getUserId().equals(orderCollageTeam.getUserId())){ return R.fail("您不可拼自己的团"); } if(!orderCollageTeam.getStatus().equals(ComBatteryCommodityOrderCollageTeam.Status.DDPT)){ return R.fail("该拼团已成功"); @@ -210,8 +220,15 @@ }else{ Integer count = orderCollageTeamMapper.selectCount(new QueryWrapper<ComBatteryCommodityOrderCollageTeam>().lambda() .eq(ComBatteryCommodityOrderCollageTeam::getActivityId,orderDto.getActivityId()) .eq(ComBatteryCommodityOrderCollageTeam::getStatus,ComBatteryCommodityOrderCollageTeam.Status.DDPT) .eq(ComBatteryCommodityOrderCollageTeam::getUserId,orderDto.getUserId())); if(count > 0){ return R.fail("当前活动商品您正在拼团中,不可重复开团"); } Integer maxCount = orderCollageTeamMapper.selectCount(new QueryWrapper<ComBatteryCommodityOrderCollageTeam>().lambda() .eq(ComBatteryCommodityOrderCollageTeam::getActivityId,orderDto.getActivityId()) .eq(ComBatteryCommodityOrderCollageTeam::getStatus,ComBatteryCommodityOrderCollageTeam.Status.DDPT)); if(count >= commodityActivity.getCollageNum()){ if(maxCount >= commodityActivity.getCollageNum()){ return R.fail("当前正在拼团的数量已达到最大值,不可在开团"); } } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComBatteryCommodityOrderServiceImpl.java
@@ -74,6 +74,8 @@ private ComBatteryCommodityOrderCollageTeamPeopleMapper orderCollageTeamPeopleMapper; @Resource private ComBatteryCommodityActivityMapper commodityActivityMapper; @Resource private ComBatteryCommodityOrderBargainMapper orderBargainMapper; /** * description queryByPage 分页查询 @@ -515,6 +517,12 @@ syncAssortedDoughActivityStatus(commodityOrder.getActivityId(),nowDate); break; case ComBatteryCommodityOrder.ActivityType.KJ: //砍价订单成功支付处理 commodityOrder.setBargainStatus(ComBatteryCommodityOrder.BargainStatus.KJZ); commodityOrder.setStatus(ComBatteryCommodityOrder.Status.DKJ); //创建用户发布待砍价记录 ComBatteryCommodityOrderBargain orderBargain = getOrderBargain(commodityOrder,nowDate); orderBargainMapper.insert(orderBargain); break; case ComBatteryCommodityOrder.ActivityType.MS: commodityOrder.setStatus(ComBatteryCommodityOrder.Status.DFH); @@ -625,4 +633,141 @@ } } } /** * 初始化砍价记录 * @param commodityOrder 订单数据 * @param nowDate 操作时间 * @return 砍价记录 */ private ComBatteryCommodityOrderBargain getOrderBargain(ComBatteryCommodityOrder commodityOrder,Date nowDate){ ComBatteryCommodityOrderBargain orderBargain = new ComBatteryCommodityOrderBargain(); BeanUtils.copyProperties(commodityOrder,orderBargain); orderBargain.setOrderId(commodityOrder.getId()); orderBargain.setOrderNo(commodityOrder.getOrderNo()); orderBargain.setCount(0); orderBargain.setCreateAt(nowDate); orderBargain.setCreateBy(commodityOrder.getUserId()); //查询商品信息 ComBatteryCommodity commodity = commodityMapper.selectById(commodityOrder.getCommodityId()); if(commodity != null){ orderBargain.setCurrentPrice(commodity.getPrice()); orderBargain.setCurrentPrice(commodity.getPrice()); } //查询活动信息 ComBatteryCommodityActivity commodityActivity = commodityActivityMapper.selectById(commodityOrder.getActivityId()); if(commodityActivity != null){ orderBargain.setTargetPrice(commodityActivity.getPrice()); } return orderBargain; } @Override public R startSeckill(StartSeckillOrderDto orderDto) { ComBatteryCommodityActivity commodityActivity = commodityActivityMapper.selectById(orderDto.getActivityId()); if(commodityActivity == null){ return R.fail("未查询到秒杀活动"); } if(commodityActivity.getCommodityNum() <= commodityActivity.getCommoditySaleNum()){ return R.fail("活动商品已售空"); } if(commodityActivity.getEndTime().getTime() - System.currentTimeMillis() <= 0 || commodityActivity.getStatus().equals(ComBatteryCommodityActivity.Status.YJS)){ return R.fail("该活动已结束"); } if(commodityActivity.getStatus().equals(ComBatteryCommodityActivity.Status.YXJ)){ return R.fail("该活动已下架"); } Integer notSaleNum = commodityActivity.getCommodityNum() - commodityActivity.getCommoditySaleNum(); if(notSaleNum <= orderDto.getCount()){ return R.fail("活动商品库存不足"); } //查询商品 ComBatteryCommodity commodity = commodityMapper.selectById(orderDto.getCommodityId()); if(commodity == null){ return R.fail("未查询到商品信息"); } //查询商品规格信息 ComBatteryCommoditySpecs commoditySpecs = commoditySpecsMapper.selectById(commodityActivity.getSpecsId()); if(commoditySpecs == null){ return R.fail("未查询到商品规格信息"); } if(commoditySpecs.getStock() < orderDto.getCount()){ return R.fail("该商品库存不足,无法下单"); } //查询用户信息 SysUser user = userMapper.selectById(orderDto.getUserId()); if(user == null){ return R.fail("未查询到用户信息"); } //查询用户收货地址 ComBatteryUserAddress userAddress = userAddressMapper.selectById(orderDto.getAddressId()); if(userAddress == null){ return R.fail("未查询到用户收货地址"); } Date nowDate = new Date(); ComBatteryCommodityOrder commodityOrder = getCreateActivityOrder(commodity,userAddress,user,commoditySpecs,orderDto,nowDate,commodityActivity); Map<String,Object> resultMap = new HashMap<>(2); if(this.baseMapper.insert(commodityOrder) > 0){ //更新商品库存 commoditySpecs.setStock(commoditySpecs.getStock() - orderDto.getCount()); commoditySpecsMapper.updateById(commoditySpecs); //微信支付需要调取小程序微信支付 String result = getWxPayResult(commodityOrder.getFinalAmount(),commodityOrder.getOpenId() ,commodityOrder.getOrderNo(),"购买商品"); resultMap.put("payResult",result); resultMap.put("orderId",commodityOrder.getId()); // 添加微信支付交易流水 String wxTradeOrderNo = "wx" + Snowflake.getId(); tradeOrderService.addOrderTradeRecord(user.getUserId(), user.getOpenid(), wxTradeOrderNo, ComBatteryTradeOrder.PayType.WX, commodityOrder.getFinalAmount(), ComBatteryTradeOrder.TradeType.DDC_SHOP, commodityOrder.getId(), commodityOrder.getOrderNo(), user.getUserId(), nowDate); } return R.ok(resultMap); } /** * 初始化活动订单数据 * @param commodity 商品数据 * @param userAddress 用户收货地址信息 * @param user 用户数据 * @param commoditySpecs 商品规格数据 * @param orderDto 用户请求参数 * @param nowDate 操作时间 * @param commodityActivity 拼团活动数据 * @return 初始化订单数据 */ public static ComBatteryCommodityOrder getCreateActivityOrder(ComBatteryCommodity commodity, ComBatteryUserAddress userAddress , SysUser user, ComBatteryCommoditySpecs commoditySpecs, StartSeckillOrderDto orderDto, Date nowDate ,ComBatteryCommodityActivity commodityActivity){ ComBatteryCommodityOrder commodityOrder = new ComBatteryCommodityOrder(); commodityOrder.setUserId(user.getUserId()); commodityOrder.setOpenId(user.getOpenid()); commodityOrder.setStoreId(commodity.getStoreId()); commodityOrder.setActivityId(commodityActivity.getId()); commodityOrder.setCommodityId(commodity.getId()); commodityOrder.setSpecsId(commoditySpecs.getId()); commodityOrder.setOrderNo("PT" + Snowflake.getId()); commodityOrder.setActivityType(commodityActivity.getType()); commodityOrder.setStatus(ComBatteryCommodityOrder.Status.DFK); commodityOrder.setPayStatus(ComBatteryCommodityOrder.PayStatus.WZF); commodityOrder.setIsDel(ComBatteryCommodityOrder.IsDel.NO); commodityOrder.setPayType(ComBatteryCommodityOrder.PayType.WX); commodityOrder.setCount(orderDto.getCount()); commodityOrder.setPrice(commodityActivity.getPrice()); commodityOrder.setAmount(commodityActivity.getPrice().multiply(BigDecimal.valueOf(orderDto.getCount()))); commodityOrder.setFreight(commodity.getPostage()); commodityOrder.setFinalAmount(commodityOrder.getAmount().add(commodityOrder.getFreight())); commodityOrder.setCreateAt(nowDate); commodityOrder.setCreateBy(user.getUserId()); commodityOrder.setRemark(orderDto.getRemark()); //收货地址 commodityOrder.setAddressId(userAddress.getId()); commodityOrder.setReceivingName(userAddress.getName()); commodityOrder.setReceivingPhone(userAddress.getPhone()); commodityOrder.setReceivingRegionCode(userAddress.getProvinceAdcode() + "-" + userAddress.getCityAdcode() + "-" + userAddress.getDistrictAdcode()); commodityOrder.setReceivingRegion(userAddress.getProvinceName() + userAddress.getCityName() + userAddress.getDistrictName()); commodityOrder.setReceivingAddress(userAddress.getAddress()); return commodityOrder; } } springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComBatteryCommodityOrderBargainMapper.xml
@@ -19,15 +19,34 @@ </resultMap> <!--查询单个--> <select id="queryById" resultMap="ComBatteryCommodityOrderBargainMap"> select id, user_id, commodity_id, activity_id, order_id, order_no, original_price, target_price, current_price, count, create_at, create_by from com_battery_commodity_order_bargain where id = #{id} <select id="queryById" resultType="com.panzhihua.common.model.vos.common.ComBatteryCommodityOrderBargainVo"> SELECT cbcob.id, cbcob.user_id, cbcob.commodity_id, cbcob.activity_id, cbcob.order_id, cbcob.order_no, cbcob.original_price, cbcob.target_price, cbcob.current_price, cbcob.count, cbcob.create_at, cbcob.create_by, su.nick_name as nickName, su.image_url as imageUrl, cbc.`name` as commodityName, cbco.bargain_status FROM com_battery_commodity_order_bargain as cbcob left join com_battery_commodity_order as cbco on cbco.id = cbcob.order_id left join com_battery_commodity as cbc on cbc.id = cbco.commodity_id left join sys_user as su on su.user_id = cbcob.user_id where cbcob.id = #{id} </select> <!--查询指定行数据--> <select id="queryAllByLimit" resultMap="ComBatteryCommodityOrderBargainMap"> <select id="queryAllByLimit" resultType="com.panzhihua.common.model.vos.common.ComBatteryCommodityOrderBargainVo"> select id, user_id, commodity_id, activity_id, order_id, order_no, original_price, target_price, current_price, count, create_at, create_by @@ -74,7 +93,7 @@ </select> <!--查询所有数据--> <select id="queryAllByList" resultMap="ComBatteryCommodityOrderBargainMap"> <select id="queryAllByList" resultType="com.panzhihua.common.model.vos.common.ComBatteryCommodityOrderBargainVo"> select id, user_id, commodity_id, activity_id, order_id, order_no, original_price, target_price, current_price, count, create_at, create_by springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/resources/mapper/ComBatteryCommodityOrderBargainRecordMapper.xml
@@ -14,7 +14,7 @@ </resultMap> <!--查询单个--> <select id="queryById" resultMap="ComBatteryCommodityOrderBargainRecordMap"> <select id="queryById" resultType="com.panzhihua.common.model.vos.common.ComBatteryCommodityOrderBargainRecordVo"> select id, bargain_id, user_id, amount, old_user_id, create_at, create_by from com_battery_commodity_order_bargain_record @@ -22,7 +22,7 @@ </select> <!--查询指定行数据--> <select id="queryAllByLimit" resultMap="ComBatteryCommodityOrderBargainRecordMap"> <select id="queryAllByLimit" resultType="com.panzhihua.common.model.vos.common.ComBatteryCommodityOrderBargainRecordVo"> select id, bargain_id, user_id, amount, old_user_id, create_at, create_by from com_battery_commodity_order_bargain_record @@ -53,7 +53,7 @@ </select> <!--查询所有数据--> <select id="queryAllByList" resultMap="ComBatteryCommodityOrderBargainRecordMap"> <select id="queryAllByList" resultType="com.panzhihua.common.model.vos.common.ComBatteryCommodityOrderBargainRecordVo"> select id, bargain_id, user_id, amount, old_user_id, create_at, create_by from com_battery_commodity_order_bargain_record @@ -83,5 +83,23 @@ order by create_at desc </select> <select id="queryAllByBargainId" resultType="com.panzhihua.common.model.vos.common.ComBatteryCommodityOrderBargainRecordVo"> SELECT cbcobr.id, cbcobr.bargain_id, cbcobr.user_id, cbcobr.amount, cbcobr.old_user_id, cbcobr.create_at, cbcobr.create_by, su.nick_name as nickName, su.image_url as imageUrl FROM com_battery_commodity_order_bargain_record as cbcobr left join sys_user as su on su.user_id = cbcobr.user_id where cbcobr.bargain_id = #{bargainId} order by cbcobr.amount desc,cbcobr.create_at desc </select> </mapper>