From 61b5f9863f14ab4fc9da504ca2b553a778eb2e2c Mon Sep 17 00:00:00 2001 From: 44323 <443237572@qq.com> Date: 星期三, 24 一月 2024 15:10:32 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/HongRuiTang --- ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java | 1020 +++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 839 insertions(+), 181 deletions(-) diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java index 277a0af..f276d42 100644 --- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java @@ -1,7 +1,10 @@ package com.ruoyi.order.service.impl.order; -import com.google.common.collect.Lists; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -11,6 +14,7 @@ import com.github.binarywang.wxpay.config.WxPayConfig; import com.github.binarywang.wxpay.exception.WxPayException; import com.github.binarywang.wxpay.service.WxPayService; +import com.google.common.collect.Lists; import com.google.gson.Gson; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; @@ -38,10 +42,12 @@ import com.ruoyi.order.service.account.PaymentMessageService; import com.ruoyi.order.service.account.ProfitSharingService; import com.ruoyi.order.service.order.*; +import com.ruoyi.order.util.HuiFuTianXiaUtil; import com.ruoyi.system.api.constant.AppErrorConstant; import com.ruoyi.system.api.constant.DelayTaskEnum; import com.ruoyi.system.api.constant.SecurityConstant; import com.ruoyi.system.api.domain.dto.*; +import com.ruoyi.system.api.domain.poji.activity.Activity; import com.ruoyi.system.api.domain.poji.activity.ActivityRecord; import com.ruoyi.system.api.domain.poji.config.DelayTask; import com.ruoyi.system.api.domain.poji.goods.Goods; @@ -52,7 +58,6 @@ import com.ruoyi.system.api.domain.poji.member.MemberCoupon; import com.ruoyi.system.api.domain.poji.member.MemberGiftRecord; import com.ruoyi.system.api.domain.poji.shop.Shop; -import com.ruoyi.system.api.domain.vo.ShopProportionVo; import com.ruoyi.system.api.domain.poji.sys.SysUser; import com.ruoyi.system.api.domain.vo.*; import com.ruoyi.system.api.service.*; @@ -60,12 +65,15 @@ import lombok.extern.log4j.Log4j2; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; +import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.format.DateTimeFormatter; @@ -146,6 +154,8 @@ @Resource private OrderRefundService orderRefundService; + @Value("${wx.pay.callbackPath}") + private String callbackPath; /** @@ -516,6 +526,12 @@ public AppPlaceOrderVo placeOrder(AppPlaceOrderDto appPlaceOrderDto) { // 获取用户ID Long userId = appPlaceOrderDto.getUserId(); + Member member = remoteMemberService.getMember(userId).getData(); + appPlaceOrderDto.setUserId(userId); + if (member != null) { + appPlaceOrderDto.setOpenid(member.getMiniOpenid()); + appPlaceOrderDto.setShopId(member.getRelationShopId()); + } // 创建下单视图对象 AppPlaceOrderVo appPlaceOrderVo = new AppPlaceOrderVo(); // 创建商品列表 @@ -747,6 +763,11 @@ order.setOrderRemark(appPlaceOrderDto.getOrderRemark()); order.setGoodsNum(goodsNum); order.setCreateTime(new Date()); + if(member.getBindingFlag()==0){ + order.setUnbindingFlag(1); + }else{ + order.setUnbindingFlag(0); + } // 保存订单 this.save(order); appPlaceOrderVo.setOrderId(orderId); @@ -771,8 +792,13 @@ if (null != goodsNameList) { goodsName = String.join(",", goodsNameList); } - // 小程序微信下单支付 - createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, outTradeNo, +// // 小程序微信下单支付 +// createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), goodsName, outTradeNo, +// orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(), +// appPlaceOrderDto.getSpbillCreateIp()); + + // 小程序微信下单支付 TODO 更换支付渠道(汇付天下) + createWxPayInfo1(appPlaceOrderVo, userId, order.getShopId(), goodsName, outTradeNo, orderId, order.getPayMoney(), appPlaceOrderDto.getOpenid(), appPlaceOrderDto.getSpbillCreateIp()); //生成自动取消订单延时任务 @@ -896,6 +922,105 @@ } + + + /** + * 小程序支付下单API + * @param appPlaceOrderVo + * @param userId + * @param shopId + * @param goodsName + * @param outTradeNo + * @param orderId + * @param payMoney + * @param openid + * @param payerClientIp + */ + + private void createWxPayInfo1(AppPlaceOrderVo appPlaceOrderVo, Long userId, Long shopId, + String goodsName, String outTradeNo, + String orderId, BigDecimal payMoney, + String openid, String payerClientIp){ + try { + WxPayConfig config = wxService.getConfig(); + PartnerTransactionsRequest request = new PartnerTransactionsRequest(); + request.setSpAppid(config.getAppId()); + request.setSpMchid(config.getMchId()); + request.setSubMchid(config.getSubMchId()); + // 商品描述 body + String description = goodsName + "-商品购买"; + + request.setDescription(description); + request.setOutTradeNo(outTradeNo); + request.setNotifyUrl(callbackPath + "/order/app/notify/wechatPaymentCallback"); + + R<com.alibaba.fastjson.JSONObject> r = HuiFuTianXiaUtil.weixinPayment(outTradeNo, description, payMoney.doubleValue(), openid, request.getNotifyUrl()); + if(r.getCode() != 200){ + throw new ServiceException(r.getMsg()); + }else{ + new Thread(new Runnable() { + @Override + public void run() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + int time = 0; + for (int i = 0; i < 13; i++) { + try { + time += (5000 * i); + Thread.sleep(time); + } catch (InterruptedException e) { + e.printStackTrace(); + } + R<WeixinPaymentNotifyVo> voR = HuiFuTianXiaUtil.queryPayment(outTradeNo, sdf.format(new Date())); + if(voR.getCode() == 200){ + WeixinPaymentNotifyVo data = voR.getData(); + //P:处理中;S:成功;F:失败;I: 初始(初始状态很罕见,请联系汇付技术人员处理); + String transStat = data.getTransStat(); + if("S".equals(transStat)){ + PartnerTransactionsResult transaction = new PartnerTransactionsResult(); + transaction.setOutTradeNo(data.getReqSeqId()); + payBack(transaction, data.getFeeFlag() == 1 ? BigDecimal.ZERO : new BigDecimal(data.getFeeAmount())); + return; + } + if("P".equals(transStat) || "F".equals(transStat)){ + continue; + } + log.error("支付失败,流水号:{}, 状态码:{}", outTradeNo, transStat); + return; + }else{ + log.error("支付查询失败!流水号:{},结果:{}", outTradeNo, voR.getMsg()); + } + } + } + }).start(); + } + com.alibaba.fastjson.JSONObject data = r.getData(); + String mainMchId = WxPayConfiguration.getPlatformTyMacId(); + // 支付相关信息返回 + appPlaceOrderVo.setAppId(data.getString("appId")); + appPlaceOrderVo.setMchId(config.getMchId()); + appPlaceOrderVo.setTimeStamp(data.getString("timeStamp")); + appPlaceOrderVo.setNonceStr(data.getString("nonceStr")); + appPlaceOrderVo.setPackageStr(data.getString("package")); + appPlaceOrderVo.setSignType(data.getString("signType")); + appPlaceOrderVo.setPaySign(data.getString("paySign")); + + // 保存支付订单统一下单日志 + paymentMessageService.savePaymentMessage("1", orderId, JSON.toJSONString(request), data.toJSONString()); + + // 保存支付订单统一下单支付记录 + orderPaymentService.saveOrderPayment(userId, shopId, mainMchId, orderId, outTradeNo, payMoney, + appPlaceOrderVo.getEndTime(), "Y", openid, + goodsName, appPlaceOrderVo.getPackageStr()); + }catch (Exception e){ + e.printStackTrace(); + } + + } + + + + + /** * @param appPlaceActivityDto * @return AppPlaceOrderVo @@ -908,6 +1033,12 @@ @GlobalTransactional(rollbackFor = Exception.class) public AppPlaceOrderVo placeActivityOrder(AppPlaceActivityDto appPlaceActivityDto) { Long userId = appPlaceActivityDto.getUserId(); + Member member = remoteMemberService.getMember(userId).getData(); + appPlaceActivityDto.setUserId(userId); + if (member != null && member.getRelationShopId() != null) { + appPlaceActivityDto.setOpenid(member.getMiniOpenid()); + appPlaceActivityDto.setShopId(member.getRelationShopId()); + } // 创建订单对象 AppPlaceOrderVo appPlaceOrderVo = new AppPlaceOrderVo(); // 定义商品订单对象 @@ -1095,8 +1226,11 @@ order.setOrderRemark(appPlaceActivityDto.getOrderRemark()); order.setGoodsNum(goodsNum); order.setCreateTime(new Date()); - if(appPlaceActivityDto.getNewMemberFlag()!=null&&appPlaceActivityDto.getNewMemberFlag()==1){ - order.setNewMemberFlag(1); + //订单是否未绑定时下单 + if(member.getBindingFlag()==0){ + order.setUnbindingFlag(1); + }else{ + order.setUnbindingFlag(0); } // 保存订单 this.save(order); @@ -1133,7 +1267,12 @@ } appPlaceOrderVo.setEndTime(DateUtils.addMinutes(order.getCreateTime(), delayTime)); // 小程序微信下单支付 - createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), orderGoods.getGoodsName(), outTradeNo, +// createWxPayInfo(appPlaceOrderVo, userId, order.getShopId(), orderGoods.getGoodsName(), outTradeNo, +// orderId, order.getPayMoney(), appPlaceActivityDto.getOpenid(), +// appPlaceActivityDto.getSpbillCreateIp()); + + // 小程序微信下单支付 TODO 更换支付渠道(汇付天下) + createWxPayInfo1(appPlaceOrderVo, userId, order.getShopId(), orderGoods.getGoodsName(), outTradeNo, orderId, order.getPayMoney(), appPlaceActivityDto.getOpenid(), appPlaceActivityDto.getSpbillCreateIp()); //生成自动取消订单延时任务 @@ -1185,13 +1324,16 @@ */ @Override public List<AppUserOrderPageVo> pageUserOrder(Page page, AppUserOrderPageDto appUserOrderPageDto) { + Long userId = appUserOrderPageDto.getUserId(); + Member member = remoteMemberService.getMember(userId).getData(); List<AppUserOrderPageVo> appUserOrderPageVoList = orderMapper.pageUserOrder(page, appUserOrderPageDto); + //处理商户名称显示 if (appUserOrderPageVoList != null && !appUserOrderPageVoList.isEmpty()) { Long shopId; String activityId; - Shop shop; HashSet<Long> shopSet = new HashSet<Long>(); HashSet<String> activitySet = new HashSet<String>(); + // 遍历订单列表,获取店铺ID和活动ID for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) { shopId = appUserOrderPageVo.getShopId(); shopSet.add(shopId); @@ -1200,23 +1342,123 @@ activitySet.add(activityId); } } - Map<Long, Shop> shopMap = new HashMap<>(); - shopSet.forEach(shopIdLong -> { - Shop shopTemp = remoteShopService.getShop(shopIdLong).getData(); - shopMap.put(shopIdLong, shopTemp); - }); + String shopJoinedString = String.join(",", shopSet.stream().map(Object::toString).collect(Collectors.toList())); + MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); + mgtBaseBathDto.setIds(shopJoinedString); + List<MgtSimpleShopVo> simpleShopVoList = remoteShopService.listShopSimpleVoByIds(mgtBaseBathDto).getData(); + Map<Long, MgtSimpleShopVo> shopMap = simpleShopVoList.stream() + .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); + MgtSimpleShopVo simpleShopVo; Integer delayTime = 30; if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) { delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); } + //处理订单回显 for (AppUserOrderPageVo appUserOrderPageVo : appUserOrderPageVoList) { - shop = shopMap.get(appUserOrderPageVo.getShopId()); - appUserOrderPageVo.setShopName(shop.getShopName()); - appUserOrderPageVo.setShopServicePhone(shop.getShopServicePhone()); - if (appUserOrderPageVo.getShopId().equals(appUserOrderPageDto.getShopId())) { - appUserOrderPageVo.setSameShop(1); - } else { - appUserOrderPageVo.setSameShop(0); + if(member.getBindingFlag()==0&&appUserOrderPageVo.getOrderFrom()==2){ + //查询秒杀活动的参与店铺 + R<Activity> activity = remoteActivityService.getActivity(appUserOrderPageVo.getActivityId()); + if(activity.getCode() != 200){ + throw new RuntimeException(activity.getMsg()); + } + Activity data = activity.getData(); + if(data.getAreaFlag() == 1){ + appUserOrderPageVo.setShopNumber(0); + appUserOrderPageVo.setShopName("全部店铺"); + } + if(data.getAreaFlag() == 2 && data.getShopFlag() == 1){ + String designatedArea = data.getDesignatedArea(); + String[] split = designatedArea.split(","); + List<String> list = Arrays.asList(split); + R<List<Shop>> listR = remoteShopService.listShopByCityCode(list); + if(listR.getCode() != 200){ + throw new RuntimeException(listR.getMsg()); + } + List<Shop> data1 = listR.getData(); + appUserOrderPageVo.setShopNumber(1); + appUserOrderPageVo.setShopName(JSON.toJSONString(data1)); + } + if(data.getShopFlag() == 2){ + String applicableShop = data.getApplicableShop(); + String[] split = applicableShop.split(","); + List<String> list = Arrays.asList(split); + R<List<Shop>> listR = remoteShopService.listShopByIds(list); + if(listR.getCode() != 200){ + throw new RuntimeException(listR.getMsg()); + } + List<Shop> data1 = listR.getData(); + appUserOrderPageVo.setShopNumber(1); + appUserOrderPageVo.setShopName(JSON.toJSONString(data1)); + } + }else if(member.getBindingFlag()==1&&appUserOrderPageVo.getOrderFrom()==2){ + Long relationShopId = member.getRelationShopId(); + R<Shop> shop = remoteShopService.getShop(relationShopId); + if(shop.getCode() != 200){ + throw new RuntimeException(shop.getMsg()); + } + Shop data1 = shop.getData(); + //查询秒杀活动的参与店铺 + R<Activity> activity = remoteActivityService.getActivity(appUserOrderPageVo.getActivityId()); + if(activity.getCode() != 200){ + throw new RuntimeException(activity.getMsg()); + } + Activity data = activity.getData(); + if(data.getAreaFlag() == 1){ + appUserOrderPageVo.setShopNumber(2); + appUserOrderPageVo.setShopName(data1.getShopName()); + appUserOrderPageVo.setShopServicePhone(data1.getShopServicePhone()); + } + if(data.getAreaFlag() == 2 && data.getShopFlag() == 1){ + String designatedArea = data.getDesignatedArea(); + String[] split = designatedArea.split(","); + List<String> list = Arrays.asList(split); + R<List<Shop>> listR = remoteShopService.listShopByCityCode(list); + if(listR.getCode() != 200){ + throw new RuntimeException(listR.getMsg()); + } + List<Shop> data2 = listR.getData(); + List<Long> collect = data2.stream().map(Shop::getShopId).collect(Collectors.toList()); + if(collect.contains(relationShopId)){ + appUserOrderPageVo.setShopNumber(2); + appUserOrderPageVo.setShopName(data1.getShopName()); + appUserOrderPageVo.setShopServicePhone(data1.getShopServicePhone()); + }else{ + appUserOrderPageVo.setShopNumber(1); + appUserOrderPageVo.setShopName(JSON.toJSONString(data2)); + } + } + if(data.getShopFlag() == 2){ + String applicableShop = data.getApplicableShop(); + String[] split = applicableShop.split(","); + List<String> list = Arrays.asList(split); + R<List<Shop>> listR = remoteShopService.listShopByIds(list); + if(listR.getCode() != 200){ + throw new RuntimeException(listR.getMsg()); + } + List<Shop> data2 = listR.getData(); + List<Long> collect = data2.stream().map(Shop::getShopId).collect(Collectors.toList()); + if(collect.contains(relationShopId)){ + appUserOrderPageVo.setShopNumber(2); + appUserOrderPageVo.setShopName(data1.getShopName()); + appUserOrderPageVo.setShopServicePhone(data1.getShopServicePhone()); + }else{ + appUserOrderPageVo.setShopNumber(1); + appUserOrderPageVo.setShopName(JSON.toJSONString(data2)); + } + } + + + + }else{ + simpleShopVo = shopMap.get(appUserOrderPageVo.getShopId()); + appUserOrderPageVo.setShopName(simpleShopVo.getShopName()); + appUserOrderPageVo.setShopServicePhone(simpleShopVo.getShopServicePhone()); + appUserOrderPageVo.setShopNumber(2); + if (appUserOrderPageVo.getShopId().equals(appUserOrderPageDto.getShopId())) { + appUserOrderPageVo.setSameShop(1); + } else { + appUserOrderPageVo.setSameShop(0); + } } appUserOrderPageVo.setVerifyCode("1-" + appUserOrderPageVo.getOrderId()); appUserOrderPageVo.setEndTime(DateUtils.addMinutes(appUserOrderPageVo.getCreateTime(), delayTime)); @@ -1258,7 +1500,7 @@ appUserOrderGetVo.setShopName(shop.getShopName()); appUserOrderGetVo.setAppUserOrderGoodsPageVoList(appUserOrderGoodsPageVoList); appUserOrderGetVo.setVerifyCode("1-" + orderId); - //生成自动取消订单延时任务 + //获取订单取消时间 Integer delayTime = 30; if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) { delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); @@ -1279,6 +1521,9 @@ if (order.getOrderStatus() == 0) { throw new ServiceException(AppErrorConstant.CANCEL_CANCEL_ORDER); } else if (order.getOrderStatus() == 1) { + //删除待支付超时取消延时任务 + redisService.deleteObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId); + remoteConfigService.deleteDelayTask(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+"-"+orderId); this.autoCancelOrder(orderId); } else if (order.getOrderStatus() == 2) { // 2.待核销 -> 订单退款 @@ -1297,21 +1542,31 @@ */ @Override public AppPlaceOrderVo payOrder(String orderId){ + // 根据订单ID获取订单 Order order = this.getById(orderId); - if(order.getOrderStatus()!=1){ + // 如果订单状态不是1(待支付),抛出异常 + if(order.getOrderStatus() != 1){ throw new ServiceException(AppErrorConstant.CANCEL_CANCEL_ORDER); } - String payStr = redisService.getCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+ "-"+orderId); + // 从缓存中获取支付信息 + String payStr = redisService.getCacheObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId); + // 如果支付信息为空,抛出异常 if(StringUtils.isBlank(payStr)){ throw new ServiceException(AppErrorConstant.CANCEL_CANCEL_ORDER); } + // 默认延迟时间为30分钟 Integer delayTime = 30; + // 如果缓存中存在自动取消订单时间,使用缓存中的值作为延迟时间 if (redisService.hasKey(SecurityConstant.AUTO_CANCEL_ORDER_TIME)) { delayTime = redisService.getCacheObject(SecurityConstant.AUTO_CANCEL_ORDER_TIME); } + // 创建AppPlaceOrderVo对象 AppPlaceOrderVo appPlaceOrderVo = new AppPlaceOrderVo(); + // 根据未支付订单ID获取订单支付信息 OrderPayment orderPayment = orderPaymentService.getByUnpaidOrderId(orderId); + // 将支付信息拆分为数组 String[] payArr = payStr.split("-"); + // 设置AppPlaceOrderVo对象的属性 appPlaceOrderVo.setOrderId(order.getOrderId()); appPlaceOrderVo.setOrderNo(order.getOrderNo()); appPlaceOrderVo.setPayType(order.getPayType()); @@ -1326,6 +1581,7 @@ appPlaceOrderVo.setSignType(payArr[4]); appPlaceOrderVo.setPaySign(payArr[5]); appPlaceOrderVo.setPrepayId(orderPayment.getPrepayId()); + // 返回AppPlaceOrderVo对象 return appPlaceOrderVo; } @@ -1392,17 +1648,38 @@ Member member = remoteMemberService.getMember(order.getUserId()).getData(); // 根据订单ID获取订单商品列表 List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listAppVoByOrderId(orderId); - //绑定用户判断核销商户 + //判断用户是否绑定 if(member.getBindingFlag()==1){ - //绑定用户需直接判断商户 - if (!order.getShopId().equals(shopId)) { + //绑定用户判断核销商户 + if (order.getOrderFrom()==2&&!member.getRelationShopId().equals(shopId)) { throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); } + if(order.getOrderFrom() == 1){ + //商城订单和绑定后活动订单判断核销商户和订单商户和用户关联商户是否统一 + if (!order.getShopId().equals(shopId)) { + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + if (!member.getRelationShopId().equals(shopId)) { + throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + } }else{ + //未绑定用户判断核销商户 //商城订单需判断商户 if(order.getOrderFrom()==1){ if (!order.getShopId().equals(shopId)) { throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + } + //未绑定用户的活动订单需判断活动订单是否支持该店铺 + if(order.getOrderFrom()==2){ + String activityId = order.getActivityId(); + MerActivityShopDto merActivityShopDto = new MerActivityShopDto(); + merActivityShopDto.setShopId(shopId); + merActivityShopDto.setActivityId(activityId); + Boolean judge = remoteActivityService.judgeActivityShop(merActivityShopDto).getData(); + if(!judge){ + throw new ServiceException(AppErrorConstant.SHOP_NO_ACTIVITY); } } //未绑定用户需判断核销商城订单判断商品单价和优惠券 @@ -1515,19 +1792,41 @@ //获取核销商户 ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(merVerifyOrderDto.getUserId()).getData(); Long shopId = shopRelUserVo.getShopId(); + log.info("当前核销员工【" + shopRelUserVo.getUserName() + "】门店ID:" + shopId); //获取订单商品列表 List<AppUserOrderGoodsPageVo> appUserOrderGoodsPageVoList = orderGoodsService.listAppVoByOrderId(orderId); //绑定用户判断核销商户 if(member.getBindingFlag()==1){ - //绑定用户需直接判断商户 - if (!order.getShopId().equals(shopId)) { + //未绑定的活动订单只需要判断店铺是否支持 + if(order.getOrderFrom()==2 && !member.getRelationShopId().equals(shopId)){ throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + if(order.getOrderFrom()==2 && member.getRelationShopId().equals(shopId)){ + String activityId = order.getActivityId(); + MerActivityShopDto merActivityShopDto = new MerActivityShopDto(); + merActivityShopDto.setShopId(shopId); + merActivityShopDto.setActivityId(activityId); + Boolean judge = remoteActivityService.judgeActivityShop(merActivityShopDto).getData(); + if(!judge){ + throw new ServiceException(AppErrorConstant.SHOP_NO_ACTIVITY); + } } }else{ //商城订单需判断商户 if(order.getOrderFrom()==1){ if (!order.getShopId().equals(shopId)) { throw new ServiceException(AppErrorConstant.VERIFY_SHOP_ERROR); + } + } + //未绑定用户需判断活动订单是否支持该店铺 + if(order.getOrderFrom()==2){ + String activityId = order.getActivityId(); + MerActivityShopDto merActivityShopDto = new MerActivityShopDto(); + merActivityShopDto.setShopId(shopId); + merActivityShopDto.setActivityId(activityId); + Boolean judge = remoteActivityService.judgeActivityShop(merActivityShopDto).getData(); + if(!judge){ + throw new ServiceException(AppErrorConstant.SHOP_NO_ACTIVITY); } } //未绑定用户需判断核销商城订单判断商品单价和优惠券 @@ -1706,12 +2005,26 @@ appMemberBindingDto.setShopId(order.getShopId()); appMemberBindingDto.setUserId(order.getUserId()); appMemberBindingDto.setBindingFlag(1); - appMemberBindingDto.setBindingType(1); + if(order.getOrderFrom()==1){ + appMemberBindingDto.setBindingType(1); + }else if(order.getOrderFrom()==2){ + appMemberBindingDto.setBindingType(2); + } remoteMemberService.updateMemberBinding(appMemberBindingDto); + order.setNewMemberFlag(1); + }else{ + order.setNewMemberFlag(0); } + this.saveOrUpdate(order); // 订单金额大于0时进行分账 - if (order.getOnlinePayMoney().compareTo(BigDecimal.ZERO)>0) { - submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOnlinePayMoney(),order.getOrderFrom()); + OrderPayment orderPayment = orderPaymentService.getOne(new QueryWrapper<OrderPayment>() + .eq("order_id", order.getOrderId()).eq("pay_status", 2) + .eq("del_flag", 0)); + BigDecimal bigDecimal = orderPayment.getPayMoney().subtract(orderPayment.getFeeAmount()).setScale(2, BigDecimal.ROUND_HALF_EVEN); + if (bigDecimal.compareTo(BigDecimal.ZERO)>0) { + // TODO: 2023/10/17 更换分账渠道(汇付天下) +// submitProfitSharing(orderId, order.getOrderNo(), order.getShopId(), order.getOnlinePayMoney(),order.getOrderFrom()); + submitProfitSharing1(orderId, order.getOrderNo(), order.getShopId(), bigDecimal, order.getOrderFrom()); } //创建支付记录 if(merVerifyOrderDto.getRelPayMoney().compareTo(BigDecimal.ZERO)>0){ @@ -1723,13 +2036,39 @@ payRecord.setPayType(merVerifyOrderDto.getPayType()); payRecordService.save(payRecord); } - //更新用户消费统计 + //更新用户积分和消费统计 MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); + memberTotalChangeDto.setUserId(order.getUserId()); + // 如果存在积分兑换比例,则计算积分 + if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) { + Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL); + BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue); + BigDecimal integralBig = moneyValueBig.multiply(order.getOnlinePayMoney()).setScale(0,BigDecimal.ROUND_HALF_UP); + Integer integral = Integer.valueOf(integralBig.toString()); + if(integral>0){ + memberTotalChangeDto.setChangeIntegral(integral); + memberTotalChangeDto.setTypeIntegral(1); + memberTotalChangeDto.setOrderId(orderId); + memberTotalChangeDto.setOrderNo(order.getOrderNo()); + } + } + //更新消费时间 memberTotalChangeDto.setConsumeTime(nowTime); remoteMemberService.changeMemberTotal(memberTotalChangeDto); return merVerifyOrderVo; } + /** + * @description 分账实现 + * @author jqs + * @date 2023/9/8 11:56 + * @param orderId + * @param orderNo + * @param shopId + * @param orderMoney + * @param orderFrom + * @return void + */ private void submitProfitSharing(String orderId, String orderNo, Long shopId, BigDecimal orderMoney, Integer orderFrom) { String sendMessage = ""; String resultMessage = ""; @@ -1744,13 +2083,13 @@ } // 平台特约商户号,用户平台收取服务费 2023-09-05改变分账方式 String platformTyMacId = WxPayConfiguration.getPlatformTyMacId(); - if (!StringUtils.isEmpty(subMchId)) { + if (!StringUtils.isEmpty(platformTyMacId)) { WxPayConfig config = wxService.getConfig(); ShopProportionVo shopProportion = null; BigDecimal proportionPercent = null; //商户订单获取统一分成 活动订单获取活动分成 if(orderFrom==1){ - proportionPercent = redisService.getCacheObject(SecurityConstant.SHOP_COMMON_PROPORTION); + proportionPercent = new BigDecimal(redisService.getCacheObject(SecurityConstant.SHOP_COMMON_PROPORTION).toString()); }else{ R<ShopProportionVo> resultShopProportion = remoteShopService.getShopProportion(shopId); shopProportion = resultShopProportion.getData(); @@ -1764,8 +2103,7 @@ request.setOutOrderNo(IdUtils.simpleUUID()); List<ProfitSharingRequest.Receiver> receiverList = new ArrayList<>(); String description = "订单:" + orderNo + " 平台分账"; - //平台分成 - proportionPercent = new BigDecimal("100.00").subtract(proportionPercent); + //商户分成 if(proportionPercent.compareTo(BigDecimal.ZERO)>0){ ProfitSharingResult result = new ProfitSharingResult(); result.setOutOrderNo(orderNo); @@ -1810,6 +2148,131 @@ paymentMessageService.savePaymentMessage("4", orderId, sendMessage, resultMessage); } + + + + /** + * @description 分账实现 + * @author jqs + * @date 2023/9/8 11:56 + * @param orderId + * @param orderNo + * @param shopId + * @param orderMoney + * @param orderFrom + * @return void + */ + private void submitProfitSharing1(String orderId, String orderNo, Long shopId, BigDecimal orderMoney, Integer orderFrom) { + String sendMessage = ""; + String resultMessage = ""; + try { + // 核销完成 开始分账(平台收取服务费) + OrderPayment payment = orderPaymentService.getByOrderId(orderId); + String transactionId = payment.getTransactionId(); + String outTradeNo = payment.getOutTradeNo(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String org_req_date = sdf.format(payment.getCreateTime()); + R<ShopAuthenticationHftxVo> resultMch = remoteShopService.getShopHFTXSubMchId(shopId); + ShopAuthenticationHftxVo vo = resultMch.getData(); + if (StringUtils.isEmpty(vo.getHuifuId())) { + throw new ServiceException("获取商户号失败"); + } + // 平台特约商户号,用户平台收取服务费 2023-09-05改变分账方式 + String platformTyMacId = WxPayConfiguration.getPlatformTyMacId(); + if (!StringUtils.isEmpty(platformTyMacId)) { + WxPayConfig config = wxService.getConfig(); + ShopProportionVo shopProportion = null; + BigDecimal proportionPercent = null; + //商户订单获取统一分成 活动订单获取活动分成 + if(orderFrom==1){ + if(null == vo.getShareRatio()){ + proportionPercent = new BigDecimal(redisService.getCacheObject(SecurityConstant.SHOP_COMMON_PROPORTION).toString()); + }else{ + proportionPercent = new BigDecimal(vo.getShareRatio()); + } + }else{ + R<ShopProportionVo> resultShopProportion = remoteShopService.getShopProportion(shopId); + shopProportion = resultShopProportion.getData(); + proportionPercent = shopProportion.getProportionPercent(); + } + if (null != proportionPercent) { + ProfitSharingRequest request = new ProfitSharingRequest(); + request.setAppid(config.getAppId()); + request.setSubMchid(platformTyMacId); + request.setTransactionId(transactionId); + request.setOutOrderNo(IdUtils.simpleUUID()); + List<ProfitSharingRequest.Receiver> receiverList = new ArrayList<>(); + String description = "订单:" + orderNo + " 平台分账"; + //商户分成 + if(proportionPercent.compareTo(BigDecimal.ZERO)>0){ + PaymentDelaytransHFTXVo result = new PaymentDelaytransHFTXVo(); + // 计算分成金额 + int amount = orderMoney.multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).intValue(); + BigDecimal multiply = orderMoney.multiply(proportionPercent.divide(new BigDecimal(100))).setScale(2, RoundingMode.HALF_EVEN); + log.info("订单分账:{} 分账金额: {}", orderNo, amount); + if (amount > 0) { + // 分账创建 + ProfitSharingRequest.Receiver receiver = new ProfitSharingRequest.Receiver(); + receiver.setType("MERCHANT_ID"); + receiver.setReceiverAccount(vo.getHuifuId()); + receiver.setAmount(amount); + receiver.setDescription(description); + receiverList.add(receiver); + request.setReceivers(receiverList); + // 分账完成 + request.setFinish(true); + + //分账对象 + JSONArray acctInfos = new JSONArray(); + if(multiply.compareTo(BigDecimal.ZERO) > 0){ + JSONObject jsonObject = new JSONObject(); + jsonObject.put("div_amt", String.format("%.2f", multiply.doubleValue())); + jsonObject.put("huifu_id", vo.getHuifuId()); + acctInfos.add(jsonObject); + } + //平台商户 + BigDecimal pt_amount = orderMoney.subtract(multiply).setScale(2, RoundingMode.HALF_EVEN); + if(pt_amount.compareTo(BigDecimal.ZERO) > 0){ + JSONObject jsonObject1 = new JSONObject(); + jsonObject1.put("div_amt", String.format("%.2f", pt_amount.doubleValue())); + jsonObject1.put("huifu_id", "6666000141216769"); + acctInfos.add(jsonObject1); + } + + R<PaymentDelaytransHFTXVo> hftxVoR = HuiFuTianXiaUtil.paymentDelaytrans(request.getOutOrderNo(), org_req_date, outTradeNo, acctInfos); + if(hftxVoR.getCode() != 200){ + throw new ServiceException(hftxVoR.getMsg()); + } + result = hftxVoR.getData(); + // 创建分账记录 + profitSharingService.saveProfitSharing1(shopId, orderId, orderMoney, vo.getHuifuId(), multiply.doubleValue(), result); + } + // 保存请求信息 + sendMessage = JSONObject.toJSONString(request); + resultMessage = JSONObject.toJSONString(result); + } + } else { + resultMessage = String.format("订单分账:%s 获取商户分成失败", orderNo); + log.info(resultMessage); + } + } else { + resultMessage = String.format("订单分账:%s 获取微信商户号失败", orderNo); + log.info(resultMessage); + } + } catch (Exception e) { + e.printStackTrace(); + resultMessage = String.format("订单分账:%s 分账失败:%s", orderNo, e.getMessage()); + log.info(resultMessage); + throw new ServiceException(resultMessage); + } + + // 保存分账信息 + paymentMessageService.savePaymentMessage("4", orderId, sendMessage, resultMessage); + } + + + + /** * @param merVerifyCouponDto * @return MerVerifyCouponVo @@ -1853,30 +2316,37 @@ MerVerifyCouponVo merVerifyCouponVo = new MerVerifyCouponVo(); // 调用remoteCouponService的getVerifyCoupon方法获取MerVerifyCouponGetVo对象 List<Goods> goodsList = verifyCouponGetVo.getGoodsList(); + String relGoodsIds = memberCoupon.getRelGoodsIds(); + String[] relGoodsIdArr = relGoodsIds.split(","); + if(relGoodsIdArr.length!=goodsList.size()){ + throw new ServiceException(AppErrorConstant.GOODS_DOWN); + } merVerifyCouponVo.setUserName(member.getRealName()); merVerifyCouponVo.setUserMobile(member.getMobile()); merVerifyCouponVo.setCouponFrom(verifyCouponGetVo.getCouponFrom()); merVerifyCouponVo.setCouponName(memberCoupon.getCouponName()); merVerifyCouponVo.setCreateTime(memberCoupon.getReceiveTime()); // 将goodsList转换为MerCouponGoodsListVo列表,并设置相应属性 - List<MerCouponGoodsListVo> merCouponGoodsList = goodsList.stream() - .map(goods -> { - MerCouponGoodsListVo merCouponGoods = new MerCouponGoodsListVo(); - merCouponGoods.setGoodsId(goods.getGoodsId()); - merCouponGoods.setGoodsName(goods.getGoodsName()); - if (goods.getGoodsType() == 1) { - merCouponGoods.setGoodsType("周期"); - } else if (goods.getGoodsType() == 2) { - merCouponGoods.setGoodsType("服务"); - } else if (goods.getGoodsType() == 3) { - merCouponGoods.setGoodsType("体验"); - } else if (goods.getGoodsType() == 4) { - merCouponGoods.setGoodsType("单品"); - } - // 设置其他属性 - return merCouponGoods; - }) - .collect(Collectors.toList()); + List<MerCouponGoodsListVo> merCouponGoodsList = new ArrayList<>(); + MerCouponGoodsListVo merCouponGoods; + for(Goods goods : goodsList){ + if(goods.getGoodsStatus()!=1){ + throw new ServiceException(AppErrorConstant.GOODS_DOWN); + } + merCouponGoods = new MerCouponGoodsListVo(); + merCouponGoods.setGoodsId(goods.getGoodsId()); + merCouponGoods.setGoodsName(goods.getGoodsName()); + if (goods.getGoodsType() == 1) { + merCouponGoods.setGoodsType("周期"); + } else if (goods.getGoodsType() == 2) { + merCouponGoods.setGoodsType("服务"); + } else if (goods.getGoodsType() == 3) { + merCouponGoods.setGoodsType("体验"); + } else if (goods.getGoodsType() == 4) { + merCouponGoods.setGoodsType("单品"); + } + merCouponGoodsList.add(merCouponGoods); + } // 设置merVerifyCouponVo的goodsList属性为merCouponGoodsList merVerifyCouponVo.setGoodsList(merCouponGoodsList); //生成服务 @@ -1924,6 +2394,7 @@ merVerifyMemberCouponDto.setShopId(shopId); remoteCouponService.sureMemberCoupon(merVerifyMemberCouponDto); consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList); + //绑定未绑定用户 if (member.getBindingFlag() != 1) { AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto(); appMemberBindingDto.setBindingFlag(1); @@ -2042,6 +2513,7 @@ merVerifyPrizeFinalDto.setPrizeId(memberGiftRecord.getPrizeId()); merVerifyPrizeFinalDto.setShopId(shop.getShopId()); remoteMemberService.verifyPrize(merVerifyPrizeFinalDto); + //绑定未绑定用户 if (member.getBindingFlag() != 1) { AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto(); appMemberBindingDto.setBindingFlag(1); @@ -2066,7 +2538,7 @@ */ @Override public List<MerMemberNoClearOrderVo> pageMerMemberNoClearOrder(Page page, MerMemberNoClearOrderDto merMemberNoClearOrderDto) { - List<MerMemberNoClearOrderVo> merMemberNoClearOrderVoList = orderMapper.pageMerMemberNoClearOrder(page, merMemberNoClearOrderDto.getMemberUserId()); + List<MerMemberNoClearOrderVo> merMemberNoClearOrderVoList = orderMapper.pageMerMemberNoClearOrder(page, merMemberNoClearOrderDto); if (merMemberNoClearOrderVoList != null && !merMemberNoClearOrderVoList.isEmpty()) { BigDecimal zeroBig = new BigDecimal("0.00"); for (MerMemberNoClearOrderVo merMemberNoClearOrderVo : merMemberNoClearOrderVoList) { @@ -2092,6 +2564,7 @@ order.setOfflinePayMoney(order.getOfflinePayMoney().add(merCloseOrderDto.getPayMoney())); order.setOffPayTime(new Date()); order.setPayMoney(order.getPayMoney().add(merCloseOrderDto.getPayMoney())); + //支付金额大于实收金额时结清 if (order.getPayMoney().compareTo(order.getChangeReceivableMoney()) >= 0) { order.setCloseFlag(1); } else { @@ -2114,6 +2587,8 @@ * @param merNewOrderDto */ @Override + @Transactional + @GlobalTransactional(rollbackFor = Exception.class) public void createNewOrder(MerNewOrderDto merNewOrderDto) { Long userId = merNewOrderDto.getBuyUserId(); Date nowTime = new Date(); @@ -2127,6 +2602,9 @@ SysUser sysUser; if (member != null) { sysUser = remoteUserService.getSysUser(member.getUserId()).getData(); + if(member.getBindingFlag()==1&&!member.getRelationShopId().equals(merNewOrderDto.getShopId())){ + throw new ServiceException(AppErrorConstant.USER_BINDING_ERROR); + } } else { //创建新用户 String memberId = IdUtils.simpleUUID(); @@ -2188,10 +2666,6 @@ OrderGoods orderGoods; String orderGoodsId; GoodsFile goodsFile; - BigDecimal cycleMoney = new BigDecimal("0.00"); - BigDecimal experienceMoney = new BigDecimal("0.00"); - BigDecimal serviceMoney = new BigDecimal("0.00"); - BigDecimal goodsMoney = new BigDecimal("0.00"); List<OrderGoods> orderGoodsList = new ArrayList<>(); ConsumerGoods consumerGoods; String consumerGoodsId; @@ -2332,24 +2806,6 @@ consumerGoodsList.add(consumerGoods); } } - - //商户变更计算 - switch (orderGoods.getGoodsType()) { - case 1: - cycleMoney = cycleMoney.add(orderGoods.getGoodsReceivableMoney()); - break; - case 2: - serviceMoney = serviceMoney.add(orderGoods.getGoodsReceivableMoney()); - break; - case 3: - experienceMoney = experienceMoney.add(orderGoods.getGoodsReceivableMoney()); - break; - case 4: - goodsMoney = goodsMoney.add(orderGoods.getGoodsReceivableMoney()); - break; - default: - break; - } } //创建订单 Order order = new Order(); @@ -2401,6 +2857,7 @@ appMemberBindingDto.setBindingType(3); remoteMemberService.updateMemberBinding(appMemberBindingDto); order.setNewMemberFlag(1); + order.setUnbindingFlag(0); } //保存订单和服务 this.save(order); @@ -2415,15 +2872,6 @@ memberTotalChangeDto.setUserId(order.getUserId()); memberTotalChangeDto.setConsumeTime(nowTime); remoteMemberService.changeMemberTotal(memberTotalChangeDto); - //更新商户统计 - /*ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); - shopTotalChangeDto.setShopId(order.getShopId()); - shopTotalChangeDto.setOrderType(1); - shopTotalChangeDto.setCycleMoney(cycleMoney); - shopTotalChangeDto.setServiceMoney(serviceMoney); - shopTotalChangeDto.setExperienceMoney(experienceMoney); - shopTotalChangeDto.setGoodsMoney(goodsMoney); - remoteShopService.changeShopTotal(shopTotalChangeDto);*/ //创建支付记录 PayRecord payRecord = new PayRecord(); payRecord.setDelFlag(0); @@ -2495,7 +2943,7 @@ // 根据用户ID列表获取用户信息 MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); mgtBaseBathDto.setIds(userIdSj.toString()); - List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); + List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(userIdSj.toString()).getData(); Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream() .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); // 遍历订单列表,设置用户信息 @@ -2564,8 +3012,13 @@ BigDecimal zeroBig = new BigDecimal("0.00"); // 遍历MgtMemberOrderPageVoList,获取shopId并添加到set中 for (MgtMemberOrderPageVo mgtMemberOrderPageVo : mgtMemberOrderPageVoList) { - shopId = mgtMemberOrderPageVo.getShopId(); - set.add(shopId.toString()); + if(mgtMemberOrderPageVo.getShopId()!=null){ + if(mgtMemberOrderPageVo.getShopId()!=null){ + shopId = mgtMemberOrderPageVo.getShopId(); + set.add(shopId.toString()); + } + } + } // 将set中的shopId转换为逗号分隔的字符串 String joinedString = String.join(",", set); @@ -2578,10 +3031,15 @@ .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); // 遍历MgtMemberOrderPageVoList,根据shopId获取对应的MgtSimpleShopVo并将其shopName设置到MgtMemberOrderPageVo中 for (MgtMemberOrderPageVo mgtMemberOrderPageVo : mgtMemberOrderPageVoList) { - shopId = mgtMemberOrderPageVo.getShopId(); - mgtMemberOrderPageVo.setShopName(map.get(shopId).getShopName()); - BigDecimal unPaidMoney = mgtMemberOrderPageVo.getReceivableMoney().subtract(mgtMemberOrderPageVo.getPayMoney()); - mgtMemberOrderPageVo.setUnPaidMoney(unPaidMoney == null ? zeroBig : unPaidMoney); + if(mgtMemberOrderPageVo.getShopId()!=null){ + if(mgtMemberOrderPageVo.getShopId()!=null){ + shopId = mgtMemberOrderPageVo.getShopId(); + mgtMemberOrderPageVo.setShopName(map.get(shopId).getShopName()); + BigDecimal unPaidMoney = mgtMemberOrderPageVo.getReceivableMoney().subtract(mgtMemberOrderPageVo.getPayMoney()); + mgtMemberOrderPageVo.setUnPaidMoney(unPaidMoney == null ? zeroBig : unPaidMoney); + } + } + } } // 返回MgtMemberOrderPageVoList @@ -2628,7 +3086,10 @@ BigDecimal zeroBig = new BigDecimal("0.00"); // 遍历列表,获取店铺 ID 和用户 ID for (MgtActivityOrderPageVo mgtActivityOrderPageVo : activityOrderPageVoList) { - shopIdSet.add(mgtActivityOrderPageVo.getShopId()); + if(mgtActivityOrderPageVo.getShopId()!=null){ + shopIdSet.add(mgtActivityOrderPageVo.getShopId()); + + } userIdSet.add(mgtActivityOrderPageVo.getUserId()); } // 将店铺 ID 和用户 ID 转换为逗号分隔的字符串 @@ -2642,12 +3103,16 @@ .collect(Collectors.toMap(MgtSimpleShopVo::getShopId, Function.identity())); mgtBaseBathDto = new MgtBaseBathDto(); mgtBaseBathDto.setIds(userJoinedString); - List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); + List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(userJoinedString).getData(); Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream() .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); // 遍历列表,设置店铺名称、用户名称和未支付金额 for (MgtActivityOrderPageVo mgtActivityOrderPageVo : activityOrderPageVoList) { - mgtActivityOrderPageVo.setShopName(shopMap.get(mgtActivityOrderPageVo.getShopId()).getShopName()); + if(mgtActivityOrderPageVo.getShopId()!=null){ + MgtSimpleShopVo mgtSimpleShopVo = shopMap.get(mgtActivityOrderPageVo.getShopId()); + mgtActivityOrderPageVo.setShopName(null == mgtSimpleShopVo ? "" : mgtSimpleShopVo.getShopName()); + + } if (userMap.get(mgtActivityOrderPageVo.getUserId()) != null) { mgtActivityOrderPageVo.setNickName(userMap.get(mgtActivityOrderPageVo.getUserId()).getNickName()); mgtActivityOrderPageVo.setUserName(userMap.get(mgtActivityOrderPageVo.getUserId()).getRealName()); @@ -2764,7 +3229,7 @@ String userJoinedString = String.join(",", userIdSet.stream().map(Object::toString).collect(Collectors.toList())); MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); mgtBaseBathDto.setIds(userJoinedString); - List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); + List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(userJoinedString).getData(); userMap = simpleMemberVoList.stream() .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); } @@ -2815,8 +3280,6 @@ Order order = this.getById(orderId); // 获取会员信息 Member member = remoteMemberService.getMember(order.getUserId()).getData(); - // 获取商店信息 - Shop shop = remoteShopService.getShop(order.getShopId()).getData(); // 获取订单商品详细信息 List<MgtOrderGoodsDetailVo> orderGoodsDetailVoList = orderGoodsService.listMgtVoByOrderId(orderId); // 设置MgtOrderDetailVo属性 @@ -2846,6 +3309,7 @@ } // 设置订单编号 mgtOrderDetailVo.setOrderNo(order.getOrderNo()); + mgtOrderDetailVo.setOutTradeNo(order.getOutTradeNo()); // 设置订单来源 switch (order.getOrderFrom()) { case 1: @@ -2876,10 +3340,12 @@ mgtOrderDetailVo.setCancelTime(order.getCancelTime()); mgtOrderDetailVo.setOrderRemark(order.getOrderRemark()); mgtOrderDetailVo.setShopId(order.getShopId()); - if (shop != null) { + if (3 == order.getOrderStatus()) { + // 获取商店信息 + Shop shop = remoteShopService.getShop(order.getShopId()).getData(); mgtOrderDetailVo.setShopName(shop.getShopName()); } else { - mgtOrderDetailVo.setShopName("商户已被删除"); + mgtOrderDetailVo.setShopName(""); } mgtOrderDetailVo.setVerifyTime(order.getUseTime()); //获取支付记录 @@ -3458,14 +3924,52 @@ List<Long> userIdList = new ArrayList<>(); if (mgtBasePlatformDto.getUserId() != null) { userIdList.add(mgtBasePlatformDto.getUserId()); - } else { - MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept(); - mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getUserId()); - mgtUserIdByDept = remoteConfigService.getUserIdByDept(mgtUserIdByDept).getData(); - userIdList = mgtUserIdByDept.getUserIdList(); + } + else { + // 如果当前登陆人的可视权限是仅个人 只选择了部门也只能看自己的数据 + SysUser sysUser = SecurityUtils.getSysUser(); + if (sysUser.getDataScope().equals("5")){ + userIdList.add(sysUser.getUserId()); + }else{ + MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept(); + mgtUserIdByDept.setDeptId(mgtBasePlatformDto.getDeptId()); + mgtUserIdByDept = remoteConfigService.getUserIdByDept(mgtUserIdByDept).getData(); + userIdList = mgtUserIdByDept.getUserIdList(); + } } if (!userIdList.isEmpty()) { mgtBasePlatformDto.setUserIdList(userIdList); + } + }else{ + // 没有选择筛选部门和员工 获取当前登陆人的可视权限 + SysUser sysUser = SecurityUtils.getSysUser(); + // 如果当前登陆人是查看个人数据 + Long userId1 = null; + // 如果当前登陆人权限是查看部门数据 + List<Long> userList = new ArrayList<>(); + if (sysUser!=null){ + String dataScope = sysUser.getDataScope(); + if (!sysUser.getUserName().equals("admin")){ + if (org.springframework.util.StringUtils.hasLength(dataScope)){ + switch (dataScope){ + case "3": + // 本部门数据 查询当前登陆人属于哪个部门 查询这个部门下所有员工关联的所有店铺 + MgtUserIdByDept mgtUserIdByDept = new MgtUserIdByDept(); + mgtUserIdByDept.setDeptId(sysUser.getDeptId()); + mgtUserIdByDept = remoteConfigService.getUserIdByDept(mgtUserIdByDept).getData(); + userList = mgtUserIdByDept.getUserIdList(); + mgtBasePlatformDto.setDeptId(sysUser.getDeptId()); + mgtBasePlatformDto.setUserIdList(userList); + case "5": + // 仅个人数据 查询当前登陆人关联店铺下的用户 + userId1 = sysUser.getUserId(); + userList.add(userId1); + mgtBasePlatformDto.setDeptId(sysUser.getDeptId()); + mgtBasePlatformDto.setUserIdList(userList); + break; + } + } + } } } MgtTotalOrderTotalVo mgtTotalOrderTotalVo = new MgtTotalOrderTotalVo(); @@ -3476,6 +3980,7 @@ mgtTotalOrderTotalVo.setCycleTotal(0); mgtTotalOrderTotalVo.setExperienceTotal(0); mgtTotalOrderTotalVo.setServiceTotal(0); + mgtTotalOrderTotalVo.setItemTotal(0); mgtTotalOrderTotalVo.setOrderMoney(new BigDecimal("0")); mgtTotalOrderTotalVo.setOnlineMoney(new BigDecimal("0")); mgtTotalOrderTotalVo.setOfflineMoney(new BigDecimal("0")); @@ -3483,6 +3988,7 @@ mgtTotalOrderTotalVo.setCycleMoney(new BigDecimal("0")); mgtTotalOrderTotalVo.setExperienceMoney(new BigDecimal("0")); mgtTotalOrderTotalVo.setServiceMoney(new BigDecimal("0")); + mgtTotalOrderTotalVo.setItemMoney(new BigDecimal("0")); mgtTotalOrderTotalVo.setOrderTotalKey(new String[0]); mgtTotalOrderTotalVo.setOrderTotalValue(new Integer[0]); mgtTotalOrderTotalVo.setOrderMoneyValue(new BigDecimal[0]); @@ -3490,6 +3996,7 @@ mgtTotalOrderTotalVo.setGoodsTypeMoneyList(Lists.newArrayList()); mgtTotalOrderTotalVo.setGoodsRankList(Lists.newArrayList()); mgtTotalOrderTotalVo.setOrderFromRankList(Lists.newArrayList()); + List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData(); if (mgtBasePlatformDto.getUserId() != null || StringUtils.isNotBlank(mgtBasePlatformDto.getShopProvinceCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopCityCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopAreaCode())) { if(shopIdList==null||shopIdList.isEmpty()){ @@ -3506,7 +4013,7 @@ mgtTotalOrderTotalVo.setOrderTotal(totalOrderTotalVo.getOrderTotal()); mgtTotalOrderTotalVo.setOnlineTotal(totalOrderTotalVo.getOnlineTotal()); mgtTotalOrderTotalVo.setOfflineTotal(totalOrderTotalVo.getOfflineTotal()); - mgtTotalOrderTotalVo.setActivityTotal(0); + mgtTotalOrderTotalVo.setActivityTotal(totalOrderTotalVo.getActivityTotal()); mgtTotalOrderTotalVo.setOrderMoney(totalOrderTotalVo.getOrderMoney()); mgtTotalOrderTotalVo.setOnlineMoney(totalOrderTotalVo.getOnlineMoney()); mgtTotalOrderTotalVo.setOfflineMoney(totalOrderTotalVo.getOfflineMoney()); @@ -3519,6 +4026,8 @@ mgtTotalOrderTotalVo.setCycleMoney(BigDecimal.ZERO); mgtTotalOrderTotalVo.setServiceTotal(0); mgtTotalOrderTotalVo.setServiceMoney(BigDecimal.ZERO); + mgtTotalOrderTotalVo.setItemTotal(0); + mgtTotalOrderTotalVo.setItemMoney(BigDecimal.ZERO); mgtTotalOrderTotalVo.setExperienceTotal(0); mgtTotalOrderTotalVo.setExperienceMoney(BigDecimal.ZERO); if (MgtMapIntTotalVoGoodsType != null && MgtMapIntTotalVoGoodsType.size() > 0) { @@ -3555,6 +4064,8 @@ } else if (MgtMapIntTotalVoGoodsType.get(i).getMapKey().equals("4")) { mgtMapIntTotalVo.setMapKey("单品"); mgtMapBigTotalVo.setMapKey("单品"); + mgtTotalOrderTotalVo.setItemTotal(mgtTotalOrderTotalVo.getItemTotal() + MgtMapIntTotalVoGoodsType.get(i).getMapValueFirst()); + mgtTotalOrderTotalVo.setItemMoney(mgtTotalOrderTotalVo.getItemMoney().add(MgtMapIntTotalVoGoodsType.get(i).getMapValueSecond())); noGoods = false; } goodsTypeTotalList.add(mgtMapIntTotalVo); @@ -3658,9 +4169,6 @@ */ @Override public MgtPlTotalActivityTotalVo getPlTotalActivityTotal(MgtBasePlatformDto mgtBasePlatformDto) { - if(mgtBasePlatformDto.getActivityFrom()!=null&&mgtBasePlatformDto.getActivityFrom() == 2){ - return new MgtPlTotalActivityTotalVo(); - } MgtPlTotalActivityTotalVo totalActivityTotalVo = new MgtPlTotalActivityTotalVo(); totalActivityTotalVo.setOrderTotal(0); totalActivityTotalVo.setCycleTotal(0); @@ -3688,7 +4196,16 @@ totalActivityTotalVo.setJoinMemberTotalValue(new Integer[0]); totalActivityTotalVo.setGetMemberTotalKey(new String[0]); totalActivityTotalVo.setGetMemberTotalValue(new Integer[0]); + //店铺活动返回空 + if(mgtBasePlatformDto.getActivityFrom()!=null&&mgtBasePlatformDto.getActivityFrom()==2){ + return totalActivityTotalVo; + } List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData(); + if (StringUtils.isNotBlank(mgtBasePlatformDto.getShopProvinceCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopCityCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopAreaCode())) { + if(shopIdList==null||shopIdList.isEmpty()){ + return totalActivityTotalVo; + } + } if(mgtBasePlatformDto.getShopId()!=null){ shopIdList = new ArrayList<>(); shopIdList.add(mgtBasePlatformDto.getShopId()); @@ -3798,26 +4315,6 @@ totalActivityTotalVo.setGoodsTypeTotalList(goodsTypeTotalList); totalActivityTotalVo.setGoodsTypeMoneyList(goodsTypeMoneyList); } - //日期全部时固定为5天 - if(StringUtils.isBlank(mgtBasePlatformDto.getStartDate())){ - mgtBasePlatformDto.setEndDate(DateUtils.getDate()); - mgtBasePlatformDto.setStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4))); - } - //获取订单分布 - List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listPlTotalActivityTotal(mgtBasePlatformDto); - if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) { - String[] orderTotalKey = new String[MgtMapIntTotalVos.size()]; - Integer[] orderTotalValue = new Integer[MgtMapIntTotalVos.size()]; - BigDecimal[] orderMoneyValue = new BigDecimal[MgtMapIntTotalVos.size()]; - for (int i = 0; i < MgtMapIntTotalVos.size(); i++) { - orderTotalKey[i] = MgtMapIntTotalVos.get(i).getMapKey(); - orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst(); - orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond(); - } - totalActivityTotalVo.setOrderTotalKey(orderTotalKey); - totalActivityTotalVo.setOrderTotalValue(orderTotalValue); - totalActivityTotalVo.setOrderMoneyValue(orderMoneyValue); - } HashSet<String> set = new HashSet<>(); // 遍历MgtMemberOrderPageVoList,获取shopId并添加到set中 for (Long shopId : mgtBasePlatformDto.getShopIdList()) { @@ -3870,6 +4367,27 @@ List<Long> userIdList = remoteMemberService.listUserIdByAgeType(mgtBasePlatformDto.getAgeType()).getData(); mgtBasePlatformDto.setUserIdList(userIdList); } + //日期全部时固定为5天 + if(StringUtils.isBlank(mgtBasePlatformDto.getStartDate())){ + mgtBasePlatformDto.setEndDate(DateUtils.getDate()); + mgtBasePlatformDto.setStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4))); + } + //获取订单分布 + List<MgtMapTotalPlusVo> MgtMapIntTotalVos = orderMapper.listPlTotalActivityTotal(mgtBasePlatformDto); + if (MgtMapIntTotalVos != null && MgtMapIntTotalVos.size() > 0) { + String[] orderTotalKey = new String[MgtMapIntTotalVos.size()]; + Integer[] orderTotalValue = new Integer[MgtMapIntTotalVos.size()]; + BigDecimal[] orderMoneyValue = new BigDecimal[MgtMapIntTotalVos.size()]; + for (int i = 0; i < MgtMapIntTotalVos.size(); i++) { + orderTotalKey[i] = MgtMapIntTotalVos.get(i).getMapKey(); + orderTotalValue[i] = MgtMapIntTotalVos.get(i).getMapValueFirst(); + orderMoneyValue[i] = MgtMapIntTotalVos.get(i).getMapValueSecond(); + } + totalActivityTotalVo.setOrderTotalKey(orderTotalKey); + totalActivityTotalVo.setOrderTotalValue(orderTotalValue); + totalActivityTotalVo.setOrderMoneyValue(orderMoneyValue); + } + //参与人数 2023-09-06 另开接口 /*List<MgtMapIntTotalVo> joinList = orderMapper.getMgtActivityMemberTotal(mgtBasePlatformDto); // 将查询结果转为Map @@ -3921,9 +4439,18 @@ @Override public MgtPlTotalActivityTotalVo getPlTotalActivityJoinMemberTotal(MgtBasePlatformDto mgtBasePlatformDto) { - if(mgtBasePlatformDto.getActivityFrom()!=null&&mgtBasePlatformDto.getActivityFrom() == 2){ - return new MgtPlTotalActivityTotalVo(); + //店铺活动返回空 + MgtPlTotalActivityTotalVo totalActivityTotalVo = new MgtPlTotalActivityTotalVo(); + totalActivityTotalVo.setJoinMemberTotalKey(new String[0]); + totalActivityTotalVo.setJoinMemberTotalValue(new Integer[0]); + totalActivityTotalVo.setGetMemberTotalKey(new String[0]); + totalActivityTotalVo.setGetMemberTotalValue(new Integer[0]); + if(mgtBasePlatformDto.getActivityFrom()!=null&&mgtBasePlatformDto.getActivityFrom()==2){ + return totalActivityTotalVo; } + /*if(mgtBasePlatformDto.getActivityType()!=null&&mgtBasePlatformDto.getActivityType()!=1){ + return new MgtPlTotalActivityTotalVo(); + }*/ //获取需要关联的用户id集合 /*if (mgtBasePlatformDto.getDeptId() != null) { List<Long> userIdList = new ArrayList<>(); @@ -3939,22 +4466,34 @@ mgtBasePlatformDto.setUserIdList(userIdList); } }*/ - if(mgtBasePlatformDto.getAgeType()!=null){ - List<Long> userIdList = remoteMemberService.listUserIdByAgeType(mgtBasePlatformDto.getAgeType()).getData(); - mgtBasePlatformDto.setUserIdList(userIdList); - } + List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData(); + log.info("shopIdList1-----"+shopIdList.toString()); + log.debug("shopIdList1-----"+shopIdList.toString()); + if (StringUtils.isNotBlank(mgtBasePlatformDto.getShopProvinceCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopCityCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopAreaCode())) { + log.info("shopIdList2-----"+shopIdList.toString()); + log.debug("shopIdList2-----"+shopIdList.toString()); + if(shopIdList==null||shopIdList.isEmpty()){ + return totalActivityTotalVo; + } + } if(mgtBasePlatformDto.getShopId()!=null){ shopIdList = new ArrayList<>(); shopIdList.add(mgtBasePlatformDto.getShopId()); } mgtBasePlatformDto.setShopIdList(shopIdList); - MgtPlTotalActivityTotalVo totalActivityTotalVo = new MgtPlTotalActivityTotalVo(); + if(mgtBasePlatformDto.getAgeType()!=null){ + List<Long> userIdList = remoteMemberService.listUserIdByAgeType(mgtBasePlatformDto.getAgeType()).getData(); + log.info("userIdList-----"+userIdList.toString()); + log.debug("userIdList-----"+userIdList.toString()); + mgtBasePlatformDto.setUserIdList(userIdList); + } //日期全部时固定为5天 if(StringUtils.isBlank(mgtBasePlatformDto.getStartDate())){ mgtBasePlatformDto.setEndDate(DateUtils.getDate()); mgtBasePlatformDto.setStartDate(DateUtils.parseDateToStr("yyyy-MM-dd",DateUtils.addDays(new Date(),-4))); } + log.info("mgtBasePlatformDto-----"+mgtBasePlatformDto.toString()); //参与人数 List<MgtMapIntTotalVo> joinList = orderMapper.getMgtActivityMemberTotal(mgtBasePlatformDto); // 将查询结果转为Map @@ -3985,9 +4524,18 @@ @Override public MgtPlTotalActivityTotalVo getPlTotalActivityGetMemberTotal(MgtBasePlatformDto mgtBasePlatformDto) { - if(mgtBasePlatformDto.getActivityFrom()!=null&&mgtBasePlatformDto.getActivityFrom() == 2){ - return new MgtPlTotalActivityTotalVo(); + //店铺活动返回空 + MgtPlTotalActivityTotalVo totalActivityTotalVo = new MgtPlTotalActivityTotalVo(); + totalActivityTotalVo.setJoinMemberTotalKey(new String[0]); + totalActivityTotalVo.setJoinMemberTotalValue(new Integer[0]); + totalActivityTotalVo.setGetMemberTotalKey(new String[0]); + totalActivityTotalVo.setGetMemberTotalValue(new Integer[0]); + if(mgtBasePlatformDto.getActivityFrom()!=null&&mgtBasePlatformDto.getActivityFrom()==2){ + return totalActivityTotalVo; } + /*if(mgtBasePlatformDto.getActivityType()!=null&&mgtBasePlatformDto.getActivityType()!=1){ + return new MgtPlTotalActivityTotalVo(); + }*/ //获取需要关联的用户id集合 /*if (mgtBasePlatformDto.getDeptId() != null) { List<Long> userIdList = new ArrayList<>(); @@ -4003,17 +4551,21 @@ mgtBasePlatformDto.setUserIdList(userIdList); } }*/ - if(mgtBasePlatformDto.getAgeType()!=null){ - List<Long> userIdList = remoteMemberService.listUserIdByAgeType(mgtBasePlatformDto.getAgeType()).getData(); - mgtBasePlatformDto.setUserIdList(userIdList); - } List<Long> shopIdList = remoteShopService.listShopIdByPlTotal(mgtBasePlatformDto).getData(); + if (StringUtils.isNotBlank(mgtBasePlatformDto.getShopProvinceCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopCityCode()) || StringUtils.isNotBlank(mgtBasePlatformDto.getShopAreaCode())) { + if(shopIdList==null||shopIdList.isEmpty()){ + return totalActivityTotalVo; + } + } if(mgtBasePlatformDto.getShopId()!=null){ shopIdList = new ArrayList<>(); shopIdList.add(mgtBasePlatformDto.getShopId()); } mgtBasePlatformDto.setShopIdList(shopIdList); - MgtPlTotalActivityTotalVo totalActivityTotalVo = new MgtPlTotalActivityTotalVo(); + if(mgtBasePlatformDto.getAgeType()!=null){ + List<Long> userIdList = remoteMemberService.listUserIdByAgeType(mgtBasePlatformDto.getAgeType()).getData(); + mgtBasePlatformDto.setUserIdList(userIdList); + } //日期全部时固定为5天 if(StringUtils.isBlank(mgtBasePlatformDto.getStartDate())){ mgtBasePlatformDto.setEndDate(DateUtils.getDate()); @@ -4600,7 +5152,7 @@ String userJoinedString = String.join(",", userIdSet.stream().map(Object::toString).collect(Collectors.toList())); MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); mgtBaseBathDto.setIds(userJoinedString); - List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); + List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(userJoinedString).getData(); userMap = simpleMemberVoList.stream() .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); } @@ -4660,6 +5212,9 @@ try { redissonLock.lock(30, TimeUnit.SECONDS); Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId()); + if(null == surpNum){ + surpNum = 0; + } redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId(), surpNum + orderGoods.getBuyNum()); } finally { redissonLock.unlock(); @@ -4710,12 +5265,15 @@ @Override @Transactional @GlobalTransactional(rollbackFor = Exception.class) - public void payBack(PartnerTransactionsResult transaction) { + public void payBack(PartnerTransactionsResult transaction, BigDecimal feeAmount) { log.info("订单支付回调---"+transaction.toString()); // Order order = this.getById(orderId); // 更新订单状态 outTradeNo String outTradeNo = transaction.getOutTradeNo(); Order order = this.getByOutTradeNo(outTradeNo); + if(order.getOrderStatus() != 1){ + return; + } String orderId = order.getOrderId(); order.setOrderStatus(2); order.setPayTime(new Date()); @@ -4761,12 +5319,8 @@ goodsTotalChangeDto.setChangeType(1); goodsTotalChangeDto.setChangeNum(orderGoods.getBuyNum()); goodsTotalChangeDto.setMoney(orderGoods.getGoodsReceivableMoney()); - Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(), orderGoods.getGoodsId()); - if (bugGoodsNum == null || bugGoodsNum < 1) { - goodsTotalChangeDto.setPersonNum(1); - }else{ - goodsTotalChangeDto.setPersonNum(0); - } + Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(orderGoods.getGoodsId()); + goodsTotalChangeDto.setPersonNum(bugGoodsNum); goodsTotalChangeDtoList.add(goodsTotalChangeDto); } //更新商品统计 @@ -4783,17 +5337,19 @@ // 初始化会员统计信息 MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); memberTotalChangeDto.setUserId(order.getUserId()); - // 如果存在积分兑换比例,则计算积分 - if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) { + // 如果存在积分兑换比例,则计算积分 2023-09-14改为核销后获取积分 + /*if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) { Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL); BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue); BigDecimal integralBig = moneyValueBig.multiply(order.getPayMoney()).setScale(0,BigDecimal.ROUND_HALF_UP); Integer integral = Integer.valueOf(integralBig.toString()); - memberTotalChangeDto.setChangeIntegral(integral); - memberTotalChangeDto.setTypeIntegral(1); - memberTotalChangeDto.setOrderId(orderId); - memberTotalChangeDto.setOrderNo(order.getOrderNo()); - } + if(integral>0){ + memberTotalChangeDto.setChangeIntegral(integral); + memberTotalChangeDto.setTypeIntegral(1); + memberTotalChangeDto.setOrderId(orderId); + memberTotalChangeDto.setOrderNo(order.getOrderNo()); + } + }*/ // 设置会员支付金额和支付时间 memberTotalChangeDto.setPayMoney(order.getPayMoney()); memberTotalChangeDto.setPayTime(new Date()); @@ -4823,6 +5379,7 @@ activityTotalChangeDto.setChangeNum(1); activityTotalChangeDto.setMoney(order.getPayMoney()); Integer userActivityNum = orderMapper.countUserActivityByActivity(order.getUserId(), order.getActivityId()); + //判断用户是否下过单 如果只有当前订单则为1 if (userActivityNum == 1) { activityTotalChangeDto.setPersonNum(1); } else { @@ -4830,8 +5387,6 @@ } activityTotalChangeDto.setUserId(order.getUserId()); remoteActivityService.changeActivityTotal(activityTotalChangeDto); - - //活动订单进行分账 /*ProfitSharingApplyRequest request=new ProfitSharingApplyRequest(); request.setAppid(this.appId); @@ -4840,8 +5395,7 @@ profitsSharingService.applyProfitSharing(request);*/ } //修改支付记录生成支付记录 - orderPaymentService.updatePaySuccess(transaction.getOutTradeNo(), transaction.getTransactionId()); - + orderPaymentService.updatePaySuccess(transaction.getOutTradeNo(), feeAmount, transaction.getTransactionId()); PayRecord payRecord = new PayRecord(); payRecord.setDelFlag(0); payRecord.setOrderId(orderId); @@ -4849,6 +5403,9 @@ payRecord.setPayTime(order.getPayTime()); payRecord.setPayType(1); payRecordService.save(payRecord); + //删除超时取消延时任务 + redisService.deleteObject(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode() + "-" + orderId); + remoteConfigService.deleteDelayTask(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode()+"-"+orderId); } @Override @@ -4919,6 +5476,9 @@ try { redissonLock.lock(30, TimeUnit.SECONDS); Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId()); + if(null == surpNum){ + surpNum = 0; + } redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId(), surpNum + orderGoods.getBuyNum()); } finally { redissonLock.unlock(); @@ -4969,12 +5529,8 @@ goodsTotalChangeDto.setChangeType(2); goodsTotalChangeDto.setChangeNum(orderGoods.getBuyNum()); goodsTotalChangeDto.setMoney(orderGoods.getGoodsReceivableMoney()); - Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(order.getUserId(), orderGoods.getGoodsId()); - if (bugGoodsNum == null || bugGoodsNum <= orderGoods.getBuyNum()) { - goodsTotalChangeDto.setPersonNum(1); - }else{ - goodsTotalChangeDto.setPersonNum(0); - } + Integer bugGoodsNum = orderMapper.countUserBuyGoodsNum(orderGoods.getGoodsId()); + goodsTotalChangeDto.setPersonNum(bugGoodsNum); goodsTotalChangeDtoList.add(goodsTotalChangeDto); } remoteGoodsService.changeGoodsTotal(goodsTotalChangeDtoList); @@ -4995,7 +5551,7 @@ // 初始化会员统计信息 MemberTotalChangeDto memberTotalChangeDto = new MemberTotalChangeDto(); memberTotalChangeDto.setUserId(order.getUserId()); - // 如果存在积分兑换比例,则计算积分 + // 如果存在积分兑换比例,则计算积分 2023-09-14改为核销后获取积分 /*if (redisService.hasKey(SecurityConstant.PAY_MONEY_INTEGRAL)) { Integer moneyValue = redisService.getCacheObject(SecurityConstant.PAY_MONEY_INTEGRAL); BigDecimal moneyValueBig = BigDecimal.valueOf(moneyValue); @@ -5030,10 +5586,11 @@ activityTotalChangeDto.setRefundNum(1); activityTotalChangeDto.setMoney(order.getPayMoney()); Integer userActivityNum = orderMapper.countUserActivityByActivity(order.getUserId(), order.getActivityId()); + //判断用户是否还有活动订单 无则减少人数 if (userActivityNum > 0) { - activityTotalChangeDto.setPersonNum(1); - } else { activityTotalChangeDto.setPersonNum(0); + } else { + activityTotalChangeDto.setPersonNum(1); } activityTotalChangeDto.setUserId(order.getUserId()); remoteActivityService.changeActivityTotal(activityTotalChangeDto); @@ -5045,7 +5602,9 @@ if(BigDecimal.ZERO.compareTo(onlinePayMoney) < 0){ log.info("订单支付金额大于0,可发起退款"); // 订单支付金额大于0,可发起退款 - orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund); +// orderWxApplyRefund(orderId, refundId, onlinePayMoney, orderRefund); + // 订单支付金额大于0,可发起退款 todo 修改渠道(汇付天下) + orderWxApplyRefund1(orderId, refundId, onlinePayMoney, orderRefund); } orderRefund.setRefundStatus(1); @@ -5098,6 +5657,66 @@ paymentMessageService.savePaymentMessage("3", orderId, refundRequestJson, refundResponseJson); } catch (WxPayException e) { + throw new ServiceException(e.getMessage()); + } + } + + + + /** + * 申请退款API + */ + private void orderWxApplyRefund1(String orderId, String outRefundNo, BigDecimal payMoney, OrderRefund orderRefund){ + try { + // 创建支付订单 + OrderPayment orderPayment = orderPaymentService.getByOrderId(orderId); + if (null == orderPayment) { + return; + } + + log.info("调用微信退款---发起退款"); + + String subMchId = orderPayment.getSubMchId(); +// WxPayConfig config = wxService.getConfig(); + + RefundsRequest request = new RefundsRequest(); +// request.setSpAppid(config.getAppId()); + request.setSubMchid(subMchId); + request.setTransactionId(orderPayment.getTransactionId()); + request.setOutRefundNo(outRefundNo); + request.setReason("用户取消订单"); + // 订单金额 + int total = orderPayment.getPayMoney().multiply(new BigDecimal(100)).intValue(); + + RefundsRequest.Amount amount = RefundsRequest.Amount.builder().refund(total).total(total).currency("CNY").build(); + request.setAmount(amount); + request.setNotifyUrl(callbackPath + "/order/app/notify/wechatPaymentRefundCallback"); + +// RefundsResult result = wxService.getEcommerceService().refunds(request); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String org_req_date = sdf.format(orderPayment.getCreateTime()); + String outTradeNo = orderPayment.getOutTradeNo(); + R<String> r = HuiFuTianXiaUtil.weixinPaymentRefund(outRefundNo, orderPayment.getPayMoney().doubleValue(), org_req_date, outTradeNo, request.getNotifyUrl()); + if(r.getCode() != 200){ + throw new ServiceException(r.getMsg()); + } + + // 微信退款id + orderRefund.setWxRefundId(r.getData()); + + // 请求参数 + Gson gson = new Gson(); + String refundRequestJson = gson.toJson(request); + // 返回参数 +// String refundResponseJson = gson.toJson(result); + +// log.info("调用微信退款返回参数---{}", refundResponseJson); + + // 保存支付订单统一下单日志 +// paymentMessageService.savePaymentMessage("3", orderId, refundRequestJson, refundResponseJson); + + } catch (Exception e) { throw new ServiceException(e.getMessage()); } } @@ -5593,6 +6212,9 @@ try { redissonLock.lock(30, TimeUnit.SECONDS); Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId()); + if(null == surpNum){ + surpNum = 0; + } redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + order.getActivityId() + "-" + orderGoods.getGoodsId(), surpNum + orderGoods.getBuyNum()); } finally { redissonLock.unlock(); @@ -5653,33 +6275,39 @@ */ @Override public List<MerOrderPageVo> pageMerMemberPayOrder(Page page,MerMemberNoClearOrderDto merOrderPageDto){ + // 获取订单列表 List<MerOrderPageVo> merOrderPageVoList = orderMapper.pageMerMemberPayOrder(page, merOrderPageDto); + // 如果订单列表不为空 if (merOrderPageVoList != null && !merOrderPageVoList.isEmpty()) { Long userId; - Member member; - Integer orderFrom; - String orderFromDesc; BigDecimal zeroBig = new BigDecimal("0.00"); StringJoiner userIdSj = new StringJoiner(","); + // 遍历订单列表 for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) { userId = merOrderPageVo.getUserId(); userIdSj.add(userId.toString()); - if(merOrderPageVo.getUnPaidMoney().compareTo(zeroBig)<0){ + // 如果未支付金额小于零,则设置为零 + if (merOrderPageVo.getUnPaidMoney().compareTo(zeroBig) < 0) { merOrderPageVo.setUnPaidMoney(zeroBig); } } + // 获取用户列表 MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); mgtBaseBathDto.setIds(userIdSj.toString()); - List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); + List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(userIdSj.toString()).getData(); + // 将用户列表转换为Map,以便根据用户ID快速查找用户信息 Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream() .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); + // 遍历订单列表 for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) { - if(merOrderPageVo.getUserId()!=null&&userMap.get(merOrderPageVo.getUserId())!=null){ + // 如果订单的用户ID不为空,并且用户Map中存在对应的用户信息 + if (merOrderPageVo.getUserId() != null && userMap.get(merOrderPageVo.getUserId()) != null) { + // 设置订单的用户名、昵称和手机号 merOrderPageVo.setUserName(userMap.get(merOrderPageVo.getUserId()).getRealName()); merOrderPageVo.setNickName(userMap.get(merOrderPageVo.getUserId()).getNickName()); merOrderPageVo.setUserMobile(userMap.get(merOrderPageVo.getUserId()).getUserMobile()); - }else{ - log.debug("订单merOrderPageVo"+merOrderPageVo.getOrderId()+"缺少用户"); + } else { + log.debug("订单merOrderPageVo" + merOrderPageVo.getOrderId() + "缺少用户"); } } } @@ -5735,4 +6363,34 @@ public MerMemberSimpleTotalVo getMerMemberSimpleTotalVo(MerBaseDto merBaseDto){ return orderMapper.getMerMemberSimpleTotalVo(merBaseDto); } + + @Override + public ProfitSharingResult queryBill(String orderId) throws WxPayException { + OrderPayment orderPayment = orderPaymentService.getByOrderId(orderId); + ProfitSharing profitSharing = profitSharingService.getByOrderId(orderId); + ProfitSharingQueryRequest request = new ProfitSharingQueryRequest(); + request.setSubMchid("1650744551"); + request.setTransactionId(orderPayment.getTransactionId()); + request.setOutOrderNo(profitSharing.getShareId()); + ProfitSharingResult profitSharingResult = wxService.getEcommerceService().queryProfitSharing(request); + return profitSharingResult; + } + + @Override + public List<String> getActivityOrderGoods(String activityId) { + List<Order> orders = this.baseMapper.selectList(new QueryWrapper<Order>() + .eq("del_flag", 0) + .in("order_status", Arrays.asList(1, 2, 3)) + .eq("activity_id", activityId) + ); + if(orders.size() > 0){ + List<String> collect = orders.stream().map(Order::getOrderId).collect(Collectors.toList()); + List<OrderGoods> list = orderGoodsService.list(new QueryWrapper<OrderGoods>() + .eq("del_flag", 0) + .in("order_id", collect) + ); + return list.stream().map(OrderGoods::getGoodsId).collect(Collectors.toList()); + } + return new ArrayList<>(); + } } -- Gitblit v1.7.1