wuxw
2023-10-19 a5106b61fc8d50609385e1e6d25664a10a11ccf9
优化代码
11个文件已修改
255 ■■■■■ 已修改文件
java110-bean/src/main/java/com/java110/dto/user/LoginOwnerResDto.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/po/fee/PayFeePo.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/fee/PayFeeRuleV1ServiceDaoImplMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-interface/src/main/java/com/java110/intf/fee/IPayFeeRuleV1InnerServiceSMO.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-utils/src/main/java/com/java110/utils/util/DateUtil.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/convertOnce/CycleConvertOnceFeeImpl.java 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/convertOnce/ICycleConvertOnceFee.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/dao/IPayFeeRuleV1ServiceDao.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/dao/impl/PayFeeRuleV1ServiceDaoImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-fee/src/main/java/com/java110/fee/smo/impl/PayFeeRuleV1InnerServiceSMOImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-user/src/main/java/com/java110/user/cmd/user/OwnerUserLoginCmd.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
    }
}
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;
    }
}
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">
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);
}
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();
    }
}
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, "费用项不存在,configId=" + 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;
    }
}
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);
}
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);
}
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;
    }
    /**
     * 查询费用规则信息(instance)
@@ -109,4 +119,5 @@
    }
}
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;
/**
 * 类表述: 服务之前调用的接口实现类,不对外提供接口能力 只用于接口建调用
@@ -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;
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));