From a5106b61fc8d50609385e1e6d25664a10a11ccf9 Mon Sep 17 00:00:00 2001
From: wuxw <928255095@qq.com>
Date: 星期四, 19 十月 2023 18:38:19 +0800
Subject: [PATCH] 优化代码

---
 java110-bean/src/main/java/com/java110/po/fee/PayFeePo.java                             |   10 ++
 service-fee/src/main/java/com/java110/fee/convertOnce/ICycleConvertOnceFee.java         |   18 +++
 service-fee/src/main/java/com/java110/fee/smo/impl/PayFeeRuleV1InnerServiceSMOImpl.java |   12 ++
 service-fee/src/main/java/com/java110/fee/convertOnce/CycleConvertOnceFeeImpl.java      |  149 +++++++++++++++++++++++++++++
 service-user/src/main/java/com/java110/user/cmd/user/OwnerUserLoginCmd.java             |    1 
 java110-utils/src/main/java/com/java110/utils/util/DateUtil.java                        |   16 +++
 service-fee/src/main/java/com/java110/fee/dao/IPayFeeRuleV1ServiceDao.java              |    7 +
 java110-db/src/main/resources/mapper/fee/PayFeeRuleV1ServiceDaoImplMapper.xml           |   14 ++
 java110-bean/src/main/java/com/java110/dto/user/LoginOwnerResDto.java                   |   10 ++
 java110-interface/src/main/java/com/java110/intf/fee/IPayFeeRuleV1InnerServiceSMO.java  |    7 +
 service-fee/src/main/java/com/java110/fee/dao/impl/PayFeeRuleV1ServiceDaoImpl.java      |   11 ++
 11 files changed, 254 insertions(+), 1 deletions(-)

diff --git a/java110-bean/src/main/java/com/java110/dto/user/LoginOwnerResDto.java b/java110-bean/src/main/java/com/java110/dto/user/LoginOwnerResDto.java
index ff94ccc..eb29c49 100644
--- a/java110-bean/src/main/java/com/java110/dto/user/LoginOwnerResDto.java
+++ b/java110-bean/src/main/java/com/java110/dto/user/LoginOwnerResDto.java
@@ -29,6 +29,8 @@
 
     private String appUserId;
 
+    private String ownerTypeCd;
+
     public String getUserId() {
         return userId;
     }
@@ -116,4 +118,12 @@
     public void setAppUserId(String appUserId) {
         this.appUserId = appUserId;
     }
+
+    public String getOwnerTypeCd() {
+        return ownerTypeCd;
+    }
+
+    public void setOwnerTypeCd(String ownerTypeCd) {
+        this.ownerTypeCd = ownerTypeCd;
+    }
 }
diff --git a/java110-bean/src/main/java/com/java110/po/fee/PayFeePo.java b/java110-bean/src/main/java/com/java110/po/fee/PayFeePo.java
index 633f5a8..55279af 100755
--- a/java110-bean/src/main/java/com/java110/po/fee/PayFeePo.java
+++ b/java110-bean/src/main/java/com/java110/po/fee/PayFeePo.java
@@ -19,6 +19,8 @@
     private String incomeObjId;
     private String startTime;
     private String endTime;
+
+    private String maxTime;
     private String amount;
     private String userId;
     private String bId;
@@ -171,4 +173,12 @@
     public String getDeductFrom() { return deductFrom; }
 
     public void setDeductFrom(String deductFrom) { this.deductFrom = deductFrom; }
+
+    public String getMaxTime() {
+        return maxTime;
+    }
+
+    public void setMaxTime(String maxTime) {
+        this.maxTime = maxTime;
+    }
 }
diff --git a/java110-db/src/main/resources/mapper/fee/PayFeeRuleV1ServiceDaoImplMapper.xml b/java110-db/src/main/resources/mapper/fee/PayFeeRuleV1ServiceDaoImplMapper.xml
index e438d30..a638d63 100644
--- a/java110-db/src/main/resources/mapper/fee/PayFeeRuleV1ServiceDaoImplMapper.xml
+++ b/java110-db/src/main/resources/mapper/fee/PayFeeRuleV1ServiceDaoImplMapper.xml
@@ -14,6 +14,20 @@
         )
     </insert>
 
+    <insert id="savePayFeeRules" parameterType="Map">
+        insert into pay_fee_rule(
+        max_time,amount,fee_type_cd,cur_year_month,batch_id,user_id,income_obj_id,config_id,fee_flag,
+        start_time,end_time,state,rule_id,community_id,payer_obj_type,payer_obj_id
+        ) values
+        <foreach collection="payFeeRulePos" item="item" separator=",">
+            (
+            #{item.maxTime},#{item.amount},#{item.feeTypeCd},#{item.curYearMonth},#{item.batchId},#{item.userId},
+            #{item.incomeObjId},#{item.configId},#{item.feeFlag},#{item.startTime},#{item.endTime},#{item.state},#{item.ruleId},
+            #{item.communityId},#{item.payerObjType},#{item.payerObjId}
+            )
+        </foreach>
+    </insert>
+
 
     <!-- 鏌ヨ璐圭敤瑙勫垯淇℃伅 add by wuxw 2018-07-03 -->
     <select id="getPayFeeRuleInfo" parameterType="Map" resultType="Map">
diff --git a/java110-interface/src/main/java/com/java110/intf/fee/IPayFeeRuleV1InnerServiceSMO.java b/java110-interface/src/main/java/com/java110/intf/fee/IPayFeeRuleV1InnerServiceSMO.java
index b0383d9..92049e7 100644
--- a/java110-interface/src/main/java/com/java110/intf/fee/IPayFeeRuleV1InnerServiceSMO.java
+++ b/java110-interface/src/main/java/com/java110/intf/fee/IPayFeeRuleV1InnerServiceSMO.java
@@ -41,6 +41,11 @@
     @RequestMapping(value = "/savePayFeeRule", method = RequestMethod.POST)
      int savePayFeeRule(@RequestBody  PayFeeRulePo payFeeRulePo);
 
+
+    @RequestMapping(value = "/savePayFeeRules", method = RequestMethod.POST)
+    int savePayFeeRules(@RequestBody List<PayFeeRulePo> payFeeRulePos);
+
+
     @RequestMapping(value = "/updatePayFeeRule", method = RequestMethod.POST)
      int updatePayFeeRule(@RequestBody  PayFeeRulePo payFeeRulePo);
 
@@ -65,4 +70,6 @@
      */
     @RequestMapping(value = "/queryPayFeeRulesCount", method = RequestMethod.POST)
     int queryPayFeeRulesCount(@RequestBody PayFeeRuleDto payFeeRuleDto);
+
+
 }
diff --git a/java110-utils/src/main/java/com/java110/utils/util/DateUtil.java b/java110-utils/src/main/java/com/java110/utils/util/DateUtil.java
index 1489167..805fb4a 100755
--- a/java110-utils/src/main/java/com/java110/utils/util/DateUtil.java
+++ b/java110-utils/src/main/java/com/java110/utils/util/DateUtil.java
@@ -889,4 +889,20 @@
         return resMonth.doubleValue();
 
     }
+
+    public static Date getTargetEndTime(double month, Date startDate) {
+        Calendar endDate = Calendar.getInstance();
+        endDate.setTime(startDate);
+
+        Double intMonth = Math.floor(month);
+        endDate.add(Calendar.MONTH, intMonth.intValue());
+        double doubleMonth = month - intMonth;
+        if (doubleMonth <= 0) {
+            return endDate.getTime();
+        }
+        int futureDay = endDate.getActualMaximum(Calendar.DAY_OF_MONTH);
+        Double hour = doubleMonth * futureDay * 24;
+        endDate.add(Calendar.HOUR_OF_DAY, hour.intValue());
+        return endDate.getTime();
+    }
 }
diff --git a/service-fee/src/main/java/com/java110/fee/convertOnce/CycleConvertOnceFeeImpl.java b/service-fee/src/main/java/com/java110/fee/convertOnce/CycleConvertOnceFeeImpl.java
index 68381af..9c00103 100644
--- a/service-fee/src/main/java/com/java110/fee/convertOnce/CycleConvertOnceFeeImpl.java
+++ b/service-fee/src/main/java/com/java110/fee/convertOnce/CycleConvertOnceFeeImpl.java
@@ -1,13 +1,27 @@
 package com.java110.fee.convertOnce;
 
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.core.log.LoggerFactory;
+import com.java110.dto.fee.FeeConfigDto;
 import com.java110.dto.fee.FeeDto;
+import com.java110.fee.dao.IPayFeeConfigV1ServiceDao;
+import com.java110.fee.dao.impl.PayFeeV1ServiceDaoImpl;
 import com.java110.intf.fee.IFeeInnerServiceSMO;
+import com.java110.intf.fee.IPayFeeConfigV1InnerServiceSMO;
 import com.java110.intf.fee.IPayFeeRuleV1InnerServiceSMO;
 import com.java110.po.fee.PayFeePo;
+import com.java110.po.payFeeRule.PayFeeRulePo;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.StringUtil;
+import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -17,8 +31,14 @@
 @Service
 public class CycleConvertOnceFeeImpl implements ICycleConvertOnceFee {
 
+    private static Logger logger = LoggerFactory.getLogger(PayFeeV1ServiceDaoImpl.class);
+
+
     @Autowired
     private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
+
+    @Autowired
+    private IPayFeeConfigV1InnerServiceSMO payFeeConfigV1InnerServiceSMOImpl;
 
     @Autowired
     private IPayFeeRuleV1InnerServiceSMO payFeeRuleV1InnerServiceSMOImpl;
@@ -41,6 +61,27 @@
 
         //todo 涓氬姟澶勭悊
 
+        List<PayFeeRulePo> payFeeRulePos = new ArrayList<>();
+
+        PayFeeRulePo tmpPayFeeRulePo = null;
+        String curYearMonth = "";
+        for (PayFeePo tmpPayFeePo : payFeePos) {
+            tmpPayFeeRulePo = BeanConvertUtil.covertBean(tmpPayFeePo, PayFeeRulePo.class);
+            tmpPayFeeRulePo.setRuleId(GenerateCodeFactory.getGeneratorId("11"));
+            curYearMonth = DateUtil.getFormatTimeStringB(DateUtil.getDateFromStringB(tmpPayFeePo.getEndTime()));
+            tmpPayFeeRulePo.setCurYearMonth(curYearMonth);
+            payFeeRulePos.add(tmpPayFeeRulePo);
+        }
+
+        if (payFeeRulePos.isEmpty()) {
+            return 0;
+        }
+
+        //todo 淇濆瓨瑙勫垯
+        payFeeRuleV1InnerServiceSMOImpl.savePayFeeRules(payFeeRulePos);
+
+        //todo 鏍规嵁瑙勫垯鐢熸垚璐圭敤
+        rulesGeneratePayFees(payFeeRulePos);
 
         return 0;
     }
@@ -61,4 +102,112 @@
     public int covertRuleIdsPayFee(List<String> ruleIds) {
         return 0;
     }
+
+    @Override
+    public int rulesGeneratePayFees(List<PayFeeRulePo> payFeeRulePos) {
+
+        if (payFeeRulePos == null || payFeeRulePos.isEmpty()) {
+            return 0;
+        }
+
+        for (PayFeeRulePo tmpPayFeeRulePo : payFeeRulePos) {
+            try {
+                //todo 鍗曚釜璐圭敤澶勭悊
+                ruleGeneratePayFee(tmpPayFeeRulePo);
+            } catch (Exception e) {
+                logger.error("澶勭悊寮傚父 ruleId" + tmpPayFeeRulePo.getRuleId(), e);
+            }
+        }
+        return payFeeRulePos.size();
+    }
+
+    /**
+     * @param tmpPayFeeRulePo
+     */
+    public int ruleGeneratePayFee(PayFeeRulePo tmpPayFeeRulePo) {
+
+        //todo 鏌ヨ璐圭敤椤逛俊鎭�
+        FeeConfigDto feeConfigDto = new FeeConfigDto();
+        feeConfigDto.setConfigId(tmpPayFeeRulePo.getConfigId());
+        feeConfigDto.setCommunityId(tmpPayFeeRulePo.getCommunityId());
+        List<FeeConfigDto> feeConfigDtos = payFeeConfigV1InnerServiceSMOImpl.queryPayFeeConfigs(feeConfigDto);
+
+        Assert.listOnlyOne(feeConfigDtos, "璐圭敤椤逛笉瀛樺湪锛宑onfigId=" + tmpPayFeeRulePo.getConfigId());
+
+        //todo 璁$畻鐩爣 缁撴潫鏃堕棿
+        Date targetEndTime = computeTargetEndTime(tmpPayFeeRulePo, feeConfigDtos.get(0));
+
+        //todo 鍒涘缓 pay_fee 鍜� attrs 鏁版嵁
+
+        List<PayFeePo> payFeePos = new ArrayList<>();
+        for()
+
+
+        return 0;
+    }
+
+    /**
+     * 璁$畻鐩爣缁撴潫鏃堕棿
+     *
+     * @param tmpPayFeeRulePo
+     * @param feeConfigDto
+     * @return
+     */
+    private Date computeTargetEndTime(PayFeeRulePo tmpPayFeeRulePo, FeeConfigDto feeConfigDto) {
+
+        Date targetEndDate = null;
+        //todo 鍒ゆ柇褰撳墠璐圭敤鏄惁宸茬粨鏉�
+        if (FeeDto.STATE_FINISH.equals(tmpPayFeeRulePo.getState())) {
+            targetEndDate = DateUtil.getDateFromStringB(tmpPayFeeRulePo.getEndTime());
+            return targetEndDate;
+        }
+
+        Calendar preEndTimeCal = Calendar.getInstance();
+        preEndTimeCal.setTime(DateUtil.getDateFromStringB(tmpPayFeeRulePo.getEndTime()));
+        if (StringUtil.isNumber(feeConfigDto.getPrepaymentPeriod())) {
+            preEndTimeCal.add(Calendar.DAY_OF_MONTH, Integer.parseInt(feeConfigDto.getPrepaymentPeriod()) * -1);
+        }
+        Date preEndTime = preEndTimeCal.getTime();
+        Date maxEndTime = DateUtil.getDateFromStringB(tmpPayFeeRulePo.getMaxTime());
+
+        Date billEndTime = DateUtil.getCurrentDate();
+        //寤鸿处鏃堕棿
+        Date startDate = DateUtil.getDateFromStringB(tmpPayFeeRulePo.getStartTime());
+        //璁¤垂璧峰鏃堕棿
+        Date endDate = DateUtil.getDateFromStringB(tmpPayFeeRulePo.getEndTime());
+        //缂磋垂鍛ㄦ湡
+        long paymentCycle = Long.parseLong(feeConfigDto.getPaymentCycle());
+        // 褰撳墠鏃堕棿 - 寮�濮嬫椂闂�  = 鏈堜唤
+        double mulMonth = 0.0;
+        mulMonth = DateUtil.dayCompare(startDate, billEndTime);
+
+        // 鏈堜唤/ 鍛ㄦ湡 = 杞暟锛堝悜涓婂彇鏁达級
+        double round = 0.0;
+        if ("1200".equals(feeConfigDto.getPaymentCd())) { // 1200棰勪粯璐�
+            round = Math.floor(mulMonth / paymentCycle) + 1;
+        } else { //2100鍚庝粯璐�
+            round = Math.floor(mulMonth / paymentCycle);
+        }
+        // 杞暟 * 鍛ㄦ湡 * 30 + 寮�濮嬫椂闂� = 鐩爣 鍒版湡鏃堕棿
+        targetEndDate = DateUtil.getTargetEndTime(round * paymentCycle, startDate);//鐩爣缁撴潫鏃堕棿
+
+        //todo 濡傛灉 鍒颁簡 棰勪粯鏈� 浜х敓涓嬩釜鍛ㄦ湡鐨勮垂鐢�
+        if (DateUtil.getFormatTimeStringB(targetEndDate).equals(DateUtil.getFormatTimeStringB(endDate))
+                && DateUtil.getCurrentDate().getTime() > preEndTime.getTime()
+        ) {
+            targetEndDate = DateUtil.getTargetEndTime((round + 1) * paymentCycle, startDate);//鐩爣缁撴潫鏃堕棿
+        }
+
+
+        //todo 璐圭敤椤圭殑缁撴潫鏃堕棿<缂磋垂鐨勭粨鏉熸椂闂�  璐圭敤蹇粨鏉熶簡   鍙栬垂鐢ㄩ」鐨勭粨鏉熸椂闂�
+        if (maxEndTime.getTime() < targetEndDate.getTime()) {
+            targetEndDate = maxEndTime;
+        }
+
+        if (DateUtil.getDateFromStringB(tmpPayFeeRulePo.getEndTime()).getTime() > targetEndDate.getTime()) {
+            targetEndDate = DateUtil.getDateFromStringB(tmpPayFeeRulePo.getEndTime());
+        }
+
+        return targetEndDate;
+    }
 }
diff --git a/service-fee/src/main/java/com/java110/fee/convertOnce/ICycleConvertOnceFee.java b/service-fee/src/main/java/com/java110/fee/convertOnce/ICycleConvertOnceFee.java
index 77ec0c4..1edc96b 100644
--- a/service-fee/src/main/java/com/java110/fee/convertOnce/ICycleConvertOnceFee.java
+++ b/service-fee/src/main/java/com/java110/fee/convertOnce/ICycleConvertOnceFee.java
@@ -1,6 +1,7 @@
 package com.java110.fee.convertOnce;
 
 import com.java110.po.fee.PayFeePo;
+import com.java110.po.payFeeRule.PayFeeRulePo;
 
 import java.util.List;
 
@@ -36,8 +37,25 @@
 
     /**
      * 鏍规嵁 璐圭敤瑙勫垯杞崲
+     *
      * @param ruleIds 璐圭敤瑙勫垯
      * @return 澶т簬1 杞崲鎴愬姛 0 杞崲澶辫触
      */
     int covertRuleIdsPayFee(List<String> ruleIds);
+
+    /**
+     * 鏍规嵁瑙勫垯鐢熸垚 涓�娆℃�ц垂鐢�
+     *
+     * @param payFeeRulePos
+     * @return
+     */
+    int rulesGeneratePayFees(List<PayFeeRulePo> payFeeRulePos);
+
+    /**
+     * 鏍规嵁瑙勫垯鐢熸垚 涓�娆℃�ц垂鐢�
+     *
+     * @param payFeeRulePo
+     * @return
+     */
+    int ruleGeneratePayFee(PayFeeRulePo payFeeRulePo);
 }
diff --git a/service-fee/src/main/java/com/java110/fee/dao/IPayFeeRuleV1ServiceDao.java b/service-fee/src/main/java/com/java110/fee/dao/IPayFeeRuleV1ServiceDao.java
index 922e9c7..05d1ccb 100644
--- a/service-fee/src/main/java/com/java110/fee/dao/IPayFeeRuleV1ServiceDao.java
+++ b/service-fee/src/main/java/com/java110/fee/dao/IPayFeeRuleV1ServiceDao.java
@@ -70,4 +70,11 @@
      */
     int queryPayFeeRulesCount(Map info);
 
+    /**
+     * 淇濆瓨鍒涘缓璐圭敤瑙勫垯
+     *
+     * @param info
+     * @return
+     */
+    int savePayFeeRules(Map info);
 }
diff --git a/service-fee/src/main/java/com/java110/fee/dao/impl/PayFeeRuleV1ServiceDaoImpl.java b/service-fee/src/main/java/com/java110/fee/dao/impl/PayFeeRuleV1ServiceDaoImpl.java
index 4c265a0..ebd0404 100644
--- a/service-fee/src/main/java/com/java110/fee/dao/impl/PayFeeRuleV1ServiceDaoImpl.java
+++ b/service-fee/src/main/java/com/java110/fee/dao/impl/PayFeeRuleV1ServiceDaoImpl.java
@@ -60,6 +60,16 @@
         return saveFlag;
     }
 
+    @Override
+    public int savePayFeeRules(Map info) {
+        logger.debug("淇濆瓨 savePayFeeRules 鍏ュ弬 info : {}",info);
+
+        int saveFlag = sqlSessionTemplate.insert("payFeeRuleV1ServiceDaoImpl.savePayFeeRules",info);
+
+        return saveFlag;
+    }
+
+
 
     /**
      * 鏌ヨ璐圭敤瑙勫垯淇℃伅锛坕nstance锛�
@@ -109,4 +119,5 @@
     }
 
 
+
 }
diff --git a/service-fee/src/main/java/com/java110/fee/smo/impl/PayFeeRuleV1InnerServiceSMOImpl.java b/service-fee/src/main/java/com/java110/fee/smo/impl/PayFeeRuleV1InnerServiceSMOImpl.java
index 8310328..b31d1c6 100644
--- a/service-fee/src/main/java/com/java110/fee/smo/impl/PayFeeRuleV1InnerServiceSMOImpl.java
+++ b/service-fee/src/main/java/com/java110/fee/smo/impl/PayFeeRuleV1InnerServiceSMOImpl.java
@@ -29,7 +29,9 @@
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 绫昏〃杩帮細 鏈嶅姟涔嬪墠璋冪敤鐨勬帴鍙e疄鐜扮被锛屼笉瀵瑰鎻愪緵鎺ュ彛鑳藉姏 鍙敤浜庢帴鍙e缓璋冪敤
@@ -52,7 +54,15 @@
         return saveFlag;
     }
 
-     @Override
+    @Override
+    public int savePayFeeRules(@RequestBody List<PayFeeRulePo> payFeeRulePos) {
+        Map info = new HashMap();
+        info.put("payFeeRulePos",payFeeRulePos);
+        int saveFlag = payFeeRuleV1ServiceDaoImpl.savePayFeeRules(info);
+        return saveFlag;
+    }
+
+    @Override
     public int updatePayFeeRule(@RequestBody  PayFeeRulePo payFeeRulePo) {
         int saveFlag = payFeeRuleV1ServiceDaoImpl.updatePayFeeRuleInfo(BeanConvertUtil.beanCovertMap(payFeeRulePo));
         return saveFlag;
diff --git a/service-user/src/main/java/com/java110/user/cmd/user/OwnerUserLoginCmd.java b/service-user/src/main/java/com/java110/user/cmd/user/OwnerUserLoginCmd.java
index bc8550a..ffaa491 100644
--- a/service-user/src/main/java/com/java110/user/cmd/user/OwnerUserLoginCmd.java
+++ b/service-user/src/main/java/com/java110/user/cmd/user/OwnerUserLoginCmd.java
@@ -171,6 +171,7 @@
         loginOwnerResDto.setCommunityName(communityDtos.get(0).getName());
         loginOwnerResDto.setToken(token);
         loginOwnerResDto.setKey(newKey);
+        loginOwnerResDto.setOwnerTypeCd(ownerDto.getOwnerTypeCd());
         loginOwnerResDto.setAppUserId(ownerAppUserDtos.get(0).getAppUserId());
         context.setResponseEntity(ResultVo.createResponseEntity(loginOwnerResDto));
 

--
Gitblit v1.8.0