From 7958f1dddb8a7f4e70d232b07a7703955ecedae0 Mon Sep 17 00:00:00 2001
From: Your Name <you@example.com>
Date: 星期六, 26 八月 2023 12:45:33 +0800
Subject: [PATCH] 优化diamante

---
 service-fee/src/main/java/com/java110/fee/cmd/returnPayFee/UpdateReturnPayFeeCmd.java |  345 +++++++++++++++++++++++++++++++++------------------------
 1 files changed, 201 insertions(+), 144 deletions(-)

diff --git a/service-fee/src/main/java/com/java110/fee/cmd/returnPayFee/UpdateReturnPayFeeCmd.java b/service-fee/src/main/java/com/java110/fee/cmd/returnPayFee/UpdateReturnPayFeeCmd.java
index 86b2ff8..2e16e24 100644
--- a/service-fee/src/main/java/com/java110/fee/cmd/returnPayFee/UpdateReturnPayFeeCmd.java
+++ b/service-fee/src/main/java/com/java110/fee/cmd/returnPayFee/UpdateReturnPayFeeCmd.java
@@ -23,20 +23,22 @@
 import com.java110.core.event.cmd.Cmd;
 import com.java110.core.event.cmd.CmdEvent;
 import com.java110.core.factory.GenerateCodeFactory;
-import com.java110.dto.RoomDto;
+import com.java110.dto.room.RoomDto;
 import com.java110.dto.account.AccountDto;
 import com.java110.dto.fee.FeeDetailDto;
 import com.java110.dto.fee.FeeDto;
-import com.java110.dto.feeDiscount.FeeDiscountDto;
-import com.java110.dto.feeDiscount.FeeDiscountRuleDto;
-import com.java110.dto.feeDiscount.FeeDiscountSpecDto;
-import com.java110.dto.onlinePay.OnlinePayDto;
+import com.java110.dto.fee.FeeDiscountDto;
+import com.java110.dto.fee.FeeDiscountRuleDto;
+import com.java110.dto.fee.FeeDiscountSpecDto;
+import com.java110.dto.fee.FeeReceiptDetailDto;
+import com.java110.dto.wechat.OnlinePayDto;
 import com.java110.dto.owner.OwnerCarDto;
 import com.java110.dto.owner.OwnerDto;
 import com.java110.dto.owner.OwnerRoomRelDto;
-import com.java110.dto.payFeeConfigDiscount.PayFeeConfigDiscountDto;
-import com.java110.dto.payFeeDetailDiscount.PayFeeDetailDiscountDto;
-import com.java110.dto.returnPayFee.ReturnPayFeeDto;
+import com.java110.dto.payFee.PayFeeConfigDiscountDto;
+import com.java110.dto.payFee.PayFeeDetailDiscountDto;
+import com.java110.dto.payFee.ReturnPayFeeDto;
+import com.java110.dto.user.UserDto;
 import com.java110.intf.acct.IAccountDetailInnerServiceSMO;
 import com.java110.intf.acct.IAccountInnerServiceSMO;
 import com.java110.intf.acct.IOnlinePayV1InnerServiceSMO;
@@ -45,15 +47,16 @@
 import com.java110.intf.user.IOwnerCarInnerServiceSMO;
 import com.java110.intf.user.IOwnerInnerServiceSMO;
 import com.java110.intf.user.IOwnerRoomRelInnerServiceSMO;
+import com.java110.intf.user.IUserV1InnerServiceSMO;
 import com.java110.po.account.AccountPo;
-import com.java110.po.accountDetail.AccountDetailPo;
+import com.java110.po.account.AccountDetailPo;
 import com.java110.po.fee.PayFeeDetailPo;
 import com.java110.po.fee.PayFeePo;
-import com.java110.po.feeReceipt.FeeReceiptPo;
-import com.java110.po.feeReceiptDetail.FeeReceiptDetailPo;
-import com.java110.po.onlinePay.OnlinePayPo;
-import com.java110.po.payFeeDetailDiscount.PayFeeDetailDiscountPo;
-import com.java110.po.returnPayFee.ReturnPayFeePo;
+import com.java110.po.fee.FeeReceiptPo;
+import com.java110.po.fee.FeeReceiptDetailPo;
+import com.java110.po.wechat.OnlinePayPo;
+import com.java110.po.payFee.PayFeeDetailDiscountPo;
+import com.java110.po.payFee.ReturnPayFeePo;
 import com.java110.utils.exception.CmdException;
 import com.java110.utils.util.Assert;
 import com.java110.utils.util.BeanConvertUtil;
@@ -147,6 +150,10 @@
     @Autowired
     private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
 
+    @Autowired
+    private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
+
+
     private static final String SPEC_RATE = "89002020980015"; //璧犻�佹湀浠�
 
     private static final String SPEC_MONTH = "89002020980014"; //鏈堜唤
@@ -176,8 +183,23 @@
     @Override
     @Java110Transactional
     public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException {
+        String userId = cmdDataFlowContext.getReqHeaders().get("user-id");
+
+        UserDto userDto = new UserDto();
+        userDto.setUserId(userId);
+        List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
+
+        Assert.listOnlyOne(userDtos, "鐢ㄦ埛涓嶅瓨鍦�");
         FeeDetailDto feeDetailDto = (FeeDetailDto) reqJson.get("feeDetailDto");
-        updateReturnPayFee(reqJson);
+
+        ReturnPayFeeDto returnPayFeeDto = new ReturnPayFeeDto();
+        returnPayFeeDto.setReturnFeeId(reqJson.getString("returnFeeId"));
+        List<ReturnPayFeeDto> returnPayFeeDtos = returnPayFeeInnerServiceSMOImpl.queryReturnPayFees(returnPayFeeDto);
+        Assert.listOnlyOne(returnPayFeeDtos, "鏈壘鍒伴渶瑕佷慨鏀圭殑娲诲姩 鎴栧鏉℃暟鎹�");
+
+        // todo 淇敼閫�娆剧姸鎬�
+        updateReturnPayFee(reqJson, userDtos.get(0), returnPayFeeDtos.get(0));
+
         //閫�璐瑰鏍搁�氳繃
         if ("1100".equals(reqJson.getString("state"))) {
             //鍒ゆ柇閫�璐瑰懆鏈熸槸鍚︿负璐熸暟濡傛灉涓嶆槸 鎶涘嚭寮傚父
@@ -186,7 +208,8 @@
             reqJson.put("startTime", DateUtil.getFormatTimeString(feeDetailDto.getStartTime(), DateUtil.DATE_FORMATE_STRING_A));
             reqJson.put("endTime", DateUtil.getFormatTimeString(feeDetailDto.getEndTime(), DateUtil.DATE_FORMATE_STRING_A));
             reqJson.put("payOrderId", feeDetailDto.getPayOrderId());
-            addFeeDetail(reqJson);
+            // todo  娣诲姞閫�璐规槑缁�
+            addFeeDetail(reqJson, returnPayFeeDtos.get(0));
             reqJson.put("state", "1100");
             String receivableAmount = (String) reqJson.get("receivableAmount");
             String receivedAmount = (String) reqJson.get("receivedAmount");
@@ -194,6 +217,7 @@
             reqJson.put("receivableAmount", unum(receivableAmount));
             reqJson.put("receivedAmount", unum(receivedAmount));
             reqJson.put("createTime", reqJson.get("payTime"));
+            // todo 淇敼 缂磋垂璁板綍
             updateFeeDetail(reqJson);
             //淇敼pay_fee 璐圭敤鍒版湡鏃堕棿  浠ュ強濡傛灉鏄娂閲戝垯淇敼鐘舵�佷负缁撴潫鏀惰垂
             FeeDto feeDto = new FeeDto();
@@ -216,11 +240,13 @@
             reqJson.put("configId", feeDto1.getConfigId());
             reqJson.put("payerObjType", feeDto1.getPayerObjType());
             reqJson.put("feeId", feeDto1.getFeeId());
-            if ("888800010006".equals(feeDto1.getFeeTypeCds())) {
-                reqJson.put("state", "2009001");
+            //1003006 鍛ㄦ湡鎬ц垂鐢�  2006012 涓�娆℃�ц垂鐢�  4012024 闂存帴鎬ц垂鐢�
+            if ("2006012".equals(feeDto1.getFeeFlag()) || "888800010006".equals(feeDto1.getFeeTypeCd())) { //888800010006 鎶奸噾
+                reqJson.put("state", "2009001"); //2007001 鏀惰垂鏈紑濮�  2008001 鏈夋晥  2009001 鏀惰垂缁撴潫
             } else {
                 reqJson.put("state", "2008001");
             }
+            //todo 璐圭敤閫�鍥炲幓
             updateFee(reqJson);
             reqJson.put("feeName", feeDto1.getFeeName());
 //            dealFeeReceipt(reqJson);
@@ -235,125 +261,11 @@
                 discountJson.put("discountPrice", unum(payFeeDetailDiscountDtos.get(0).getDiscountPrice()));
                 addPayFeeDetailDiscountTwo(reqJson, discountJson);
             }
-            //鍒よ鏄惁鏈夎禒閫佽鍒欎紭鎯�
-            PayFeeConfigDiscountDto payFeeConfigDiscountDto = new PayFeeConfigDiscountDto();
-            payFeeConfigDiscountDto.setConfigId(reqJson.getString("configId"));
-            List<PayFeeConfigDiscountDto> payFeeConfigDiscountDtos = payFeeConfigDiscountInnerServiceSMOImpl.queryPayFeeConfigDiscounts(payFeeConfigDiscountDto);
-            if (payFeeConfigDiscountDtos != null && payFeeConfigDiscountDtos.size() > 0) {
-                for (PayFeeConfigDiscountDto payFeeConfigDiscount : payFeeConfigDiscountDtos) {
-                    FeeDiscountDto feeDiscountDto = new FeeDiscountDto();
-                    feeDiscountDto.setDiscountId(payFeeConfigDiscount.getDiscountId());
-                    List<FeeDiscountDto> feeDiscountDtos = feeDiscountInnerServiceSMOImpl.queryFeeDiscounts(feeDiscountDto);
-                    Assert.listOnlyOne(feeDiscountDtos, "鏌ヨ鎵撴姌浼樻儬琛ㄩ敊璇�");
-                    FeeDiscountRuleDto feeDiscountRuleDto = new FeeDiscountRuleDto();
-                    feeDiscountRuleDto.setRuleId(feeDiscountDtos.get(0).getRuleId());
-                    List<FeeDiscountRuleDto> feeDiscountRuleDtos = feeDiscountRuleInnerServiceSMOImpl.queryFeeDiscountRules(feeDiscountRuleDto);
-                    Assert.listOnlyOne(feeDiscountRuleDtos, "鏌ヨ瑙勫垯琛ㄩ敊璇�");
-                    //鑾峰彇瀹炵幇鏂瑰紡
-                    String beanImpl = feeDiscountRuleDtos.get(0).getBeanImpl();
-                    if (!StringUtil.isEmpty(beanImpl) && beanImpl.equals("reductionMonthFeeRule")) { //璧犻�佽鍒�
-                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                        Calendar cal = Calendar.getInstance();
-                        //鑾峰彇缂磋垂寮�濮嬫椂闂�
-                        Date startTime = DateUtil.getDateFromStringA(reqJson.getString("startTime"));
-                        FeeDiscountSpecDto feeDiscountSpecDto = new FeeDiscountSpecDto();
-                        feeDiscountSpecDto.setDiscountId(payFeeConfigDiscount.getDiscountId());
-                        feeDiscountSpecDto.setSpecId(SPEC_RATE); //璧犻�佽鍒�
-                        //鏌ヨ鎵撴姌瑙勬牸
-                        List<FeeDiscountSpecDto> feeDiscountSpecDtos = feeDiscountSpecInnerServiceSMOImpl.queryFeeDiscountSpecs(feeDiscountSpecDto);
-                        Assert.listOnlyOne(feeDiscountSpecDtos, "鏌ヨ鎵撴姌瑙勬牸琛ㄩ敊璇紒");
-                        //鑾峰彇璧犻�佹湀浠�
-                        String specValue = feeDiscountSpecDtos.get(0).getSpecValue();
-                        BigDecimal value = new BigDecimal(specValue);
-                        FeeDiscountSpecDto feeDiscountSpec = new FeeDiscountSpecDto();
-                        feeDiscountSpec.setDiscountId(payFeeConfigDiscount.getDiscountId());
-                        feeDiscountSpec.setSpecId(SPEC_MONTH); //鏈堜唤
-                        List<FeeDiscountSpecDto> feeDiscountSpecs = feeDiscountSpecInnerServiceSMOImpl.queryFeeDiscountSpecs(feeDiscountSpec);
-                        Assert.listOnlyOne(feeDiscountSpecs, "鏌ヨ鎵撴姌瑙勬牸琛ㄩ敊璇紒");
-                        //鑾峰彇鏈堜唤
-                        BigDecimal discountMonth = new BigDecimal(feeDiscountSpecs.get(0).getSpecValue());
-                        //鑾峰彇鍛ㄦ湡
-                        BigDecimal cycle = new BigDecimal(reqJson.getString("cycles"));
-                        int flag = discountMonth.compareTo(cycle);
-                        if (flag == 1) { //鏈堜唤discountMonth澶т簬鍛ㄦ湡cycle锛屾棤娉曚韩鍙楄禒閫佽鍒�
-                            continue;
-                        }
-//                        FeeDto feeDto2 = new FeeDto();
-//                        feeDto2.setFeeId(feeDtos.get(0).getFeeId());
-//                        List<FeeDto> fees = feeInnerServiceSMOImpl.queryFees(feeDto2);
-//                        Assert.listOnlyOne(fees, "鏌ヨ璐圭敤琛ㄩ敊璇�");
-                        int monthNum = cycle.add(value).intValue();
-                        //鑾峰彇璐圭敤寮�濮嬫椂闂�
-                        Date endTime = feeDtos.get(0).getEndTime();
-//                        if (endTime.equals(startTime)) {
-//                            continue;
-//                        }
-                        cal.setTime(endTime);
-                        cal.add(Calendar.MONTH, -monthNum);
-                        PayFeePo payFeePo = new PayFeePo();
-                        payFeePo.setFeeId(feeDtos.get(0).getFeeId());
-                        payFeePo.setEndTime(simpleDateFormat.format(cal.getTime()));
-                        feeInnerServiceSMOImpl.updateFee(payFeePo);
-                    }
-                }
-            }
-            //妫�鏌ユ槸鍚︾幇閲戣处鎴锋姷鎵�
-            String feeAccountDetailDtoList = reqJson.getString("feeAccountDetailDtoList");
-            JSONArray feeAccountDetails = JSONArray.parseArray(feeAccountDetailDtoList);
-            if (feeAccountDetails != null && feeAccountDetails.size() > 0) {
-                String ownerId = "";
-                if (!StringUtil.isEmpty(reqJson.getString("payerObjType")) && reqJson.getString("payerObjType").equals("3333")) { //鎴垮眿
-                    OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto();
-                    ownerRoomRelDto.setRoomId(reqJson.getString("payerObjId"));
-                    List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelInnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto);
-                    Assert.listOnlyOne(ownerRoomRelDtos, "鏌ヨ涓氫富鎴垮眿鍏崇郴琛ㄩ敊璇紒");
-                    ownerId = ownerRoomRelDtos.get(0).getOwnerId();
-                } else if (!StringUtil.isEmpty(reqJson.getString("payerObjType")) && reqJson.getString("payerObjType").equals("6666")) { //杞﹁締
-                    OwnerCarDto ownerCarDto = new OwnerCarDto();
-                    ownerCarDto.setCarId(reqJson.getString("payerObjId"));
-                    List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
-                    Assert.listOnlyOne(ownerCarDtos, "鏌ヨ涓氫富杞﹁締閿欒锛�");
-                    ownerId = ownerCarDtos.get(0).getOwnerId();
-                }
-                for (int index = 0; index < feeAccountDetails.size(); index++) {
-                    JSONObject param = feeAccountDetails.getJSONObject(index);
-                    String state = param.getString("state");
-                    if (!StringUtil.isEmpty(param.getString("state")) && param.getString("state").equals("1002")) { //1001 鏃犳姷鎵� 1002 鐜伴噾璐︽埛鎶垫墸 1003 绉垎璐︽埛鎶垫墸 1004 浼樻儬鍒告姷鎵�
-                        AccountDto accountDto = new AccountDto();
-                        accountDto.setObjId(ownerId);
-                        accountDto.setAcctType(AccountDto.ACCT_TYPE_CASH); //2003  鐜伴噾璐︽埛
-                        List<AccountDto> accountDtos = accountInnerServiceSMOImpl.queryAccounts(accountDto);
-                        Assert.listOnlyOne(accountDtos, "鏌ヨ涓氫富鐜伴噾璐︽埛閿欒锛�");
-                        BigDecimal amount = new BigDecimal(accountDtos.get(0).getAmount());
-                        BigDecimal money = new BigDecimal(param.getString("amount"));
-                        BigDecimal newAmount = amount.add(money);
-                        AccountPo accountPo = new AccountPo();
-                        accountPo.setAcctId(accountDtos.get(0).getAcctId());
-                        accountPo.setAmount(String.valueOf(newAmount));
-                        int flag = accountInnerServiceSMOImpl.updateAccount(accountPo);
-                        if (flag < 1) {
-                            throw new IllegalArgumentException("鏇存柊涓氫富鐜伴噾璐︽埛澶辫触锛�");
-                        }
-                        AccountDetailPo accountDetailPo = new AccountDetailPo();
-                        accountDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId));
-                        accountDetailPo.setAcctId(accountDtos.get(0).getAcctId());
-                        accountDetailPo.setDetailType("1001"); //1001 杞叆 2002 杞嚭
-                        accountDetailPo.setRelAcctId("-1");
-                        accountDetailPo.setAmount(param.getString("amount"));
-                        accountDetailPo.setObjType("6006"); //6006 涓汉 7007 鍟嗘埛
-                        accountDetailPo.setObjId(ownerId);
-                        accountDetailPo.setOrderId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_orderId));
-                        accountDetailPo.setbId("-1");
-                        accountDetailPo.setRemark("鐜伴噾璐︽埛閫�璐�");
-                        accountDetailPo.setCreateTime(new Date());
-                        int i = accountDetailInnerServiceSMOImpl.saveAccountDetails(accountDetailPo);
-                        if (i < 1) {
-                            throw new IllegalArgumentException("淇濆瓨涓氫富鐜伴噾璐︽埛鏄庣粏澶辫触锛�");
-                        }
-                    }
-                }
-            }
-            //鎻愪氦绾夸笂閫�璐�
+            //todo 鍒よ鏄惁鏈夎禒閫佽鍒欎紭鎯�
+            returnCoupon(reqJson, feeDtos);
+            //todo 妫�鏌ユ槸鍚︾幇閲戣处鎴锋姷鎵�
+            returnAccount(reqJson);
+            //todo 鎻愪氦绾夸笂閫�璐�
             returnOnlinePayMoney(feeDetailDto);
         }
         //涓嶉�氳繃
@@ -372,6 +284,129 @@
         }
     }
 
+    private void returnAccount(JSONObject reqJson) {
+        String feeAccountDetailDtoList = reqJson.getString("feeAccountDetailDtoList");
+        JSONArray feeAccountDetails = JSONArray.parseArray(feeAccountDetailDtoList);
+        if (feeAccountDetails == null || feeAccountDetails.size() < 1) {
+            return;
+        }
+        String ownerId = "";
+        if (FeeDto.PAYER_OBJ_TYPE_ROOM.equals(reqJson.getString("payerObjType"))) { //鎴垮眿
+            OwnerRoomRelDto ownerRoomRelDto = new OwnerRoomRelDto();
+            ownerRoomRelDto.setRoomId(reqJson.getString("payerObjId"));
+            List<OwnerRoomRelDto> ownerRoomRelDtos = ownerRoomRelInnerServiceSMOImpl.queryOwnerRoomRels(ownerRoomRelDto);
+            Assert.listOnlyOne(ownerRoomRelDtos, "鏌ヨ涓氫富鎴垮眿鍏崇郴琛ㄩ敊璇紒");
+            ownerId = ownerRoomRelDtos.get(0).getOwnerId();
+        } else if (FeeDto.PAYER_OBJ_TYPE_CAR.equals(reqJson.getString("payerObjType"))) { //杞﹁締
+            OwnerCarDto ownerCarDto = new OwnerCarDto();
+            ownerCarDto.setMemberId(reqJson.getString("payerObjId"));
+            List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
+            Assert.listOnlyOne(ownerCarDtos, "鏌ヨ涓氫富杞﹁締閿欒锛�");
+            ownerId = ownerCarDtos.get(0).getOwnerId();
+        }
+        for (int index = 0; index < feeAccountDetails.size(); index++) {
+            JSONObject param = feeAccountDetails.getJSONObject(index);
+            String state = param.getString("state");
+            if (!"1002".equals(param.getString("state"))) { //1001 鏃犳姷鎵� 1002 鐜伴噾璐︽埛鎶垫墸 1003 绉垎璐︽埛鎶垫墸 1004 浼樻儬鍒告姷鎵�
+                continue;
+            }
+            AccountDto accountDto = new AccountDto();
+            accountDto.setObjId(ownerId);
+            accountDto.setAcctType(AccountDto.ACCT_TYPE_CASH); //2003  鐜伴噾璐︽埛
+            List<AccountDto> accountDtos = accountInnerServiceSMOImpl.queryAccounts(accountDto);
+            Assert.listOnlyOne(accountDtos, "鏌ヨ涓氫富鐜伴噾璐︽埛閿欒锛�");
+            BigDecimal amount = new BigDecimal(accountDtos.get(0).getAmount());
+            BigDecimal money = new BigDecimal(param.getString("amount"));
+            BigDecimal newAmount = amount.add(money);
+            AccountPo accountPo = new AccountPo();
+            accountPo.setAcctId(accountDtos.get(0).getAcctId());
+            accountPo.setAmount(String.valueOf(newAmount));
+            int flag = accountInnerServiceSMOImpl.updateAccount(accountPo);
+            if (flag < 1) {
+                throw new IllegalArgumentException("鏇存柊涓氫富鐜伴噾璐︽埛澶辫触锛�");
+            }
+            AccountDetailPo accountDetailPo = new AccountDetailPo();
+            accountDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId));
+            accountDetailPo.setAcctId(accountDtos.get(0).getAcctId());
+            accountDetailPo.setDetailType("1001"); //1001 杞叆 2002 杞嚭
+            accountDetailPo.setRelAcctId("-1");
+            accountDetailPo.setAmount(param.getString("amount"));
+            accountDetailPo.setObjType("6006"); //6006 涓汉 7007 鍟嗘埛
+            accountDetailPo.setObjId(ownerId);
+            accountDetailPo.setOrderId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_orderId));
+            accountDetailPo.setbId("-1");
+            accountDetailPo.setRemark("鐜伴噾璐︽埛閫�璐�");
+            accountDetailPo.setCreateTime(new Date());
+            int i = accountDetailInnerServiceSMOImpl.saveAccountDetails(accountDetailPo);
+            if (i < 1) {
+                throw new IllegalArgumentException("淇濆瓨涓氫富鐜伴噾璐︽埛鏄庣粏澶辫触锛�");
+            }
+        }
+    }
+
+    private void returnCoupon(JSONObject reqJson, List<FeeDto> feeDtos) {
+        PayFeeConfigDiscountDto payFeeConfigDiscountDto = new PayFeeConfigDiscountDto();
+        payFeeConfigDiscountDto.setConfigId(reqJson.getString("configId"));
+        List<PayFeeConfigDiscountDto> payFeeConfigDiscountDtos = payFeeConfigDiscountInnerServiceSMOImpl.queryPayFeeConfigDiscounts(payFeeConfigDiscountDto);
+        if (payFeeConfigDiscountDtos == null || payFeeConfigDiscountDtos.size() < 1) {
+            return;
+        }
+        for (PayFeeConfigDiscountDto payFeeConfigDiscount : payFeeConfigDiscountDtos) {
+            FeeDiscountDto feeDiscountDto = new FeeDiscountDto();
+            feeDiscountDto.setDiscountId(payFeeConfigDiscount.getDiscountId());
+            List<FeeDiscountDto> feeDiscountDtos = feeDiscountInnerServiceSMOImpl.queryFeeDiscounts(feeDiscountDto);
+            Assert.listOnlyOne(feeDiscountDtos, "鏌ヨ鎵撴姌浼樻儬琛ㄩ敊璇�");
+            FeeDiscountRuleDto feeDiscountRuleDto = new FeeDiscountRuleDto();
+            feeDiscountRuleDto.setRuleId(feeDiscountDtos.get(0).getRuleId());
+            List<FeeDiscountRuleDto> feeDiscountRuleDtos = feeDiscountRuleInnerServiceSMOImpl.queryFeeDiscountRules(feeDiscountRuleDto);
+            Assert.listOnlyOne(feeDiscountRuleDtos, "鏌ヨ瑙勫垯琛ㄩ敊璇�");
+            //鑾峰彇瀹炵幇鏂瑰紡
+            String beanImpl = feeDiscountRuleDtos.get(0).getBeanImpl();
+            if (!"reductionMonthFeeRule".equals(beanImpl)) { //璧犻�佽鍒�
+                continue;
+            }
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            Calendar cal = Calendar.getInstance();
+            //鑾峰彇缂磋垂寮�濮嬫椂闂�
+            Date startTime = DateUtil.getDateFromStringA(reqJson.getString("startTime"));
+            FeeDiscountSpecDto feeDiscountSpecDto = new FeeDiscountSpecDto();
+            feeDiscountSpecDto.setDiscountId(payFeeConfigDiscount.getDiscountId());
+            feeDiscountSpecDto.setSpecId(SPEC_RATE); //璧犻�佽鍒�
+            //鏌ヨ鎵撴姌瑙勬牸
+            List<FeeDiscountSpecDto> feeDiscountSpecDtos = feeDiscountSpecInnerServiceSMOImpl.queryFeeDiscountSpecs(feeDiscountSpecDto);
+            Assert.listOnlyOne(feeDiscountSpecDtos, "鏌ヨ鎵撴姌瑙勬牸琛ㄩ敊璇紒");
+            //鑾峰彇璧犻�佹湀浠�
+            String specValue = feeDiscountSpecDtos.get(0).getSpecValue();
+            BigDecimal value = new BigDecimal(specValue);
+            FeeDiscountSpecDto feeDiscountSpec = new FeeDiscountSpecDto();
+            feeDiscountSpec.setDiscountId(payFeeConfigDiscount.getDiscountId());
+            feeDiscountSpec.setSpecId(SPEC_MONTH); //鏈堜唤
+            List<FeeDiscountSpecDto> feeDiscountSpecs = feeDiscountSpecInnerServiceSMOImpl.queryFeeDiscountSpecs(feeDiscountSpec);
+            Assert.listOnlyOne(feeDiscountSpecs, "鏌ヨ鎵撴姌瑙勬牸琛ㄩ敊璇紒");
+            //鑾峰彇鏈堜唤
+            BigDecimal discountMonth = new BigDecimal(feeDiscountSpecs.get(0).getSpecValue());
+            //鑾峰彇鍛ㄦ湡
+            BigDecimal cycle = new BigDecimal(reqJson.getString("cycles"));
+            int flag = discountMonth.compareTo(cycle);
+            if (flag == 1) { //鏈堜唤discountMonth澶т簬鍛ㄦ湡cycle锛屾棤娉曚韩鍙楄禒閫佽鍒�
+                continue;
+            }
+
+            int monthNum = cycle.add(value).intValue();
+            //鑾峰彇璐圭敤寮�濮嬫椂闂�
+            Date endTime = feeDtos.get(0).getEndTime();
+
+            cal.setTime(endTime);
+            cal.add(Calendar.MONTH, -monthNum);
+            PayFeePo payFeePo = new PayFeePo();
+            payFeePo.setFeeId(feeDtos.get(0).getFeeId());
+            payFeePo.setEndTime(simpleDateFormat.format(cal.getTime()));
+            feeInnerServiceSMOImpl.updateFee(payFeePo);
+
+        }
+
+    }
+
     private double unum(String value) {
         double dValue = Double.parseDouble(value);
         return dValue * -1;
@@ -383,15 +418,14 @@
      * @param paramInJson 鎺ュ彛璋冪敤鏀句紶鍏ュ叆鍙�
      * @return 璁㈠崟鏈嶅姟鑳藉鎺ュ彈鐨勬姤鏂�
      */
-    public void updateReturnPayFee(JSONObject paramInJson) {
-        ReturnPayFeeDto returnPayFeeDto = new ReturnPayFeeDto();
-        returnPayFeeDto.setReturnFeeId(paramInJson.getString("returnFeeId"));
-        List<ReturnPayFeeDto> returnPayFeeDtos = returnPayFeeInnerServiceSMOImpl.queryReturnPayFees(returnPayFeeDto);
-        Assert.listOnlyOne(returnPayFeeDtos, "鏈壘鍒伴渶瑕佷慨鏀圭殑娲诲姩 鎴栧鏉℃暟鎹�");
+    public void updateReturnPayFee(JSONObject paramInJson, UserDto userDto, ReturnPayFeeDto returnPayFeeDto) {
+
         JSONObject businessReturnPayFee = new JSONObject();
-        businessReturnPayFee.putAll(BeanConvertUtil.beanCovertMap(returnPayFeeDtos.get(0)));
+        businessReturnPayFee.putAll(BeanConvertUtil.beanCovertMap(returnPayFeeDto));
         businessReturnPayFee.putAll(paramInJson);
         ReturnPayFeePo returnPayFeePo = BeanConvertUtil.covertBean(businessReturnPayFee, ReturnPayFeePo.class);
+        returnPayFeePo.setAuditPersonId(userDto.getUserId());
+        returnPayFeePo.setAuditPersonName(userDto.getName());
         int flag = returnPayFeeV1InnerServiceSMOImpl.updateReturnPayFee(returnPayFeePo);
         if (flag < 1) {
             throw new CmdException("鏇存柊鏁版嵁澶辫触");
@@ -407,17 +441,39 @@
         businessReturnPayFee.putAll(BeanConvertUtil.beanCovertMap(feeDetailDtos.get(0)));
         businessReturnPayFee.putAll(paramInJson);
         PayFeeDetailPo returnPayFeePo = BeanConvertUtil.covertBean(businessReturnPayFee, PayFeeDetailPo.class);
+        returnPayFeePo.setPrimeRate(feeDetailDtos.get(0).getPrimeRate());
         int flag = payFeeDetailV1InnerServiceSMOImpl.updatePayFeeDetailNew(returnPayFeePo);
         if (flag < 1) {
             throw new CmdException("鏇存柊鏁版嵁澶辫触");
         }
+
+        // todo 灏嗘敹鎹垹闄�
+        FeeReceiptDetailDto feeReceiptDetailDto = new FeeReceiptDetailDto();
+        feeReceiptDetailDto.setDetailId(returnPayFeePo.getDetailId());
+        feeReceiptDetailDto.setCommunityId(returnPayFeePo.getCommunityId());
+        int count = feeReceiptDetailInnerServiceSMOImpl.queryFeeReceiptDetailsCount(feeReceiptDetailDto);
+        if (count != 1) {
+            return;
+        }
+        FeeReceiptDetailPo feeReceiptDetailPo = new FeeReceiptDetailPo();
+        feeReceiptDetailPo.setDetailId(returnPayFeePo.getDetailId());
+        feeReceiptDetailPo.setCommunityId(returnPayFeePo.getCommunityId());
+        feeReceiptDetailInnerServiceSMOImpl.deleteFeeReceiptDetail(feeReceiptDetailPo);
     }
 
-    public void addFeeDetail(JSONObject paramInJson) {
+    /**
+     * 娣诲姞閫�璐瑰崟
+     *
+     * @param paramInJson
+     * @param returnPayFeeDto
+     */
+    public void addFeeDetail(JSONObject paramInJson, ReturnPayFeeDto returnPayFeeDto) {
         JSONObject businessReturnPayFee = new JSONObject();
         businessReturnPayFee.putAll(paramInJson);
         businessReturnPayFee.put("detailId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId));
         PayFeeDetailPo returnPayFeePo = BeanConvertUtil.covertBean(businessReturnPayFee, PayFeeDetailPo.class);
+        returnPayFeePo.setCashierId(returnPayFeeDto.getApplyPersonId());
+        returnPayFeePo.setCashierName(returnPayFeeDto.getApplyPersonName());
         int flag = payFeeDetailV1InnerServiceSMOImpl.savePayFeeDetailNew(returnPayFeePo);
         if (flag < 1) {
             throw new CmdException("鏇存柊鏁版嵁澶辫触");
@@ -527,6 +583,7 @@
 
     /**
      * 鍙戣捣閫�娆�
+     * 杩欓噷鍙戣捣閫�娆惧悗 閫氳繃databus 瑙﹀彂 ReturnPayFeeMoneyAdapt 杩欎釜绫� 閫�娆�
      *
      * @param feeDetailDto
      */

--
Gitblit v1.8.0