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));