Selaa lähdekoodia

修改pos二次下单功能,修改单位挂账扣款功能

许智捷 2 vuotta sitten
vanhempi
commit
21fea29f42

+ 3 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/controller/BusOrderFeeController.java

@@ -26,6 +26,7 @@ import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.modules.business.vo.RoomOrderFeeVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.servlet.ModelAndView;
 import io.swagger.annotations.Api;
@@ -87,6 +88,7 @@ public class BusOrderFeeController extends JeecgController<BusOrderFee, IBusOrde
 	 @ApiOperation(value="bus_order_fee-添加", notes="bus_order_fee-添加")
 	 //@RequiresPermissions("business:bus_order_fee:add")
 	 @PostMapping(value = "/saveBatch")
+	 @Transactional(rollbackFor = Exception.class)
 	 public Result<Boolean> add(@RequestBody List<BusOrderFee> busOrderFeeList, String hotelId) {
 		 return Result.OK(busOrderFeeService.collectionBatch(busOrderFeeList, hotelId));
 	 }
@@ -94,6 +96,7 @@ public class BusOrderFeeController extends JeecgController<BusOrderFee, IBusOrde
 	 @AutoLog(value = "bus_order_fee-退款")
 	 @ApiOperation(value="bus_order_fee-退款", notes="bus_order_fee-退款")
 	 //@RequiresPermissions("business:bus_order_fee:add")
+	 @Transactional(rollbackFor = Exception.class)
 	 @PostMapping(value = "/refundBatch")
 	 public Result<Boolean> refundBatch(@RequestBody List<BusOrderFee> busOrderFeeList) {
 		 return Result.OK(busOrderFeeService.refundBatch(busOrderFeeList));

+ 57 - 5
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/business/service/impl/BusOrderFeeServiceImpl.java

@@ -45,6 +45,8 @@ public class BusOrderFeeServiceImpl extends ServiceImpl<BusOrderFeeMapper, BusOr
     IBusMemberBalanceLogService memberBalanceLogService;
     @Resource
     IBusOrderFeeGoodsService orderFeeGoodsService;
+    @Resource
+    IBusMarketAgreementUnitService marketAgreementUnitService;
 
     @Override
     public Boolean strikeBalance(List<BusOrderFee> busOrderFeeList) {
@@ -78,8 +80,8 @@ public class BusOrderFeeServiceImpl extends ServiceImpl<BusOrderFeeMapper, BusOr
     @Override
     public Boolean refundBatch(List<BusOrderFee> busOrderFeeList) {
         List<BusRoomPayType> payTypeList = payTypeService.list();
-        Optional<BusRoomPayType> roomPayType = payTypeList.stream().filter(e -> "会员卡".equals(e.getName())).findFirst();
-        roomPayType.ifPresent(e -> {
+        Optional<BusRoomPayType> cardPayType = payTypeList.stream().filter(e -> "会员卡".equals(e.getName())).findFirst();
+        cardPayType.ifPresent(e -> {
             // 会员支付的订单
             List<BusOrderFee> busOrderFees = busOrderFeeList.stream().filter(fee -> e.getId()
                             .equals(fee.getPayType())).collect(Collectors.toList());
@@ -105,8 +107,34 @@ public class BusOrderFeeServiceImpl extends ServiceImpl<BusOrderFeeMapper, BusOr
                 memberCardService.updateBatchById(memberCardList);
             }
         });
+        Optional<BusRoomPayType> agreementPayType = payTypeList.stream().filter(e -> "单位挂账".equals(e.getName())).findFirst();
+        agreementPayType.ifPresent(e -> {
+            List<BusOrderFee> busOrderFees = busOrderFeeList.stream().filter(fee -> e.getId()
+                    .equals(fee.getPayType())).collect(Collectors.toList());
+            if (CollUtil.isNotEmpty(busOrderFees)){
+                List<String> agreementUnitIds = busOrderFees.stream().map(BusOrderFee::getAgreementUnitId).distinct().collect(Collectors.toList());
+                List<BusMarketAgreementUnit> marketAgreementUnitList = marketAgreementUnitService.listByIds(agreementUnitIds);
+                if (CollUtil.isEmpty(agreementUnitIds) || agreementUnitIds.size() != marketAgreementUnitList.size()){
+                    throw new JeecgBootException("协议单位匹配异常");
+                }
+                busOrderFees.forEach(fee ->{
+                    marketAgreementUnitList.stream().filter(agreement -> agreement.getId().equals(fee.getAgreementUnitId())).findFirst().ifPresent(agreement ->{
+                        // 计算已用额度与当前退款的差价
+                        BigDecimal differMoney = agreement.getAmountUsed().subtract(fee.getMoney());
+                        if (differMoney.compareTo(new BigDecimal(0)) < 0 ){
+                            agreement.setAmountUsed(new BigDecimal(0));
+                            agreement.setBalance(agreement.getBalance().subtract(differMoney));
+                        } else {
+                            agreement.setAmountUsed(differMoney);
+                        }
+                    });
+                });
+                marketAgreementUnitService.updateBatchById(marketAgreementUnitList);
+            }
+        });
         busOrderFeeList.forEach(e -> {
             e.setId(null);
+            // 将扣款变成负数金额
             e.setMoney(e.getMoney().multiply(BigDecimal.valueOf(-1)));
         });
         return saveBatch(busOrderFeeList);
@@ -165,10 +193,34 @@ public class BusOrderFeeServiceImpl extends ServiceImpl<BusOrderFeeMapper, BusOr
         });
         payTypeList.stream().filter(e -> "单位挂账".equals(e.getName())).findFirst().ifPresent(type -> {
             //找出单位挂账支付的账单,将单位挂账支付的账单中的单位挂账id去重
-            List<BusOrderFee> agreementUnitPayFee = busOrderFeeList.stream().filter(fee -> type.getId().equals(fee.getPayType())).collect(Collectors.toList());
-            List<String> agreementUnitIds = agreementUnitPayFee.stream().map(BusOrderFee::getAgreementUnitId).filter(StrUtil::isNotEmpty).distinct().collect(Collectors.toList());
+            List<BusOrderFee> agreementUnitPayFee = busOrderFeeList.stream()
+                    .filter(fee -> type.getId().equals(fee.getPayType())).collect(Collectors.toList());
+            List<String> agreementUnitIds = agreementUnitPayFee.stream().map(BusOrderFee::getAgreementUnitId)
+                    .filter(StrUtil::isNotEmpty).distinct().collect(Collectors.toList());
             if (CollUtil.isNotEmpty(agreementUnitIds)){
-
+                List<BusMarketAgreementUnit> marketAgreementUnitList = marketAgreementUnitService.listByIds(agreementUnitIds);
+                if (agreementUnitIds.size() != marketAgreementUnitList.size()){
+                    throw new JeecgBootException("单位挂账匹配异常");
+                }
+                agreementUnitPayFee.forEach(fee -> {
+                    // 找出账单匹配的合同单位
+                    BusMarketAgreementUnit marketAgreementUnit = marketAgreementUnitList.stream().filter(agreement ->
+                            agreement.getId().equals(fee.getAgreementUnitId())).findFirst().get();
+                    // 计算余额与账单金额差价,如果差价小于0,将余额置0,将差价加到已用额度。差价大于等于0,直接扣余额
+                    BigDecimal differMoney = marketAgreementUnit.getBalance().subtract(fee.getMoney());
+                    if (differMoney.compareTo(new BigDecimal(0)) < 0){
+                        marketAgreementUnit.setBalance(new BigDecimal(0));
+                        marketAgreementUnit.setAmountUsed(marketAgreementUnit.getAmountUsed().subtract(differMoney));
+                    } else {
+                        marketAgreementUnit.setBalance(differMoney);
+                    }
+                    // 已用额度大于记账额度,抛出异常
+                    if (marketAgreementUnit.getBookkeeping() != null
+                            && (marketAgreementUnit.getAmountUsed().compareTo(marketAgreementUnit.getBookkeeping()) > 0)){
+                        throw new JeecgBootException(marketAgreementUnit.getCustomerName() + "超过记账额度");
+                    }
+                });
+                marketAgreementUnitService.updateBatchById(marketAgreementUnitList);
             }
 
         });

+ 4 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/mapper/PosOrderGoodsDetailMapper.java

@@ -17,6 +17,8 @@ public interface PosOrderGoodsDetailMapper extends BaseMapper<PosOrderGoodsDetai
 
     @Select("select pogd.*,cg.name as goods_name from pos_order_goods_detail pogd " +
             "left join ces_goods cg on pogd.goods_id =  cg.id " +
-            "where pogd.order_id = #{code} ")
-    List<PosOrderGoodsDetail> getGoodsDetail(String code);
+            "where pogd.order_id = #{code} " +
+            "<foreach item='code' collection='codes' open='(' separator=',' close=')'> " +
+            "#{code} </foreach>")
+    List<PosOrderGoodsDetail> getGoodsDetail(List<String> codes);
 }

+ 1 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/service/IPosOrderGoodsDetailService.java

@@ -13,5 +13,5 @@ import java.util.List;
  */
 public interface IPosOrderGoodsDetailService extends IService<PosOrderGoodsDetail> {
 
-    List<PosOrderGoodsDetail> getGoodsDetail(String code);
+    List<PosOrderGoodsDetail> getGoodsDetail(List<String> code);
 }

+ 2 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/pos/service/impl/PosOrderGoodsDetailServiceImpl.java

@@ -19,7 +19,7 @@ import java.util.List;
 public class PosOrderGoodsDetailServiceImpl extends ServiceImpl<PosOrderGoodsDetailMapper, PosOrderGoodsDetail> implements IPosOrderGoodsDetailService {
 
     @Override
-    public List<PosOrderGoodsDetail> getGoodsDetail(String code) {
-        return baseMapper.getGoodsDetail(code);
+    public List<PosOrderGoodsDetail> getGoodsDetail(List<String> codes) {
+        return baseMapper.getGoodsDetail(codes);
     }
 }