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