package com.java110.fee.cmd.fee; import com.alibaba.fastjson.JSONObject; import com.java110.core.annotation.Java110Cmd; import com.java110.core.annotation.Java110Transactional; import com.java110.core.context.ICmdDataFlowContext; import com.java110.core.event.cmd.Cmd; import com.java110.core.event.cmd.CmdEvent; import com.java110.core.factory.GenerateCodeFactory; import com.java110.dto.fee.FeeAttrDto; import com.java110.dto.fee.FeeConfigDto; import com.java110.dto.fee.FeeDto; import com.java110.fee.feeMonth.IPayFeeMonth; import com.java110.fee.smo.impl.FeeAttrInnerServiceSMOImpl; import com.java110.intf.community.IRoomInnerServiceSMO; import com.java110.intf.fee.IFeeInnerServiceSMO; import com.java110.intf.fee.IPayFeeV1InnerServiceSMO; import com.java110.po.fee.FeeAttrPo; import com.java110.po.fee.PayFeePo; import com.java110.utils.exception.CmdException; import com.java110.utils.util.Assert; import com.java110.utils.util.BeanConvertUtil; import com.java110.utils.util.ListUtil; import com.java110.utils.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import java.util.ArrayList; import java.util.List; @Java110Cmd(serviceCode = "fee.updateFee") public class UpdateFeeCmd extends Cmd { private static final int DEFAULT_ADD_FEE_COUNT = 200; @Autowired private IRoomInnerServiceSMO roomInnerServiceSMOImpl; @Autowired private IFeeInnerServiceSMO feeInnerServiceSMOImpl; @Autowired private IPayFeeV1InnerServiceSMO payFeeV1InnerServiceSMOImpl; @Autowired private FeeAttrInnerServiceSMOImpl feeAttrInnerServiceSMOImpl; @Autowired private IPayFeeMonth payFeeMonthImpl; @Override public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException { // super.validatePageInfo(pd); Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区ID"); Assert.hasKeyAndValue(reqJson, "feeId", "未包含feeId"); Assert.hasKeyAndValue(reqJson, "startTime", "未包含开始时间"); Assert.hasKeyAndValue(reqJson, "endTime", "未包含结束时间"); Assert.hasKeyAndValue(reqJson, "maxEndTime", "未包含结束时间"); if(!reqJson.getString("maxEndTime").contains(":")){ reqJson.put("maxEndTime",reqJson.getString("maxEndTime")+" 23:59:59"); } FeeDto feeDto = new FeeDto(); feeDto.setCommunityId(reqJson.getString("communityId")); feeDto.setFeeId(reqJson.getString("feeId")); List feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto); Assert.listOnlyOne(feeDtos, "未查询到费用信息 或查询到多条" + reqJson); } @Override @Java110Transactional public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException { PayFeePo payFeePo = BeanConvertUtil.covertBean(reqJson, PayFeePo.class); int flag = payFeeV1InnerServiceSMOImpl.updatePayFee(payFeePo); if (flag < 1) { throw new CmdException("修改费用"); } // todo 重新计算离散月 payFeeMonthImpl.deleteFeeMonth(payFeePo.getFeeId(),payFeePo.getCommunityId()); payFeeMonthImpl.doGeneratorOrRefreshFeeMonth(payFeePo.getFeeId(),payFeePo.getCommunityId()); // todo 欠费重新生成 List feeIds= new ArrayList<>(); feeIds.add(payFeePo.getFeeId()); payFeeMonthImpl.doGeneratorOweFees(feeIds,payFeePo.getCommunityId()); if (reqJson.containsKey("maxEndTime") && !StringUtil.isEmpty(reqJson.getString("maxEndTime"))) { FeeAttrDto feeAttrDto = new FeeAttrDto(); feeAttrDto.setFeeId(payFeePo.getFeeId()); feeAttrDto.setSpecCd(FeeAttrDto.SPEC_CD_ONCE_FEE_DEADLINE_TIME); List feeAttrDtos = feeAttrInnerServiceSMOImpl.queryFeeAttrs(feeAttrDto); FeeAttrPo feeAttrPo = new FeeAttrPo(); feeAttrPo.setFeeId(payFeePo.getFeeId()); feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_ONCE_FEE_DEADLINE_TIME); feeAttrPo.setValue(reqJson.getString("maxEndTime")); feeAttrPo.setCommunityId(reqJson.getString("communityId")); if (ListUtil.isNull(feeAttrDtos)) { feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId)); feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo); } else { feeAttrInnerServiceSMOImpl.updateFeeAttr(feeAttrPo); } } if (!reqJson.containsKey("computingFormula") || !FeeConfigDto.COMPUTING_FORMULA_RANT_RATE.equals(reqJson.getString("computingFormula"))) { return; } if (reqJson.containsKey("rate")) { FeeAttrDto feeAttrDto = new FeeAttrDto(); feeAttrDto.setFeeId(payFeePo.getFeeId()); feeAttrDto.setSpecCd(FeeAttrDto.SPEC_CD_RATE); List feeAttrDtos = feeAttrInnerServiceSMOImpl.queryFeeAttrs(feeAttrDto); FeeAttrPo feeAttrPo = new FeeAttrPo(); feeAttrPo.setFeeId(payFeePo.getFeeId()); feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_RATE); feeAttrPo.setValue(reqJson.getString("rate")); feeAttrPo.setCommunityId(reqJson.getString("communityId")); if (feeAttrDtos == null || feeAttrDtos.size() < 1) { feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId)); feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo); } else { feeAttrInnerServiceSMOImpl.updateFeeAttr(feeAttrPo); } } if (reqJson.containsKey("rateCycle")) { FeeAttrDto feeAttrDto = new FeeAttrDto(); feeAttrDto.setFeeId(payFeePo.getFeeId()); feeAttrDto.setSpecCd(FeeAttrDto.SPEC_CD_RATE_CYCLE); List feeAttrDtos = feeAttrInnerServiceSMOImpl.queryFeeAttrs(feeAttrDto); FeeAttrPo feeAttrPo = new FeeAttrPo(); feeAttrPo.setFeeId(payFeePo.getFeeId()); feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_RATE_CYCLE); feeAttrPo.setValue(reqJson.getString("rateCycle")); feeAttrPo.setCommunityId(reqJson.getString("communityId")); if (feeAttrDtos == null || feeAttrDtos.size() < 1) { feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId)); feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo); } else { feeAttrInnerServiceSMOImpl.updateFeeAttr(feeAttrPo); } } if (reqJson.containsKey("rateStartTime")) { FeeAttrDto feeAttrDto = new FeeAttrDto(); feeAttrDto.setFeeId(payFeePo.getFeeId()); feeAttrDto.setSpecCd(FeeAttrDto.SPEC_CD_RATE_START_TIME); List feeAttrDtos = feeAttrInnerServiceSMOImpl.queryFeeAttrs(feeAttrDto); FeeAttrPo feeAttrPo = new FeeAttrPo(); feeAttrPo.setFeeId(payFeePo.getFeeId()); feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_RATE_START_TIME); feeAttrPo.setValue(reqJson.getString("rateStartTime")); feeAttrPo.setCommunityId(reqJson.getString("communityId")); if (feeAttrDtos == null || feeAttrDtos.size() < 1) { feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId)); feeAttrInnerServiceSMOImpl.saveFeeAttr(feeAttrPo); } else { feeAttrInnerServiceSMOImpl.updateFeeAttr(feeAttrPo); } } } }