Browse Source

Merge remote-tracking branch 'origin/master'

BKGin 9 months ago
parent
commit
2c995b7c47

+ 18 - 4
yiqi-common/src/main/java/com/yiqi/recharge/domain/dto/BillMstrOrderDTO.java

@@ -18,7 +18,7 @@ import java.math.BigDecimal;
 public class BillMstrOrderDTO {
 
     /**
-     * 订单类型,详见枚举OrderType
+     * 订单类型, 详见枚举 orderType
      */
     private String orderType;
 
@@ -28,12 +28,16 @@ public class BillMstrOrderDTO {
     private String orderNo;
 
 
-    /** 账单标题 */
+    /**
+     * 账单标题
+     */
     @Excel(name = "充值卡号")
     @ApiModelProperty("充值卡号")
     private String rechargeCardNo;
 
-    /** 支付总金额 */
+    /**
+     * 支付总金额
+     */
     @Excel(name = "支付总金额")
     @ApiModelProperty("支付总金额")
     private BigDecimal payTotalAmount;
@@ -66,9 +70,19 @@ public class BillMstrOrderDTO {
      */
     private Long appUserId;
 
-
+    /**
+     * 扣款门店
+     */
     private Long storeId;
 
+    /**
+     * 用户绑定门店
+     */
+    private Long useBindStoreId;
+
+
+    private Integer isDirectRecharge;
+
     /**
      * 备注
      */

+ 0 - 3
yiqi-common/src/main/java/com/yiqi/recharge/service/IRechargePasswordCardService.java

@@ -39,8 +39,6 @@ public interface IRechargePasswordCardService extends IService<RechargePasswordC
      */
     public void deductBalance(ConsumeOrderDTO consumeOrderDTO);
 
-    //<editor-folder desc="基础函数">
-
     public List<RechargePasswordCardQueryVO> selectRechargePasswordCardList(PageVO pageVO);
 
     public List<RechargePasswordCardQueryVO> selectRechargePasswordCardList(MemberCardQueryDTO memberCardQueryDTO);
@@ -183,5 +181,4 @@ public interface IRechargePasswordCardService extends IService<RechargePasswordC
      */
     public Boolean orderRefundByBalance(String orderSn, BigDecimal refundAmount);
 
-    //</editor-folder>
 }

+ 6 - 0
yiqi-core/src/main/java/com/yiqi/app/service/impl/AppUserBillMstrServiceImpl.java

@@ -102,6 +102,12 @@ public class AppUserBillMstrServiceImpl extends ServiceImpl<AppUserBillMstrMappe
         appUserBillMstr.setSourceType(SourceType.STORE.getCode());
         appUserBillMstr.setContent(billMstrOrderDTO.getRemark());
         appUserBillMstr.setRechargeCardNo(billMstrOrderDTO.getRechargeCardNo());
+        if(billMstrOrderDTO.getUseBindStoreId().equals(billMstrOrderDTO.getStoreId())){
+            appUserBillMstr.setIsOtherStore(SysBoolType.NO.getCode());
+        }else{
+            appUserBillMstr.setIsOtherStore(SysBoolType.YES.getCode());
+            appUserBillMstr.setOtherStoreOrgId(billMstrOrderDTO.getUseBindStoreId());
+        }
         switch (EnumUtils.getEnumByType(billMstrOrderDTO.getOrderType(), OrderType.class)) {
             case cloth: {
                 appUserBillMstr.setTitle("洗衣订单");

+ 30 - 26
yiqi-core/src/main/java/com/yiqi/core/service/impl/SettlementManageBillServiceImpl.java

@@ -16,12 +16,8 @@ import com.yiqi.core.domain.SettlementManageStore;
 import com.yiqi.core.domain.dto.SettlementBillAddDTO;
 import com.yiqi.core.service.ISettlementManageFactoryService;
 import com.yiqi.core.service.ISettlementManageStoreService;
-import com.yiqi.order.domain.OrderCloth;
-import com.yiqi.order.domain.OrderClothItem;
-import com.yiqi.order.domain.OrderGoods;
-import com.yiqi.order.service.IOrderClothItemService;
-import com.yiqi.order.service.IOrderClothService;
-import com.yiqi.order.service.IOrderGoodsService;
+import com.yiqi.order.domain.*;
+import com.yiqi.order.service.*;
 import com.yiqi.recharge.domain.RechargePasswordCard;
 import com.yiqi.recharge.service.IRechargePasswordCardService;
 import com.yiqi.settlement.domain.SettlementFactoryRate;
@@ -70,6 +66,10 @@ public class SettlementManageBillServiceImpl extends ServiceImpl<SettlementManag
     @Autowired
     private IAppUserBillMstrService appUserBillMstrService;
     @Autowired
+    private IOrderPayInfoService orderPayInfoService;
+    @Autowired
+    private IOrderRefundInfoService orderRefundInfoService;
+    @Autowired
     private ISysSettlementRateService sysSettlementRateService;
     @Autowired
     private ISysConfigService configService;
@@ -163,7 +163,7 @@ public class SettlementManageBillServiceImpl extends ServiceImpl<SettlementManag
         Map<Long, List<SysSettlementRate>> storeRateMap = storeRateList.stream().collect(Collectors.groupingBy(SysSettlementRate::getOrgId));
         List<SettlementManageStore> settlementManageStoreList = new ArrayList<>();
 
-        SettlementStoreRate settlementStoreRate =  settlementStoreRateService.getByStoreId(sysStore.getId(), settlementManageBill.getBeginTime());
+        SettlementStoreRate settlementStoreRate = settlementStoreRateService.getByStoreId(sysStore.getId(), settlementManageBill.getBeginTime());
         if (settlementStoreRate == null) {
             SettlementManageStore settlementManageStore = new SettlementManageStore();
             this.buildStoreSettlementInfo(settlementManageStore, settlementManageBill, sysStore);
@@ -176,7 +176,7 @@ public class SettlementManageBillServiceImpl extends ServiceImpl<SettlementManag
         this.buildStoreSettlementInfo(settlementManageStore, settlementManageBill, sysStore);
         // 查询门店有效充值会员卡
         List<RechargePasswordCard> rechargePasswordCardList = rechargePasswordCardService.list(new QueryWrapper<RechargePasswordCard>().lambda()
-                        .eq(RechargePasswordCard::getUseBindStoreId, sysStore.getId())
+                .eq(RechargePasswordCard::getUseBindStoreId, sysStore.getId())
                 .eq(RechargePasswordCard::getRechargeStatus, RechargeStatusType.HAS_USE.getCode()));
 
         // 查询门店未开卡
@@ -185,21 +185,17 @@ public class SettlementManageBillServiceImpl extends ServiceImpl<SettlementManag
                 .eq(RechargePasswordCard::getRechargeStoreId, sysStore.getId()));
 
         // 查询门店微信消费记录
-        List<AppUserBillMstr> wechatBillMstrList = appUserBillMstrService.list(new QueryWrapper<AppUserBillMstr>().lambda()
-                .ne(AppUserBillMstr::getIsRefund, SysBoolType.YES.getCode())
-                .eq(AppUserBillMstr::getSourceType, SourceType.STORE.getCode())
-                .eq(AppUserBillMstr::getOrgId, sysStore.getId())
-                .eq(AppUserBillMstr::getPayType, PayType.WECHAT.getCode())
-                .ge(AppUserBillMstr::getCreateTime, settlementManageBill.getBeginTime())
-                .lt(AppUserBillMstr::getCreateTime, DateUtils.addDays(settlementManageBill.getEndTime(), 1)));
-        // 查询门店支付宝消费记录
-        List<AppUserBillMstr> alipayBillMstrList = appUserBillMstrService.list(new QueryWrapper<AppUserBillMstr>().lambda()
-                .ne(AppUserBillMstr::getIsRefund, SysBoolType.YES.getCode())
-                .eq(AppUserBillMstr::getSourceType, SourceType.STORE.getCode())
-                .eq(AppUserBillMstr::getOrgId, sysStore.getId())
-                .eq(AppUserBillMstr::getPayType, PayType.ALIPAY.getCode())
-                .ge(AppUserBillMstr::getCreateTime, settlementManageBill.getBeginTime())
-                .lt(AppUserBillMstr::getCreateTime, DateUtils.addDays(settlementManageBill.getEndTime(), 1)));
+        List<OrderPayInfo> payInfoList = orderPayInfoService.list(new QueryWrapper<OrderPayInfo>().lambda()
+                .eq(OrderPayInfo::getStoreId, sysStore.getId())
+                .eq(OrderPayInfo::getPayStatus, PayStatus.HAS_PAY.getCode())
+                .ge(OrderPayInfo::getCreateTime, settlementManageBill.getBeginTime())
+                .lt(OrderPayInfo::getCreateTime, DateUtils.addDays(settlementManageBill.getEndTime(), 1)));
+        // 查询门店微信消费记录
+        List<OrderRefundInfo> refundInfoList = orderRefundInfoService.list(new QueryWrapper<OrderRefundInfo>().lambda()
+                .eq(OrderRefundInfo::getStoreId, sysStore.getId())
+                .eq(OrderRefundInfo::getRefundStatus, PayStatus.HAS_PAY.getCode())
+                .ge(OrderRefundInfo::getCreateTime, settlementManageBill.getBeginTime())
+                .lt(OrderRefundInfo::getCreateTime, DateUtils.addDays(settlementManageBill.getEndTime(), 1)));
         // 查询衣服单项订单
         ArrayList<String> statusList = new ArrayList<>();
         statusList.add(ClothOrderFlowStatus.inFactory.getCode());
@@ -249,15 +245,23 @@ public class SettlementManageBillServiceImpl extends ServiceImpl<SettlementManag
         // 充值余额总和
         BigDecimal totalRechargeBalance = rechargePasswordCardList.stream().map(RechargePasswordCard::getRechargeBalance).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
         // 福利金余额总和
-       BigDecimal totalWelfareBalance = rechargePasswordCardList.stream().map(RechargePasswordCard::getWelfareBalance).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal totalWelfareBalance = rechargePasswordCardList.stream().map(RechargePasswordCard::getWelfareBalance).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
         // 赠送余额总和
         BigDecimal totalGiveBalance = rechargePasswordCardList.stream().map(RechargePasswordCard::getGiveBalance).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
         // 未开卡卡密金额总和
         BigDecimal totalUnopenedCard = noOpenCardList.stream().map(RechargePasswordCard::getRechargeBalance).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
         // 微信消费总和
-        BigDecimal totalWechat = wechatBillMstrList.stream().map(AppUserBillMstr::getPayTotalAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal totalWechat = payInfoList.stream().filter(o -> o.getPayType().equals(PayType.WECHAT.getCode())).map(OrderPayInfo::getPayAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
         // 支付宝消费总和
-        BigDecimal totalAlipay = alipayBillMstrList.stream().map(AppUserBillMstr::getPayTotalAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal totalAlipay = payInfoList.stream().filter(o -> o.getPayType().equals(PayType.ALIPAY.getCode())).map(OrderPayInfo::getPayAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        // 微信退款总和
+        BigDecimal totalWechatRefund = refundInfoList.stream().filter(o -> o.getPayType().equals(PayType.WECHAT.getCode())).map(OrderRefundInfo::getRefundAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+        // 支付宝退款总和
+        BigDecimal totalAlipayRefund = refundInfoList.stream().filter(o -> o.getPayType().equals(PayType.ALIPAY.getCode())).map(OrderRefundInfo::getRefundAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+
+
         // 材料金额
         BigDecimal totalMaterialAmount = orderClothList.stream().map(OrderCloth::getPayAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
         // 系统维护金额

+ 2 - 0
yiqi-core/src/main/java/com/yiqi/order/service/impl/OrderRechargeServiceImpl.java

@@ -511,6 +511,7 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
         billMstrOrderDTO.setWelfarePayAmount(orderRecharge.getWelfareAmount());
         billMstrOrderDTO.setGivePayAmount(orderRecharge.getGiveAmount());
         billMstrOrderDTO.setRechargeCardNo(orderRecharge.getRechargeCardNo());
+        billMstrOrderDTO.setUseBindStoreId(rechargePasswordCard.getUseBindStoreId());
         BigDecimal totalPayAmount = CurrencyUtil.add(orderRecharge.getRechargeAmount(), orderRecharge.getGiveAmount(), orderRecharge.getWelfareAmount());
         billMstrOrderDTO.setPayTotalAmount(totalPayAmount);
         billMstrOrderDTO.setRemark("充值卡:" + rechargePasswordCard.getCardNo() + "卡密激活,到账" + totalPayAmount + "元");
@@ -545,6 +546,7 @@ public class OrderRechargeServiceImpl extends ServiceImpl<OrderRechargeMapper, O
         billMstrOrderDTO.setOrderNo(orderRecharge.getOrderNo());
         billMstrOrderDTO.setOrderType(OrderType.recharge.getCode());
         billMstrOrderDTO.setRechargePayAmount(orderRecharge.getRechargeAmount());
+        billMstrOrderDTO.setUseBindStoreId(rechargePasswordCard.getUseBindStoreId());
         billMstrOrderDTO.setWelfarePayAmount(orderRecharge.getWelfareAmount());
         billMstrOrderDTO.setGivePayAmount(orderRecharge.getGiveAmount());
         billMstrOrderDTO.setRechargeCardNo(orderRecharge.getRechargeCardNo());

+ 35 - 35
yiqi-core/src/main/java/com/yiqi/recharge/service/impl/RechargePasswordCardServiceImpl.java

@@ -339,33 +339,6 @@ public class RechargePasswordCardServiceImpl extends ServiceImpl<RechargePasswor
         if (rechargePasswordCard != null) {
             appUserBillMstr.setRechargeCardId(rechargePasswordCard.getId());
         }
-
-        //这里判断一下是否为异店消费(非充值订单)
-//        if(SysBoolType.NO.getCode().equals(consumeOrderDTO.getIsRefund())
-//                && !OrderType.recharge.getCode().equals(consumeOrderDTO.getOrderType())
-//        && PayType.BALANCE.getCode().equals(consumeOrderDTO.getPayType()) //余额支付、非退款、非充值订单
-//                && consumeOrderDTO.getOrgId().longValue() != rechargePasswordCard.getRechargeOrgId().longValue()){//是其他店的卡消费,触发异店结算
-//            SysSettlementRate sysSettlementRate = settlementRateService.
-//                    getOne(new QueryWrapper<SysSettlementRate>().lambda()
-//                            .eq(SysSettlementRate::getOrgId, rechargePasswordCard.getRechargeOrgId())
-//                            .eq(SysSettlementRate::getSourceType,SourceType.STORE.getCode()));
-//            if(sysSettlementRate == null){
-//                appUserBillMstr.setOtherStoreRate(BigDecimal.ZERO);
-//                appUserBillMstr.setOtherStoreAmount(BigDecimal.ZERO);
-//            }else{
-//                BigDecimal totalAmount = rechargeAmount.add(giveAmount).add(welfareAmount);
-//                if(totalAmount.doubleValue() < 0){
-//                    totalAmount = totalAmount.multiply(new BigDecimal(-1));
-//                }
-//                appUserBillMstr.setOtherStoreRate(sysSettlementRate.getOtherStoreRate());
-//                appUserBillMstr.setOtherStoreAmount(totalAmount
-//                        .multiply(sysSettlementRate.getOtherStoreRate()));
-//            }
-//            appUserBillMstr.setIsOtherStore(SysBoolType.YES.getCode());
-//        }else{
-//            appUserBillMstr.setIsOtherStore(SysBoolType.NO.getCode());
-//        }
-
         return appUserBillMstr;
     }
 
@@ -793,6 +766,7 @@ public class RechargePasswordCardServiceImpl extends ServiceImpl<RechargePasswor
             BillMstrOrderDTO billMstrOrderDTO = new BillMstrOrderDTO();
             billMstrOrderDTO.setAppUserId(rechargeCardPayDTO.getAppUserId());
             billMstrOrderDTO.setStoreId(rechargeCardPayDTO.getStoreId());
+            billMstrOrderDTO.setUseBindStoreId(rechargePasswordCard.getUseBindStoreId());
             billMstrOrderDTO.setOrderNo(rechargeCardPayDTO.getOrderNo());
             billMstrOrderDTO.setOrderType(rechargeCardPayDTO.getBuyGoodsType());
             billMstrOrderDTO.setRechargePayAmount(updateRechargePasswordCard.getRechargeBalance());
@@ -820,6 +794,7 @@ public class RechargePasswordCardServiceImpl extends ServiceImpl<RechargePasswor
                 .eq(AppUserBillMstr::getHasRefund, SysBoolType.NO.getCode())
                 .eq(AppUserBillMstr::getBillType, "0")
         );
+        BigDecimal remainRefundAmount = refundAmount;
         for (AppUserBillMstr consumeBillMstr : consumeBillMstrs) {
             //原充值卡退款
             RechargePasswordCard rechargePasswordCard = selectRechargePasswordCardBySn(consumeBillMstr.getRechargeCardNo());
@@ -829,16 +804,44 @@ public class RechargePasswordCardServiceImpl extends ServiceImpl<RechargePasswor
             if (rechargePasswordCard.getRechargeStatus().equals(RechargeStatusType.REFUND.getCode())) {
                 throw new ServiceException("该充值卡已退款,无法撤回");
             }
-            rechargePasswordCard.setRechargeBalance(CurrencyUtil.add(rechargePasswordCard.getRechargeBalance(), consumeBillMstr.getRechargePayAmount()));
-            rechargePasswordCard.setGiveBalance(CurrencyUtil.add(rechargePasswordCard.getGiveBalance(), consumeBillMstr.getGivePayAmount()));
-            rechargePasswordCard.setWelfareBalance(CurrencyUtil.add(rechargePasswordCard.getWelfareBalance(), consumeBillMstr.getWelfarePayAmount()));
+            BigDecimal giveRefundAmount = BigDecimal.ZERO;
+            BigDecimal welfareRefundAmount = BigDecimal.ZERO;
+            BigDecimal balanceRefundAmount = BigDecimal.ZERO;
+            if (remainRefundAmount.compareTo(consumeBillMstr.getGivePayAmount()) > 0) {
+                giveRefundAmount = consumeBillMstr.getGivePayAmount();
+            } else {
+                giveRefundAmount = remainRefundAmount;
+            }
+            remainRefundAmount = CurrencyUtil.sub(remainRefundAmount, giveRefundAmount);
+            if (remainRefundAmount.compareTo(consumeBillMstr.getWelfarePayAmount()) > 0) {
+                welfareRefundAmount = consumeBillMstr.getWelfarePayAmount();
+            } else {
+                welfareRefundAmount = remainRefundAmount;
+            }
+            remainRefundAmount = CurrencyUtil.sub(remainRefundAmount, welfareRefundAmount);
+            if (remainRefundAmount.compareTo(consumeBillMstr.getRechargePayAmount()) > 0) {
+                balanceRefundAmount = consumeBillMstr.getRechargePayAmount();
+            } else {
+                balanceRefundAmount = remainRefundAmount;
+            }
+            remainRefundAmount = CurrencyUtil.sub(remainRefundAmount, balanceRefundAmount);
+            rechargePasswordCard.setRechargeAmount(CurrencyUtil.sub(rechargePasswordCard.getRechargeAmount(), balanceRefundAmount));
+            rechargePasswordCard.setGiveBalance(CurrencyUtil.sub(rechargePasswordCard.getGiveBalance(), giveRefundAmount));
+            rechargePasswordCard.setWelfareBalance(CurrencyUtil.sub(rechargePasswordCard.getWelfareBalance(), welfareRefundAmount));
             rechargePasswordCard.setRechargeStatus(RechargeStatusType.HAS_USE.getCode());
             baseMapper.updateById(rechargePasswordCard);
             //更新为已退款
-            consumeBillMstr.setHasRefund(SysBoolType.YES.getCode());
-            appUserBillMstrService.updateById(consumeBillMstr);
+            if (consumeBillMstr.getPayTotalAmount().compareTo(refundAmount) >= 0) {
+                consumeBillMstr.setHasRefund(SysBoolType.YES.getCode());
+                appUserBillMstrService.updateById(consumeBillMstr);
+            }
             //新增一个充值记录
             //保存日志
+            consumeBillMstr.setRechargePayAmount(balanceRefundAmount);
+            consumeBillMstr.setWelfarePayAmount(welfareRefundAmount);
+            consumeBillMstr.setGivePayAmount(giveRefundAmount);
+            consumeBillMstr.setPayTotalAmount(CurrencyUtil.add(balanceRefundAmount, giveRefundAmount, welfareRefundAmount));
+
             BillMstrOrderDTO billMstrOrderDTO = new BillMstrOrderDTO();
             BeanUtils.copyProperties(consumeBillMstr, billMstrOrderDTO);
             billMstrOrderDTO.setStoreId(consumeBillMstr.getOrgId());
@@ -849,7 +852,4 @@ public class RechargePasswordCardServiceImpl extends ServiceImpl<RechargePasswor
         }
         return true;
     }
-
-    //</editor-folder>
-
 }