From 0cb117d1048b669baab4b621ce70984176418d4c Mon Sep 17 00:00:00 2001
From: wuxw <928255095@qq.com>
Date: 星期三, 05 六月 2024 12:50:47 +0800
Subject: [PATCH] 支持购买月卡
---
java110-utils/src/main/java/com/java110/utils/util/DateUtil.java | 2
service-fee/src/main/java/com/java110/fee/cmd/carMonth/BuyCarMonthOrderCmd.java | 358 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 359 insertions(+), 1 deletions(-)
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 962946f..bf59984 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
@@ -14,7 +14,7 @@
private static DateFormat dateFormat = new SimpleDateFormat("yyyyMMddhhmmss");
- public static final String LAST_TIME = "2038-01-01 00:00:00";
+ public static final String LAST_TIME = "2050-01-01 00:00:00";
private static Map<String, SimpleDateFormat> formats = new HashMap();
public static final String DATE_FORMATE_STRING_DEFAULT = "yyyyMMddHHmmss";
diff --git a/service-fee/src/main/java/com/java110/fee/cmd/carMonth/BuyCarMonthOrderCmd.java b/service-fee/src/main/java/com/java110/fee/cmd/carMonth/BuyCarMonthOrderCmd.java
new file mode 100644
index 0000000..ffc1a99
--- /dev/null
+++ b/service-fee/src/main/java/com/java110/fee/cmd/carMonth/BuyCarMonthOrderCmd.java
@@ -0,0 +1,358 @@
+package com.java110.fee.cmd.carMonth;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Cmd;
+import com.java110.core.annotation.Java110Transactional;
+import com.java110.core.context.CmdContextUtils;
+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.core.factory.Java110TransactionalFactory;
+import com.java110.dto.IotDataDto;
+import com.java110.dto.community.CommunityMemberDto;
+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.owner.OwnerCarDto;
+import com.java110.dto.owner.OwnerDto;
+import com.java110.dto.owner.OwnerRoomRelDto;
+import com.java110.dto.parking.ParkingSpaceDto;
+import com.java110.dto.room.RoomDto;
+import com.java110.dto.user.UserDto;
+import com.java110.intf.community.ICommunityMemberV1InnerServiceSMO;
+import com.java110.intf.community.IParkingSpaceInnerServiceSMO;
+import com.java110.intf.community.IParkingSpaceV1InnerServiceSMO;
+import com.java110.intf.community.IRoomV1InnerServiceSMO;
+import com.java110.intf.fee.IFeeAttrInnerServiceSMO;
+import com.java110.intf.fee.IFeeInnerServiceSMO;
+import com.java110.intf.fee.IPayFeeConfigV1InnerServiceSMO;
+import com.java110.intf.fee.IPayFeeDetailV1InnerServiceSMO;
+import com.java110.intf.job.IIotInnerServiceSMO;
+import com.java110.intf.user.*;
+import com.java110.po.car.OwnerCarPo;
+import com.java110.po.fee.FeeAttrPo;
+import com.java110.po.fee.PayFeeConfigPo;
+import com.java110.po.fee.PayFeeDetailPo;
+import com.java110.po.fee.PayFeePo;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.DateUtil;
+import com.java110.utils.util.ListUtil;
+import com.java110.utils.util.StringUtil;
+import com.java110.vo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+@Java110Cmd(serviceCode = "carMonth.buyCarMonthOrder")
+public class BuyCarMonthOrderCmd extends Cmd {
+
+ @Autowired
+ private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
+ @Autowired
+ private IOwnerCarV1InnerServiceSMO ownerCarV1InnerServiceSMOImpl;
+ @Autowired
+ private IPayFeeConfigV1InnerServiceSMO payFeeConfigV1InnerServiceSMOImpl;
+
+ @Autowired
+ private ICommunityMemberV1InnerServiceSMO communityMemberV1InnerServiceSMOImpl;
+
+ @Autowired
+ private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
+
+ @Autowired
+ private IOwnerV1InnerServiceSMO ownerV1InnerServiceSMOImpl;
+
+ @Autowired
+ private IOwnerRoomRelV1InnerServiceSMO ownerRoomRelV1InnerServiceSMOImpl;
+
+ @Autowired
+ private IFeeAttrInnerServiceSMO feeAttrInnerServiceSMOImpl;
+
+ @Autowired
+ private IPayFeeDetailV1InnerServiceSMO payFeeDetailV1InnerServiceSMOImpl;
+
+ @Autowired
+ private IParkingSpaceInnerServiceSMO parkingSpaceInnerServiceSMOImpl;
+
+
+ @Autowired
+ private IIotInnerServiceSMO iotInnerServiceSMOImpl;
+
+ @Autowired
+ private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl;
+
+
+ @Override
+ public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+
+
+ Assert.hasKeyAndValue(reqJson, "cardId", "璇锋眰鎶ユ枃涓湭鍖呭惈cardId");
+ Assert.hasKeyAndValue(reqJson, "carNum", "璇锋眰鎶ユ枃涓湭鍖呭惈carNum");
+ Assert.hasKeyAndValue(reqJson, "carId", "璇锋眰鎶ユ枃涓湭鍖呭惈carId");
+ Assert.hasKeyAndValue(reqJson, "communityId", "璇锋眰鎶ユ枃涓湭鍖呭惈communityId");
+ Assert.hasKeyAndValue(reqJson, "primeRate", "璇锋眰鎶ユ枃涓湭鍖呭惈primeRate");
+ Assert.hasKeyAndValue(reqJson, "receivedAmount", "璇锋眰鎶ユ枃涓湭鍖呭惈receivedAmount");
+
+ OwnerCarDto ownerCarDto = new OwnerCarDto();
+ ownerCarDto.setCarId(reqJson.getString("carId"));
+ ownerCarDto.setCarNum(reqJson.getString("carNum"));
+ ownerCarDto.setCommunityId(reqJson.getString("communityId"));
+ List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
+
+ if (ListUtil.isNull(ownerCarDtos)) {
+ throw new CmdException("鏈堢杞︿笉瀛樺湪");
+ }
+
+
+ ParkingSpaceDto parkingSpaceDto = new ParkingSpaceDto();
+ parkingSpaceDto.setCommunityId(reqJson.getString("communityId"));
+ parkingSpaceDto.setPsId(ownerCarDtos.get(0).getPsId());
+ List<ParkingSpaceDto> parkingSpaceDtos = parkingSpaceInnerServiceSMOImpl.queryParkingSpaces(parkingSpaceDto);
+
+ if (ListUtil.isNull(parkingSpaceDtos)) {
+ throw new CmdException("杞﹁締鍋滆溅浣嶄笉瀛樺湪");
+ }
+
+
+ JSONObject paramIn = new JSONObject();
+ paramIn.put("row", 1);
+ paramIn.put("page", 1);
+ paramIn.put("cardId", reqJson.getString("cardId"));
+ paramIn.put("communityId", reqJson.getString("communityId"));
+ paramIn.put("paNum", parkingSpaceDtos.get(0).getAreaNum());
+
+ ResultVo data = iotInnerServiceSMOImpl.postIotData(new IotDataDto("queryCarMonthCardBmoImpl", paramIn));
+
+ if (data.getCode() != ResultVo.CODE_OK) {
+ throw new CmdException(data.getMsg());
+ }
+
+ JSONArray carMonthCardDtos = (JSONArray) data.getData();
+
+ if (ListUtil.isNull(carMonthCardDtos)) {
+ throw new CmdException("鏈堝崱涓嶅瓨鍦�");
+ }
+
+
+ reqJson.put("receivableAmount", carMonthCardDtos.getJSONObject(0).getString("cardPrice"));
+ reqJson.put("cardMonth", carMonthCardDtos.getJSONObject(0).getString("cardMonth"));
+ reqJson.put("carMemberId", ownerCarDtos.get(0).getMemberId());
+ reqJson.put("endTime", ownerCarDtos.get(0).getEndTime());
+ reqJson.put("psId", ownerCarDtos.get(0).getPsId());
+ }
+
+ @Override
+ @Java110Transactional
+ public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+
+ String userId = CmdContextUtils.getUserId(context);
+
+ UserDto userDto = new UserDto();
+ userDto.setUserId(userId);
+ List<UserDto> userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto);
+
+ Assert.listOnlyOne(userDtos, "鐢ㄦ埛鏈櫥褰�");
+
+
+ Date startTime = reqJson.getDate("endTime");
+
+ if (startTime.getTime() < DateUtil.getCurrentDate().getTime()) {
+ startTime = DateUtil.getCurrentDate();
+ }
+
+ String endTime = DateUtil.getAddMonthStringA(startTime, reqJson.getIntValue("cardMonth"));
+
+
+ //todo 鏌ヨ 鏄惁瀛樺湪 鍚嶇О涓烘湀绉熻溅鏈堝崱 鍏紡涓哄姩鎬佽垂鐢紝璐圭敤绫诲瀷涓哄仠杞﹁垂鐨勮垂鐢ㄩ」锛屽鏋滄病鏈夐粯璁ゅ缓涓�涓�
+
+ FeeConfigDto feeConfigDto = getFeeConfigDto(reqJson.getString("communityId"));
+
+
+ CommunityMemberDto communityMemberDto = new CommunityMemberDto();
+ communityMemberDto.setCommunityId(reqJson.getString("communityId"));
+ communityMemberDto.setMemberTypeCd(CommunityMemberDto.MEMBER_TYPE_PROPERTY);
+ List<CommunityMemberDto> communityMemberDtos = communityMemberV1InnerServiceSMOImpl.queryCommunityMembers(communityMemberDto);
+
+ Assert.listOnlyOne(communityMemberDtos, "鐗╀笟涓嶅瓨鍦�");
+
+
+ PayFeePo payFeePo = new PayFeePo();
+ payFeePo.setCommunityId(reqJson.getString("communityId"));
+ payFeePo.setConfigId(feeConfigDto.getConfigId());
+ payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_CAR);
+ payFeePo.setStartTime(DateUtil.getFormatTimeStringA(startTime));
+ payFeePo.setEndTime(endTime);
+ payFeePo.setAmount(reqJson.getString("receivedAmount"));
+ payFeePo.setFeeFlag(feeConfigDto.getFeeFlag());
+ payFeePo.setFeeTypeCd(feeConfigDto.getFeeTypeCd());
+ payFeePo.setIncomeObjId(communityMemberDtos.get(0).getMemberId());
+ payFeePo.setBatchId("-1");
+ payFeePo.setState(FeeDto.STATE_FINISH);
+
+ payFeePo.setFeeId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId));
+ payFeePo.setPayerObjId(reqJson.getString("carId"));
+ payFeePo.setUserId("-1");
+ payFeePo.setCreateTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+ List<PayFeePo> payFeePos = new ArrayList<>();
+ payFeePos.add(payFeePo);
+ feeInnerServiceSMOImpl.saveFee(payFeePos);
+
+ //todo 璁$畻鐢ㄩ噺
+ List<FeeAttrPo> feeAttrsPos = new ArrayList<>();
+ //todo 鏌ヨ鎴垮眿淇℃伅
+ OwnerCarDto ownerCarDto = new OwnerCarDto();
+ ownerCarDto.setCommunityId(feeConfigDto.getCommunityId());
+ ownerCarDto.setMemberId(reqJson.getString("carId"));
+ List<OwnerCarDto> ownerCarDtos = ownerCarInnerServiceSMOImpl.queryOwnerCars(ownerCarDto);
+ if (!ListUtil.isNull(ownerCarDtos)) {
+ feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_PAY_OBJECT_NAME,
+ ownerCarDtos.get(0).getAreaNum() + "-" + ownerCarDtos.get(0).getNum() + "(" + ownerCarDtos.get(0).getCarNum() + ")"));
+ }
+
+ //todo 鏌ヨ涓氫富淇℃伅
+ OwnerDto ownerDto = new OwnerDto();
+ ownerDto.setMemberId(ownerCarDtos.get(0).getOwnerId());
+ ownerDto.setOwnerTypeCd(OwnerDto.OWNER_TYPE_CD_OWNER);
+ List<OwnerDto> ownerDtos = ownerV1InnerServiceSMOImpl.queryOwners(ownerDto);
+ if (!ListUtil.isNull(ownerDtos)) {
+
+ feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_ONCE_FEE_DEADLINE_TIME,
+ payFeePo.getEndTime()));
+
+ feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_OWNER_ID, ownerDtos.get(0).getOwnerId()));
+ feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_OWNER_LINK, ownerDtos.get(0).getLink()));
+ feeAttrsPos.add(addFeeAttr(payFeePo, FeeAttrDto.SPEC_CD_OWNER_NAME, ownerDtos.get(0).getName()));
+
+ }
+ feeAttrInnerServiceSMOImpl.saveFeeAttrs(feeAttrsPos);
+ String oId = Java110TransactionalFactory.getOId();
+
+ PayFeeDetailPo payFeeDetailPo = new PayFeeDetailPo();
+ payFeeDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId));
+ if (StringUtil.isEmpty(oId)) {
+ oId = payFeeDetailPo.getDetailId();
+ }
+ payFeeDetailPo.setCommunityId(feeConfigDto.getCommunityId());
+ payFeeDetailPo.setReceivedAmount(reqJson.getString("receivedAmount"));
+ payFeeDetailPo.setReceivableAmount(reqJson.getString("receivedAmount"));
+ payFeeDetailPo.setCycles("1");
+ payFeeDetailPo.setPrimeRate(reqJson.getString("primeRate"));
+ payFeeDetailPo.setFeeId(payFeePo.getFeeId());
+ payFeeDetailPo.setStartTime(payFeePo.getStartTime());
+ payFeeDetailPo.setEndTime(DateUtil.getPreSecTime(payFeePo.getEndTime()));
+ payFeeDetailPo.setRemark(reqJson.getString("remark"));
+ payFeeDetailPo.setCreateTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+ payFeeDetailPo.setState("1400");
+ payFeeDetailPo.setPayableAmount(reqJson.getString("receivedAmount"));
+ payFeeDetailPo.setPayOrderId(oId);
+ payFeeDetailPo.setOpenInvoice("N");
+ payFeeDetailPo.setDeductionAmount("0");
+ payFeeDetailPo.setGiftAmount("0");
+ payFeeDetailPo.setDiscountAmount("0");
+ payFeeDetailPo.setLateAmount("0");
+ payFeeDetailPo.setCashierName(userDtos.get(0).getName());
+ payFeeDetailPo.setCashierId("-1");
+
+ payFeeDetailV1InnerServiceSMOImpl.savePayFeeDetailNew(payFeeDetailPo);
+
+ //todo 淇敼杞﹁締鏃堕棿
+ OwnerCarPo ownerCarPo = new OwnerCarPo();
+ ownerCarPo.setCarId(ownerCarDtos.get(0).getCarId());
+ ownerCarPo.setEndTime(endTime);
+ ownerCarPo.setCommunityId(ownerCarDtos.get(0).getCommunityId());
+ ownerCarV1InnerServiceSMOImpl.updateOwnerCar(ownerCarPo);
+
+ //todo 閫氱煡鐗╄仈缃� 鏈堝崱淇℃伅
+ JSONObject paramIn = new JSONObject();
+ paramIn.put("cardId", reqJson.getString("cardId"));
+ paramIn.put("carNum", reqJson.getString("carNum"));
+ paramIn.put("communityId", reqJson.getString("communityId"));
+ paramIn.put("primeRate", reqJson.getString("primeRate"));
+ paramIn.put("receivedAmount", reqJson.getString("receivedAmount"));
+ paramIn.put("endTime", endTime);
+ paramIn.put("cashierId", userId);
+ paramIn.put("cashierName", userDtos.get(0).getName());
+
+ ResultVo data = iotInnerServiceSMOImpl.postIotData(new IotDataDto("buyCarMonthOrderBmoImpl", paramIn));
+
+ if (data.getCode() != ResultVo.CODE_OK) {
+ throw new CmdException(data.getMsg());
+ }
+
+
+ }
+
+ private FeeConfigDto getFeeConfigDto(String communityId) {
+
+ String feeName = "鏈堢杞︽湀鍗�";
+
+
+ FeeConfigDto feeConfigDto = new FeeConfigDto();
+ feeConfigDto.setFeeName(feeName);
+ feeConfigDto.setCommunityId(communityId);
+ feeConfigDto.setFeeTypeCd(FeeConfigDto.FEE_TYPE_CD_PARKING);
+ feeConfigDto.setComputingFormula(FeeConfigDto.COMPUTING_FORMULA_DYNAMIC);
+ List<FeeConfigDto> feeConfigDtos = payFeeConfigV1InnerServiceSMOImpl.queryPayFeeConfigs(feeConfigDto);
+
+ if (!ListUtil.isNull(feeConfigDtos)) {
+ return feeConfigDtos.get(0);
+ }
+
+ PayFeeConfigPo payFeeConfigPo = new PayFeeConfigPo();
+ payFeeConfigPo.setConfigId(GenerateCodeFactory.getGeneratorId("11"));
+ payFeeConfigPo.setCommunityId(communityId);
+ payFeeConfigPo.setFeeTypeCd(FeeConfigDto.FEE_TYPE_CD_PARKING);
+ payFeeConfigPo.setSquarePrice("0");
+ payFeeConfigPo.setAdditionalAmount("0");
+ payFeeConfigPo.setIsDefault(FeeConfigDto.DEFAULT_FEE_CONFIG);
+ payFeeConfigPo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+ payFeeConfigPo.setEndTime(DateUtil.getLastTime());
+ payFeeConfigPo.setFeeFlag(FeeDto.FEE_FLAG_ONCE);
+ payFeeConfigPo.setFeeName(feeName);
+ payFeeConfigPo.setComputingFormula(FeeConfigDto.COMPUTING_FORMULA_DYNAMIC);
+ payFeeConfigPo.setBillType(FeeConfigDto.BILL_TYPE_YEAR);
+ payFeeConfigPo.setPaymentCd(FeeConfigDto.PAYMENT_CD_PRE);
+ payFeeConfigPo.setPaymentCycle("1");
+ payFeeConfigPo.setComputingFormulaText("");
+ payFeeConfigPo.setDeductFrom(FeeConfigDto.DEDUCT_FROM_N);
+ payFeeConfigPo.setPayOnline("Y");
+ payFeeConfigPo.setScale("1");
+ payFeeConfigPo.setDecimalPlace("2");
+ payFeeConfigPo.setUnits("鍏�");
+ payFeeConfigPo.setPrepaymentPeriod("1");
+ payFeeConfigPo.setState("Y");
+ payFeeConfigV1InnerServiceSMOImpl.savePayFeeConfig(payFeeConfigPo);
+
+ feeConfigDto = new FeeConfigDto();
+ feeConfigDto.setFeeName(feeName);
+ feeConfigDto.setCommunityId(communityId);
+ feeConfigDto.setFeeTypeCd(FeeConfigDto.FEE_TYPE_CD_PARKING);
+ feeConfigDto.setComputingFormula(FeeConfigDto.COMPUTING_FORMULA_DYNAMIC);
+ feeConfigDtos = payFeeConfigV1InnerServiceSMOImpl.queryPayFeeConfigs(feeConfigDto);
+
+ return feeConfigDtos.get(0);
+
+ }
+
+
+ public FeeAttrPo addFeeAttr(PayFeePo payFeePo, String specCd, String value) {
+ FeeAttrPo feeAttrPo = new FeeAttrPo();
+ feeAttrPo.setCommunityId(payFeePo.getCommunityId());
+ feeAttrPo.setSpecCd(specCd);
+ feeAttrPo.setValue(value);
+ feeAttrPo.setFeeId(payFeePo.getFeeId());
+ feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
+ return feeAttrPo;
+
+ }
+
+}
--
Gitblit v1.8.0