yanghui
2022-11-28 42521c9b51c1bd9a40036f18fd610cd46601222d
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComBatteryCommodityOrderServiceImpl.java
@@ -58,22 +58,22 @@
    private ComBatteryTradeOrderService tradeOrderService;
    @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;
//    @Value("${min.app.currencyNotifyUrl}")
//    private String currencyNotifyUrl;
    @Resource
    private ComBatteryCommodityOrderCollageTeamMapper orderCollageTeamMapper;
    @Resource
    private ComBatteryCommodityOrderCollageTeamPeopleMapper orderCollageTeamPeopleMapper;
    @Resource
    private ComBatteryCommodityActivityMapper commodityActivityMapper;
    @Resource
    private ComBatteryCommodityOrderBargainMapper orderBargainMapper;
    /**
     * description  queryByPage  分页查询
@@ -281,7 +281,7 @@
            return R.fail("未查询到用户收货地址");
        }
        //查询用户信息
        SysUser user = userMapper.selectById(createOrderDto.getUserId());
        SysUser user = userMapper.selectOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getUserId,createOrderDto.getUserId()));
        if (user == null) {
            return R.fail("未查询到用户信息");
        }
@@ -366,8 +366,8 @@
            money = BigDecimal.valueOf(0.01);
        }
        // 调用wx支付
        result = WxPayUtils.getUnifiedorder(appid, mchId, payKey, currencyNotifyUrl + PayCpmstant.BATTERY_STORE_PAY_NOTIFY_URL
                , remark, openId, orderNo, money,null);
//        result = WxPayUtils.getUnifiedorder(appid, mchId, payKey, currencyNotifyUrl + PayCpmstant.BATTERY_STORE_PAY_NOTIFY_URL
//                , remark, openId, orderNo, money,null);
        log.info("用户购买商品微信支付返回参数:" + result);
        return result;
    }
@@ -380,7 +380,7 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R syncCloseOrder() {
        log.info("定时器定时关闭超过30分钟未支付订单,并返回商品库存");
        log.info("定时器定时关闭超过5分钟未支付订单,并返回商品库存");
        Date nowDate = new Date();
        //获取当前时间减30分钟时间
        Date oldDate = DateUtils.addMinutes(nowDate, -5);
@@ -399,6 +399,13 @@
                commoditySpecs.setStock(commoditySpecs.getStock() + commodityOrder.getCount());
                commoditySpecs.setUpdateAt(nowDate);
                commoditySpecsMapper.updateById(commoditySpecs);
            }
            if(commodityOrder.getActivityId() != null){
                ComBatteryCommodityActivity commodityActivity = commodityActivityMapper.selectById(commodityOrder.getActivityId());
                if(!commodityActivity.getType().equals(ComBatteryCommodityActivity.Type.PT)){
                    commodityActivity.setCommoditySaleNum(commodityActivity.getCommoditySaleNum() - commodityOrder.getCount());
                    commodityActivityMapper.updateById(commodityActivity);
                }
            }
        });
        return R.ok();
@@ -499,13 +506,10 @@
                        //用户开团,创建团队信息
                        orderCollageTeam = getOrderCollageTeam(commodityOrder,nowDate);
                        orderCollageTeamMapper.insert(orderCollageTeam);
                        commodityOrder.setTeamId(orderCollageTeam.getId());
                    }else{
                        //用户参团,查询参加的团队信息
                        orderCollageTeam = orderCollageTeamMapper.selectById(commodityOrder.getTeamId());
                        //判断当前拼团人员是否已足够成团
                        syncAssortedDoughStatus(orderCollageTeam.getId(),nowDate);
                        //判断当前拼团活动是否已完成
                        syncAssortedDoughActivityStatus(commodityOrder.getActivityId(),nowDate);
                    }
                    if(orderCollageTeam != null){
                        //创建用户开团人员记录
@@ -515,6 +519,12 @@
                    }
                    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);
@@ -532,6 +542,15 @@
        commodityOrder.setUpdateAt(nowDate);
        commodityOrder.setPayTime(payTime);
        this.baseMapper.updateById(commodityOrder);
        if(commodityOrder.getTeamId() != null){
            //判断当前拼团人员是否已足够成团
            syncAssortedDoughStatus(commodityOrder.getTeamId(),nowDate);
        }
        if(commodityOrder.getActivityId() != null && commodityOrder.getActivityType().equals(ComBatteryCommodityOrder.ActivityType.PT)){
            //判断当前拼团活动是否已完成
            syncAssortedDoughActivityStatus(commodityOrder.getActivityId(),nowDate);
        }
        return R.ok();
    }
@@ -605,7 +624,7 @@
            if(commodityActivity != null){
                Integer count = orderCollageTeamPeopleMapper.selectCount(new QueryWrapper<ComBatteryCommodityOrderCollageTeamPeople>()
                        .lambda().eq(ComBatteryCommodityOrderCollageTeamPeople::getTeamId,teamId));
                if(count >= commodityActivity.getCollageNum()){
                if(count >= commodityActivity.getCollagePeopleNum()){
                    //拼团条件满足,将所有已拼单的用户的订单更新为待发货状态
                    //更新拼团团队记录
                    orderCollageTeam.setStatus(ComBatteryCommodityOrderCollageTeam.Status.PTCG);
@@ -625,4 +644,149 @@
            }
        }
    }
    /**
     * 初始化砍价记录
     * @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.setOriginalPrice(commodity.getPrice());
            orderBargain.setCurrentPrice(commodity.getPrice());
        }
        //查询活动信息
        ComBatteryCommodityActivity commodityActivity = commodityActivityMapper.selectById(commodityOrder.getActivityId());
        if(commodityActivity != null){
            orderBargain.setTargetPrice(commodityActivity.getPrice());
        }
        return orderBargain;
    }
    /**
     * 创建秒杀订单
     * @param orderDto  请求参数
     * @return  创建订单结果
     */
    @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.selectOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getUserId,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){
            //更新活动商品库存
            commodityActivity.setCommoditySaleNum(commodityActivity.getCommoditySaleNum() + orderDto.getCount());
            commodityActivityMapper.updateById(commodityActivity);
            //更新商品库存
            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;
    }
}