From 2551631f71dbd6291794b84af8d2f7ded1463521 Mon Sep 17 00:00:00 2001
From: wuxw <928255095@qq.com>
Date: 星期四, 04 一月 2024 22:49:13 +0800
Subject: [PATCH] 优化改造完成批量缴费功能
---
service-fee/src/main/java/com/java110/fee/cmd/fee/PayBatchFeeCmd.java | 594 ++++++++++++++++++++++++-----------------------------------
1 files changed, 241 insertions(+), 353 deletions(-)
diff --git a/service-fee/src/main/java/com/java110/fee/cmd/fee/PayBatchFeeCmd.java b/service-fee/src/main/java/com/java110/fee/cmd/fee/PayBatchFeeCmd.java
index 613059f..e3f35d7 100644
--- a/service-fee/src/main/java/com/java110/fee/cmd/fee/PayBatchFeeCmd.java
+++ b/service-fee/src/main/java/com/java110/fee/cmd/fee/PayBatchFeeCmd.java
@@ -11,15 +11,15 @@
import com.java110.core.factory.Java110TransactionalFactory;
import com.java110.core.log.LoggerFactory;
import com.java110.core.smo.IComputeFeeSMO;
-import com.java110.dto.fee.FeeAttrDto;
-import com.java110.dto.fee.FeeConfigDto;
-import com.java110.dto.fee.FeeDetailDto;
-import com.java110.dto.fee.FeeDto;
+import com.java110.dto.account.AccountDto;
+import com.java110.dto.fee.*;
import com.java110.dto.owner.OwnerCarDto;
import com.java110.dto.parking.ParkingSpaceDto;
import com.java110.dto.repair.RepairDto;
import com.java110.dto.repair.RepairUserDto;
import com.java110.dto.user.UserDto;
+import com.java110.fee.bmo.fee.IFinishFeeNotify;
+import com.java110.intf.acct.IAccountInnerServiceSMO;
import com.java110.intf.community.*;
import com.java110.intf.fee.*;
import com.java110.intf.user.IOwnerCarInnerServiceSMO;
@@ -36,20 +36,14 @@
import com.java110.utils.exception.CmdException;
import com.java110.utils.exception.ListenerExecuteException;
import com.java110.utils.lock.DistributedLock;
-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 com.java110.utils.util.*;
import com.java110.vo.ResultVo;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import java.math.BigDecimal;
import java.text.ParseException;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
@Java110Cmd(serviceCode = "fee.payBatchFee")
public class PayBatchFeeCmd extends Cmd {
@@ -65,38 +59,7 @@
private IPayFeeDetailV1InnerServiceSMO payFeeDetailNewV1InnerServiceSMOImpl;
@Autowired
- private IFeeAttrInnerServiceSMO feeAttrInnerServiceSMOImpl;
-
- @Autowired
- private IRoomInnerServiceSMO roomInnerServiceSMOImpl;
-
- @Autowired
private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl;
-
- @Autowired
- private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
- @Autowired
- private IOwnerCarNewV1InnerServiceSMO ownerCarNewV1InnerServiceSMOImpl;
-
- @Autowired
- private IFeeReceiptDetailInnerServiceSMO feeReceiptDetailInnerServiceSMOImpl;
-
- @Autowired
- private IRepairUserInnerServiceSMO repairUserInnerServiceSMO;
-
- @Autowired
- private IRepairInnerServiceSMO repairInnerServiceSMO;
-
- @Autowired
- private IApplyRoomDiscountInnerServiceSMO applyRoomDiscountInnerServiceSMOImpl;
-
- @Autowired
- private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
-
- @Autowired
- private IRepairPoolV1InnerServiceSMO repairPoolNewV1InnerServiceSMOImpl;
- @Autowired
- private IRepairUserV1InnerServiceSMO repairUserNewV1InnerServiceSMOImpl;
@Autowired
private IComputeFeeSMO computeFeeSMOImpl;
@@ -106,6 +69,12 @@
@Autowired
private IFeeReceiptInnerServiceSMO feeReceiptInnerServiceSMOImpl;
+
+ @Autowired
+ private IFinishFeeNotify finishFeeNotifyImpl;
+
+ @Autowired
+ private IAccountInnerServiceSMO accountInnerServiceSMOImpl;
@Override
@@ -118,28 +87,42 @@
JSONArray fees = reqJson.getJSONArray("fees");
- if (fees == null || fees.size() < 1) {
+ if (ListUtil.isNull(fees)) {
throw new CmdException("鏈寘鍚垂鐢�");
}
+
+ //todo 鏌ヨ鐢ㄦ埛淇℃伅
+ String userId = cmdDataFlowContext.getReqHeaders().get("user-id");
+ UserDto userDto = new UserDto();
+ userDto.setUserId(userId);
+ List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
+ Assert.listOnlyOne(userDtos, "鐢ㄦ埛鏈櫥褰�");
+
+
JSONObject paramInObj = null;
+ List<PayFeeDataDto> feeDataDtos = new ArrayList<>();
+ PayFeeDataDto payFeeDataDto = null;
for (int feeIndex = 0; feeIndex < fees.size(); feeIndex++) {
paramInObj = fees.getJSONObject(feeIndex);
- //鍒ゆ柇鏄惁 璐圭敤鐘舵�佷负缂磋垂缁撴潫
+ Assert.hasKeyAndValue(paramInObj, "feeId", "鏈寘鍚垂鐢↖D");
+ Assert.hasKeyAndValue(paramInObj, "tempCycle", "鏈寘鍚即璐瑰懆鏈熺被鍨�");
+ Assert.hasKeyAndValue(paramInObj, "primeRate", "鏈寘鍚即璐圭即璐规柟寮�");
+ Assert.hasKeyAndValue(paramInObj, "receivedAmount", "鏈寘鍚疄鏀堕噾棰�");
+ //todo 鍒ゆ柇鏄惁 璐圭敤鐘舵�佷负缂磋垂缁撴潫
FeeDto feeDto = new FeeDto();
feeDto.setFeeId(paramInObj.getString("feeId"));
feeDto.setCommunityId(reqJson.getString("communityId"));
List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
Assert.listOnlyOne(feeDtos, "浼犲叆璐圭敤ID閿欒");
- feeDto = feeDtos.get(0);
- if (FeeDto.STATE_FINISH.equals(feeDto.getState())) {
+ if (FeeDto.STATE_FINISH.equals(feeDtos.get(0).getState())) {
throw new IllegalArgumentException("鏀惰垂宸茬粡缁撴潫锛屼笉鑳藉啀缂磋垂");
}
- Date endTime = feeDto.getEndTime();
+ Date endTime = feeDtos.get(0).getEndTime();
FeeConfigDto feeConfigDto = new FeeConfigDto();
- feeConfigDto.setConfigId(feeDto.getConfigId());
+ feeConfigDto.setConfigId(feeDtos.get(0).getConfigId());
feeConfigDto.setCommunityId(paramInObj.getString("communityId"));
List<FeeConfigDto> feeConfigDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
- if (feeConfigDtos == null || feeConfigDtos.size() != 1) {
+ if (ListUtil.isNull(feeConfigDtos)) {
throw new IllegalArgumentException("璐圭敤椤逛笉瀛樺湪");
}
Date maxEndTime = feeDtos.get(0).getDeadlineTime();
@@ -154,345 +137,196 @@
throw new IllegalArgumentException("缂磋垂鍛ㄦ湡瓒呰繃 缂磋垂缁撴潫鏃堕棿,璇风敤鎸夌粨鏉熸椂闂存柟寮忕即璐�");
}
}
-
+ //todo 灏佽鏁版嵁
+ payFeeDataDto = new PayFeeDataDto();
+ payFeeDataDto.setFeeDto(feeDtos.get(0));
+ payFeeDataDto.setFeeConfigDto(feeConfigDtos.get(0));
+ payFeeDataDto.setCommunityId(reqJson.getString("communityId"));
+ payFeeDataDto.setTempCycle(paramInObj.getString("tempCycle"));
+ payFeeDataDto.setCustEndTime(paramInObj.getString("custEndTime"));
+ payFeeDataDto.setPrimeRate(paramInObj.getString("primeRate"));
+ payFeeDataDto.setRemark(paramInObj.getString("remark"));
+ payFeeDataDto.setReceivedAmount(paramInObj.getString("receivedAmount"));
+ payFeeDataDto.setCashierId(userDtos.get(0).getUserId());
+ payFeeDataDto.setCashierName(userDtos.get(0).getName());
+ payFeeDataDto.setFeeId(paramInObj.getString("feeId"));
+ feeDataDtos.add(payFeeDataDto);
}
+
+ //todo 璐︽埛鎶垫墸
+ ifHasAccount(reqJson, feeDataDtos);
+
+ reqJson.put("feeDataDtos", feeDataDtos);
+
+
}
+
@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, "鐢ㄦ埛鏈櫥褰�");
-
- //todo 鐢熸垚鏀舵嵁缂栧彿
- String receiptCode = feeReceiptInnerServiceSMOImpl.generatorReceiptCode(reqJson.getString("communityId"));
-
+ //todo 灏佽濂界殑鍙傛暟
+ List<PayFeeDataDto> feeDataDtos = (List<PayFeeDataDto>) reqJson.get("feeDataDtos");
+ String communityId = reqJson.getString("communityId");
String payOrderId = reqJson.getString("payOrderId");
-
- JSONArray fees = reqJson.getJSONArray("fees");
- JSONObject paramInObj = null;
+ //todo 鐢熸垚鏀舵嵁缂栧彿
+ String receiptCode = feeReceiptInnerServiceSMOImpl.generatorReceiptCode(communityId);
JSONArray details = new JSONArray();
- for (int feeIndex = 0; feeIndex < fees.size(); feeIndex++) {
- try {
- paramInObj = fees.getJSONObject(feeIndex);
- doDeal(paramInObj, reqJson.getString("communityId"),receiptCode, cmdDataFlowContext, userDtos.get(0),payOrderId);
- } catch (Exception e) {
- logger.error("澶勭悊寮傚父", e);
- throw new CmdException(e.getMessage());
+ //鑾峰彇璁㈠崟ID
+ String oId = Java110TransactionalFactory.getOId();
+
+ for (PayFeeDataDto payFeeDataDto : feeDataDtos) {
+ payFeeDataDto.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId));
+ payFeeDataDto.setPayOrderId(oId);
+ // todo 濡傛灉 鎵爜鏋敮浠� 杈撳叆鏀粯璁㈠崟ID
+ if (!StringUtil.isEmpty(payOrderId)) {
+ payFeeDataDto.setPayOrderId(payOrderId);
}
- details.add(paramInObj.getString("detailId"));
+
+ String requestId = DistributedLock.getLockUUID();
+ String key = this.getClass().getSimpleName() + payFeeDataDto.getFeeId();
+ DistributedLock.waitGetDistributedLock(key, requestId);
+ try {
+ doPayFee(payFeeDataDto, receiptCode);
+ } finally {
+ DistributedLock.releaseDistributedLock(key, requestId);
+ }
+ details.add(payFeeDataDto.getDetailId());
}
JSONObject data = new JSONObject();
- data.put("details",details);
+ data.put("details", details);
cmdDataFlowContext.setResponseEntity(ResultVo.createResponseEntity(data));
}
- private void doDeal(JSONObject paramObj, String communityId,String receiptCode,
- ICmdDataFlowContext cmdDataFlowContext,
- UserDto userDto,
- String payOrderId) throws Exception {
- paramObj.put("communityId", communityId);
- //鑾峰彇璁㈠崟ID
- String oId = Java110TransactionalFactory.getOId();
+ private void doPayFee(PayFeeDataDto payFeeDataDto, String receiptCode) {
- //寮�濮嬮攣浠g爜
- PayFeePo payFeePo = null;
- String requestId = DistributedLock.getLockUUID();
- String key = this.getClass().getSimpleName() + paramObj.get("feeId");
- try {
- DistributedLock.waitGetDistributedLock(key, requestId);
- JSONObject feeDetail = addFeeDetail(paramObj);
- PayFeeDetailPo payFeeDetailPo = BeanConvertUtil.covertBean(feeDetail, PayFeeDetailPo.class);
- if (StringUtil.isEmpty(oId)) {
- oId = payFeeDetailPo.getDetailId();
- }
- payFeeDetailPo.setPayOrderId(oId);
- // todo 濡傛灉 鎵爜鏋敮浠� 杈撳叆鏀粯璁㈠崟ID
- if(!StringUtil.isEmpty(payOrderId)){
- payFeeDetailPo.setPayOrderId(payOrderId);
- }
- payFeeDetailPo.setCashierId(userDto.getUserId());
- payFeeDetailPo.setCashierName(userDto.getName());
- payFeeDetailPo.setOpenInvoice("N");
- //todo 缂撳瓨鏀舵嵁缂栧彿
- CommonCache.setValue(payFeeDetailPo.getDetailId()+CommonCache.RECEIPT_CODE,receiptCode,CommonCache.DEFAULT_EXPIRETIME_TWO_MIN);
- int flag = payFeeDetailNewV1InnerServiceSMOImpl.savePayFeeDetailNew(payFeeDetailPo);
- if (flag < 1) {
- throw new CmdException("缂磋垂澶辫触");
- }
- JSONObject fee = modifyFee(paramObj);
- payFeePo = BeanConvertUtil.covertBean(fee, PayFeePo.class);
- flag = payFeeV1InnerServiceSMOImpl.updatePayFee(payFeePo);
- if (flag < 1) {
- throw new CmdException("缂磋垂澶辫触");
- }
- } finally {
- DistributedLock.releaseDistributedLock(key,requestId);
+ PayFeeDetailPo payFeeDetailPo = payFeeDataDto;
+ payFeeDetailPo.setOpenInvoice("N");
+ payFeeDetailPo.setState(FeeDetailDto.STATE_NORMAL);
+ payFeeDetailPo.setStartTime(DateUtil.getFormatTimeStringA(payFeeDataDto.getFeeDto().getEndTime()));
+
+ //todo 璁$畻 缁撴潫鏃堕棿 搴旀敹 缂磋垂鍛ㄦ湡
+ /**
+ * payFeeDetailPo.setCycles(cycles.doubleValue() + "");
+ * payFeeDetailPo.setEndTime(DateUtil.getFormatTimeStringA(targetEndTime));
+ * payFeeDetailPo.setReceivableAmount(receivableAmount);
+ * payFeeDetailPo.setPayableAmount(receivableAmount);
+ */
+ computeEndTimeCycleAmount(payFeeDataDto, payFeeDetailPo);
+
+ //todo 缂撳瓨鏀舵嵁缂栧彿
+ CommonCache.setValue(payFeeDetailPo.getDetailId() + CommonCache.RECEIPT_CODE, receiptCode, CommonCache.DEFAULT_EXPIRETIME_TWO_MIN);
+ int flag = payFeeDetailNewV1InnerServiceSMOImpl.savePayFeeDetailNew(payFeeDetailPo);
+ if (flag < 1) {
+ throw new CmdException("缂磋垂澶辫触");
}
- //杞﹁締寤舵湡
- updateOwnerCarEndTime(payFeePo, paramObj);
- //澶勭悊鎶ヤ慨鍗�
- doDealRepairOrder(paramObj);
+ PayFeePo payFeePo = new PayFeePo();
+ payFeePo.setFeeId(payFeeDataDto.getFeeId());
+ payFeePo.setEndTime(payFeeDetailPo.getEndTime());
+ payFeePo.setState(FeeDto.STATE_FINISH);
+
+ Date maxTime = payFeeDataDto.getFeeDto().getDeadlineTime();
+
+ if (maxTime == null) {
+ maxTime = DateUtil.getDateFromStringA(payFeeDataDto.getFeeConfigDto().getEndTime());
+ }
+ //todo 涓嶆槸涓�娆℃�ц垂鐢�
+ if (!FeeDto.FEE_FLAG_ONCE.equals(payFeeDataDto.getFeeDto().getFeeFlag()) && maxTime != null) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(maxTime);
+ calendar.add(Calendar.DAY_OF_MONTH, -5);
+ maxTime = calendar.getTime();
+ if (maxTime.after(DateUtil.getDateFromStringA(payFeeDetailPo.getEndTime()))) {
+ payFeePo.setState(FeeDto.STATE_DOING);
+ }
+ }
+
+ flag = payFeeV1InnerServiceSMOImpl.updatePayFee(payFeePo);
+ if (flag < 1) {
+ throw new CmdException("缂磋垂澶辫触");
+ }
+
+ //todo 璐︽埛鎵f
+ finishFeeNotifyImpl.withholdAccount(payFeeDataDto, payFeeDataDto.getFeeId(), payFeeDataDto.getCommunityId());
+
+ //todo 淇敼杞﹁締
+ finishFeeNotifyImpl.updateCarEndTime(payFeeDataDto.getFeeId(), payFeeDataDto.getCommunityId());
+
+
+ //todo 淇敼鎶ヤ慨鍗�
+ finishFeeNotifyImpl.updateRepair(payFeeDataDto.getFeeId(), payFeeDataDto.getCommunityId(), payFeeDetailPo.getReceivedAmount());
}
/**
- * 澶勭悊鎶ヤ慨鍗�
+ * 璁$畻 缁撴潫鏃堕棿 缂磋垂鍛ㄦ湡 閲戦
+ * payFeeDetailPo.setCycles(cycles.doubleValue() + "");
+ * payFeeDetailPo.setEndTime(DateUtil.getFormatTimeStringA(targetEndTime));
+ * payFeeDetailPo.setReceivableAmount(receivableAmount);
*
- * @param paramObj
+ * @param payFeeDataDto
+ * @param payFeeDetailPo
*/
- private void doDealRepairOrder(JSONObject paramObj) {
- int flag;//鍒ゆ柇鏄惁鏈夋淳鍗曞睘鎬D
- FeeAttrDto feeAttrDto = new FeeAttrDto();
- feeAttrDto.setCommunityId(paramObj.getString("communityId"));
- feeAttrDto.setFeeId(paramObj.getString("feeId"));
- feeAttrDto.setSpecCd(FeeAttrDto.SPEC_CD_REPAIR);
- List<FeeAttrDto> feeAttrDtos = feeAttrInnerServiceSMOImpl.queryFeeAttrs(feeAttrDto);
- //淇敼 娲惧崟鐘舵��
- if (feeAttrDtos != null && feeAttrDtos.size() > 0) {
- RepairDto repairDto = new RepairDto();
- repairDto.setRepairId(feeAttrDtos.get(0).getValue());
- //鏌ヨ鎶ヤ慨璁板綍
- List<RepairDto> repairDtos = repairInnerServiceSMO.queryRepairs(repairDto);
- Assert.listOnlyOne(repairDtos, "鎶ヤ慨淇℃伅閿欒锛�");
- //鑾峰彇鎶ヤ慨娓犻亾
- String repairChannel = repairDtos.get(0).getRepairChannel();
- RepairPoolPo repairPoolPo = new RepairPoolPo();
- repairPoolPo.setRepairId(feeAttrDtos.get(0).getValue());
- repairPoolPo.setCommunityId(paramObj.getString("communityId"));
- if (repairChannel.equals("Z")) { //濡傛灉鏄笟涓昏嚜涓绘姤淇紝鐘舵�佸氨鍙樻垚寰呰瘎浠�
- repairPoolPo.setState(RepairDto.STATE_APPRAISE);
- } else { //濡傛灉鏄憳宸ヤ唬瀹㈡姤淇垨鐢佃瘽鎶ヤ慨锛岀姸鎬佸氨鍙樻垚寰呭洖璁�
- repairPoolPo.setState(RepairDto.STATE_RETURN_VISIT);
- }
- flag = repairPoolNewV1InnerServiceSMOImpl.updateRepairPoolNew(repairPoolPo);
- if (flag < 1) {
- throw new CmdException("鏇存柊寰俊娲惧崟姹犱俊鎭け璐�");
- }
-
- repairDto = new RepairDto();
- repairDto.setRepairId(feeAttrDtos.get(0).getValue());
- //鏌ヨ鎶ヤ慨璁板綍
- repairDtos = repairInnerServiceSMO.queryRepairs(repairDto);
-
- Assert.listOnlyOne(repairDtos, "鎶ヤ慨淇℃伅閿欒锛�");
- //鑾峰彇鎶ヤ慨娓犻亾
- repairChannel = repairDtos.get(0).getRepairChannel();
- RepairUserDto repairUserDto = new RepairUserDto();
- repairUserDto.setRepairId(feeAttrDtos.get(0).getValue());
- repairUserDto.setState(RepairUserDto.STATE_PAY_FEE);
- //鏌ヨ寰呮敮浠樼姸鎬佺殑璁板綍
- List<RepairUserDto> repairUserDtoList = repairUserInnerServiceSMO.queryRepairUsers(repairUserDto);
- Assert.listOnlyOne(repairUserDtoList, "淇℃伅閿欒锛�");
- RepairUserPo repairUserPo = new RepairUserPo();
- repairUserPo.setRuId(repairUserDtoList.get(0).getRuId());
- if ("Z".equals(repairChannel)) { //濡傛灉涓氫富鏄嚜涓绘姤淇紝鐘舵�佸氨鍙樻垚宸叉敮浠橈紝骞舵柊澧炰竴鏉″緟璇勪环鐘舵��
- repairUserPo.setState(RepairUserDto.STATE_FINISH_PAY_FEE);
- //濡傛灉鏄緟璇勪环鐘舵�侊紝灏辨洿鏂扮粨鏉熸椂闂�
- repairUserPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
- repairUserPo.setContext("宸叉敮浠�" + paramObj.getString("feePrice") + "鍏�");
- //鏂板寰呰瘎浠风姸鎬�
- RepairUserPo repairUser = new RepairUserPo();
- repairUser.setRuId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_ruId));
- repairUser.setStartTime(repairUserPo.getEndTime());
- repairUser.setState(RepairUserDto.STATE_EVALUATE);
- repairUser.setContext("寰呰瘎浠�");
- repairUser.setCommunityId(paramObj.getString("communityId"));
- repairUser.setCreateTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
- repairUser.setRepairId(repairUserDtoList.get(0).getRepairId());
- repairUser.setStaffId(repairUserDtoList.get(0).getStaffId());
- repairUser.setStaffName(repairUserDtoList.get(0).getStaffName());
- repairUser.setPreStaffId(repairUserDtoList.get(0).getStaffId());
- repairUser.setPreStaffName(repairUserDtoList.get(0).getStaffName());
- repairUser.setPreRuId(repairUserDtoList.get(0).getRuId());
- repairUser.setRepairEvent("auditUser");
- flag = repairUserNewV1InnerServiceSMOImpl.saveRepairUserNew(repairUser);
- if (flag < 1) {
- throw new CmdException("鏇存柊寰俊娲惧崟姹犱俊鎭け璐�");
- }
- } else { //濡傛灉鏄憳宸ヤ唬瀹㈡姤淇垨鐢佃瘽鎶ヤ慨锛岀姸鎬佸氨鍙樻垚宸叉敮浠�
- repairUserPo.setState(RepairUserDto.STATE_FINISH_PAY_FEE);
- //濡傛灉鏄凡鏀粯鐘舵�侊紝灏辨洿鏂扮粨鏉熸椂闂�
- repairUserPo.setEndTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
- repairUserPo.setContext("宸叉敮浠�" + paramObj.getString("feePrice") + "鍏�");
- }
- flag = repairUserNewV1InnerServiceSMOImpl.updateRepairUserNew(repairUserPo);
- if (flag < 1) {
- throw new CmdException("鏇存柊寰俊娲惧崟姹犱俊鎭け璐�");
- }
- }
- }
-
- /**
- * 淇敼杞﹁締 缁撴潫鏃堕棿
- *
- * @param payFeePo
- * @param paramObj
- * @throws ParseException
- */
- private void updateOwnerCarEndTime(PayFeePo payFeePo, JSONObject paramObj) throws ParseException {
- FeeDto feeInfo = (FeeDto) paramObj.get("feeInfo");
- int flag;//涓哄仠杞﹁垂鍗曠嫭澶勭悊
- if (!FeeDto.PAYER_OBJ_TYPE_CAR.equals(feeInfo.getPayerObjType())) {
- return;
- }
- Date feeEndTime = DateUtil.getDateFromString(payFeePo.getEndTime(), DateUtil.DATE_FORMATE_STRING_A);
- OwnerCarDto ownerCarDto = new OwnerCarDto();
- ownerCarDto.setCommunityId(feeInfo.getCommunityId());
- ownerCarDto.setCarId(feeInfo.getPayerObjId());
- ownerCarDto.setCarTypeCd("1001"); //涓氫富杞﹁締
- List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
- Assert.listOnlyOne(ownerCarDtos, "鏌ヨ涓氫富閿欒锛�");
- //鑾峰彇杞︿綅id
- String psId = ownerCarDtos.get(0).getPsId();
- //鑾峰彇杞﹁締鐘舵��(1001 姝e父鐘舵�侊紝2002 娆犺垂鐘舵�� 3003 杞︿綅閲婃斁)
- String carState = ownerCarDtos.get(0).getState();
- if (!StringUtil.isEmpty(psId) && !StringUtil.isEmpty(carState) && carState.equals("3003")) {
- ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
- parkingSpaceDto.setPsId(psId);
- List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
- Assert.listOnlyOne(parkingSpaceDtos, "鏌ヨ杞︿綅淇℃伅閿欒锛�");
- //鑾峰彇杞︿綅鐘舵��(鍑哄敭 S锛屽嚭绉� H 锛岀┖闂� F)
- String state = parkingSpaceDtos.get(0).getState();
- if (!StringUtil.isEmpty(state) && !state.equals("F")) {
- throw new IllegalArgumentException("杞︿綅宸茶浣跨敤锛屼笉鑳藉啀缂磋垂锛�");
- }
- }
-
- Calendar endTimeCalendar = null;
- //杞︿綅璐圭敤缁
- for (OwnerCarDto tmpOwnerCarDto : ownerCarDtos) {
- //鍚庝粯璐� 鎴栬�呬俊鐢ㄦ湡杞﹁締 鍔犱竴涓湀
- if (FeeConfigDto.PAYMENT_CD_AFTER.equals(feeInfo.getPaymentCd())
- || OwnerCarDto.CAR_TYPE_CREDIT.equals(tmpOwnerCarDto.getCarType())) {
- endTimeCalendar = Calendar.getInstance();
- endTimeCalendar.setTime(feeEndTime);
- endTimeCalendar.add(Calendar.MONTH, 1);
- feeEndTime = endTimeCalendar.getTime();
- }
- if (tmpOwnerCarDto.getEndTime().getTime() >= feeEndTime.getTime()) {
- continue;
- }
- OwnerCarPo ownerCarPo = new OwnerCarPo();
- ownerCarPo.setMemberId(tmpOwnerCarDto.getMemberId());
- ownerCarPo.setEndTime(DateUtil.getFormatTimeString(feeEndTime, DateUtil.DATE_FORMATE_STRING_A));
- flag = ownerCarNewV1InnerServiceSMOImpl.updateOwnerCarNew(ownerCarPo);
- if (flag < 1) {
- throw new CmdException("缂磋垂澶辫触");
- }
- }
- }
-
- public JSONObject addFeeDetail(JSONObject paramInJson) {
- JSONObject businessFeeDetail = new JSONObject();
- businessFeeDetail.putAll(paramInJson);
- businessFeeDetail.put("detailId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId));
- //鏀粯鏂瑰紡
- businessFeeDetail.put("primeRate", paramInJson.getString("primeRate"));
- //璁$畻 搴旀敹閲戦
- FeeDto feeDto = new FeeDto();
- feeDto.setFeeId(paramInJson.getString("feeId"));
- feeDto.setCommunityId(paramInJson.getString("communityId"));
- List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
- if (feeDtos == null || feeDtos.size() != 1) {
- throw new ListenerExecuteException(ResponseConstant.RESULT_CODE_ERROR, "鏌ヨ璐圭敤淇℃伅澶辫触锛屾湭鏌ュ埌鏁版嵁鎴栨煡鍒板鏉℃暟鎹�");
- }
- businessFeeDetail.put("state", FeeDetailDto.STATE_NORMAL);
-
- feeDto = feeDtos.get(0);
- businessFeeDetail.put("startTime", DateUtil.getFormatTimeString(feeDto.getEndTime(), DateUtil.DATE_FORMATE_STRING_A));
- int hours = 0;
+ private void computeEndTimeCycleAmount(PayFeeDataDto payFeeDataDto, PayFeeDetailPo payFeeDetailPo) {
Date targetEndTime = null;
BigDecimal cycles = null;
- Map feePriceAll = computeFeeSMOImpl.getFeePrice(feeDto);
+ String receivableAmount = "";
+ Map feePriceAll = computeFeeSMOImpl.getFeePrice(payFeeDataDto.getFeeDto());
BigDecimal feePrice = new BigDecimal(feePriceAll.get("feePrice").toString());
+ if ("-101".equals(payFeeDataDto.getTempCycle())) { //todo 鑷畾涔夐噾棰濅氦璐�
+ Date endTime = payFeeDataDto.getFeeDto().getEndTime();
+ Calendar endCalender = Calendar.getInstance();
+ endCalender.setTime(endTime);
+ BigDecimal receivedAmount = new BigDecimal(Double.parseDouble(payFeeDataDto.getReceivedAmount()));
+ //todo 鑰冭檻璐︽埛閲戦
+ if (payFeeDataDto.getAccountAmount() > 0) {
+ receivedAmount = receivedAmount.add(new BigDecimal(payFeeDataDto.getAccountAmount()));
+ }
+ cycles = receivedAmount.divide(feePrice, 4, BigDecimal.ROUND_HALF_EVEN);
+ endCalender = getTargetEndTime(endCalender, cycles.doubleValue());
+ targetEndTime = endCalender.getTime();
+ receivableAmount = payFeeDataDto.getReceivedAmount();
+ //澶勭悊 鍙兘杩樺瓨鍦� 瀹炴敹鎵嬪伐鍑忓厤鐨勬儏鍐�
+ } else if ("-103".equals(payFeeDataDto.getTempCycle())) { //todo 杩欓噷鎸夌即璐圭粨鏉熸椂闂寸即璐�
+ String custEndTime = payFeeDataDto.getCustEndTime();
+ Date endDates = DateUtil.getDateFromStringB(custEndTime);
+ Calendar c = Calendar.getInstance();
+ c.setTime(endDates);
+ c.add(Calendar.DAY_OF_MONTH, 1);
+ endDates = c.getTime();//杩欐槸鏄庡ぉ
+ targetEndTime = endDates;
+ BigDecimal receivedAmount1 = new BigDecimal(Double.parseDouble(payFeeDataDto.getReceivedAmount()));
+ cycles = receivedAmount1.divide(feePrice, 4, BigDecimal.ROUND_HALF_EVEN);
+ receivableAmount = payFeeDataDto.getReceivedAmount();
- targetEndTime = computeFeeSMOImpl.getFeeEndTimeByCycles(feeDto, paramInJson.getString("cycles"));
- cycles = new BigDecimal(Double.parseDouble(paramInJson.getString("cycles")));
- double tmpReceivableAmount = cycles.multiply(feePrice).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
- businessFeeDetail.put("receivableAmount", tmpReceivableAmount);
- businessFeeDetail.put("payableAmount", tmpReceivableAmount);
+ } else { //鑷畾涔夊懆鏈�
+ targetEndTime = computeFeeSMOImpl.getFeeEndTimeByCycles(payFeeDataDto.getFeeDto(), payFeeDataDto.getCycles());//鏍规嵁缂磋垂鍛ㄦ湡璁$畻 缁撴潫鏃堕棿
+ cycles = new BigDecimal(Double.parseDouble(payFeeDataDto.getCycles()));
+ double tmpReceivableAmount = cycles.multiply(feePrice).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue();
+ receivableAmount = tmpReceivableAmount + "";
+ //鍑虹閫掑闂澶勭悊
+ if (FeeConfigDto.COMPUTING_FORMULA_RANT_RATE.equals(payFeeDataDto.getFeeDto().getComputingFormula())) {
+ computeFeeSMOImpl.dealRentRateCycle(payFeeDataDto.getFeeDto(), cycles.doubleValue());
+ if (payFeeDataDto.getFeeDto().getOweFee() > 0) {
+ receivableAmount = payFeeDataDto.getFeeDto().getAmountOwed();
- businessFeeDetail.put("endTime", DateUtil.getFormatTimeString(targetEndTime, DateUtil.DATE_FORMATE_STRING_A));
- paramInJson.put("feeInfo", feeDto);
- paramInJson.put("detailId", businessFeeDetail.getString("detailId"));
+ }
+ }
+ }
- return businessFeeDetail;
+ payFeeDetailPo.setCycles(cycles.doubleValue() + "");
+ payFeeDetailPo.setEndTime(DateUtil.getFormatTimeStringA(targetEndTime));
+ payFeeDetailPo.setReceivableAmount(receivableAmount);
+ payFeeDetailPo.setPayableAmount(receivableAmount);
+
}
- /**
- * 淇敼璐圭敤淇℃伅
- *
- * @param paramInJson 鎺ュ彛璋冪敤鏀句紶鍏ュ叆鍙�
- * @return 璁㈠崟鏈嶅姟鑳藉鎺ュ彈鐨勬姤鏂�
- */
- public JSONObject modifyFee(JSONObject paramInJson) {
- FeeDto feeInfo = (FeeDto) paramInJson.get("feeInfo");
- Date endTime = feeInfo.getEndTime();
- Calendar endCalender = Calendar.getInstance();
- endCalender.setTime(endTime);
- endCalender.add(Calendar.MONTH, Integer.parseInt(paramInJson.getString("cycles")));
- if (FeeDto.FEE_FLAG_ONCE.equals(feeInfo.getFeeFlag())) {
- if (feeInfo.getDeadlineTime() != null) {
- endCalender.setTime(feeInfo.getDeadlineTime());
- } else if (!StringUtil.isEmpty(feeInfo.getCurDegrees())) {
- endCalender.setTime(feeInfo.getCurReadingTime());
- } else if (feeInfo.getImportFeeEndTime() == null) {
- endCalender.setTime(feeInfo.getConfigEndTime());
- } else {
- endCalender.setTime(feeInfo.getImportFeeEndTime());
- }
- //businessFee.put("state",FeeDto.STATE_FINISH);
- feeInfo.setState(FeeDto.STATE_FINISH);
- }
- feeInfo.setEndTime(endCalender.getTime());
- Date maxEndTime = feeInfo.getDeadlineTime();
- if (FeeDto.FEE_FLAG_CYCLE.equals(feeInfo.getFeeFlag())) {
- maxEndTime = feeInfo.getConfigEndTime();
- }
- //鍒ゆ柇 缁撴潫鏃堕棿 鏄惁澶т簬 璐圭敤椤� 缁撴潫鏃堕棿锛岃繖閲� 瀹归敊涓�涓嬶紝濡傛灉 璐圭敤缁撴潫鏃堕棿澶т簬 璐圭敤椤圭粨鏉熸椂闂� 30澶� 璧版姤閿� 灞炰簬澶氱即璐�
- if (maxEndTime != null) {
- if (feeInfo.getEndTime().getTime() - maxEndTime.getTime() > 30 * 24 * 60 * 60 * 1000L) {
- throw new IllegalArgumentException("缂磋垂瓒呰繃浜� 璐圭敤椤圭粨鏉熸椂闂�");
- }
- }
- Map feeMap = BeanConvertUtil.beanCovertMap(feeInfo);
- feeMap.put("startTime", DateUtil.getFormatTimeString(feeInfo.getStartTime(), DateUtil.DATE_FORMATE_STRING_A));
- feeMap.put("endTime", DateUtil.getFormatTimeString(feeInfo.getEndTime(), DateUtil.DATE_FORMATE_STRING_A));
- feeMap.put("cycles", paramInJson.getString("cycles"));
- feeMap.put("configEndTime", feeInfo.getConfigEndTime());
- JSONObject businessFee = new JSONObject();
- businessFee.putAll(feeMap);
- //涓哄仠杞﹁垂鍗曠嫭澶勭悊
- paramInJson.put("carFeeEndTime", feeInfo.getEndTime());
- paramInJson.put("carPayerObjType", feeInfo.getPayerObjType());
- paramInJson.put("carPayerObjId", feeInfo.getPayerObjId());
-
-
- // 鍛ㄦ湡鎬ф敹璐广�佺即璐瑰悗锛屽埌鏈熸棩鏈熷湪璐圭敤椤圭粓姝㈡棩鏈熷悗锛屽垯璁剧疆缂磋垂鐘舵�佺粨鏉燂紝璁剧疆缁撴潫鏃ユ湡涓鸿垂鐢ㄩ」缁堟鏃ユ湡
- if (!FeeFlagTypeConstant.ONETIME.equals(feeInfo.getFeeFlag())) {
- //杩欓噷 瀹归敊浜斿ぉ鏃堕棿
- Calendar calendar = Calendar.getInstance();
- calendar.setTime(maxEndTime);
- calendar.add(Calendar.DAY_OF_MONTH, -5);
- maxEndTime = calendar.getTime();
- if (feeInfo.getEndTime().after(maxEndTime)) {
- businessFee.put("state", FeeConfigConstant.END);
- businessFee.put("endTime", maxEndTime);
- }
- }
-
- return businessFee;
- }
private static Calendar getTargetEndTime(Calendar endCalender, Double cycles) {
if (StringUtil.isInteger(cycles.toString())) {
@@ -508,4 +342,58 @@
endCalender.add(Calendar.HOUR, hours);
return endCalender;
}
+
+
+ private void ifHasAccount(JSONObject reqJson, List<PayFeeDataDto> feeDataDtos) {
+ if (!reqJson.containsKey("accountAmount")) {
+ return;
+ }
+ double accountAmount = reqJson.getDouble("accountAmount");
+ if (accountAmount <= 0) {
+ return;
+ }
+
+ Assert.hasKeyAndValue(reqJson, "acctId", "鏈寘鍚处鎴稩D");
+ String acctId = reqJson.getString("acctId");
+ //todo 鏍¢獙璐︽埛閲戦鏄惁鍏呰冻
+ AccountDto accountDto = new AccountDto();
+ accountDto.setAcctId(acctId);
+ List<AccountDto> accountDtos = accountInnerServiceSMOImpl.queryAccounts(accountDto);
+
+ Assert.listOnlyOne(accountDtos, "璐︽埛涓嶅瓨鍦�");
+
+ if (Double.parseDouble(accountDtos.get(0).getAmount()) < accountAmount) {
+ throw new CmdException("璐︽埛浣欓涓嶈冻");
+ }
+
+ BigDecimal accountAmountDec = null;
+ double receivedAmount = 0.0;
+ BigDecimal receivedAmountDec = null;
+ for (PayFeeDataDto payFeeDataDto : feeDataDtos) {
+ if (accountAmount == 0) {
+ continue;
+ }
+ accountAmountDec = new BigDecimal(accountAmount);
+ receivedAmount = Double.parseDouble(payFeeDataDto.getReceivedAmount());
+ receivedAmountDec = new BigDecimal(receivedAmount);
+ if (receivedAmount >= accountAmount) {
+ receivedAmountDec = receivedAmountDec.subtract(accountAmountDec).setScale(2, BigDecimal.ROUND_HALF_UP);
+ payFeeDataDto.setReceivedAmount(receivedAmountDec.doubleValue() + "");
+ payFeeDataDto.setAccountAmount(accountAmount);
+ payFeeDataDto.setAcctId(acctId);
+ accountAmount = 0.00;
+ continue;
+ }
+
+ payFeeDataDto.setReceivedAmount("0");
+ payFeeDataDto.setAccountAmount(accountAmount);
+ payFeeDataDto.setAcctId(acctId);
+
+ accountAmountDec = accountAmountDec.subtract(receivedAmountDec).setScale(2, BigDecimal.ROUND_HALF_UP);
+ accountAmount = accountAmountDec.doubleValue();
+ }
+
+
+ }
}
+
--
Gitblit v1.8.0