From 5d167ea6e943dd1574e0e6ed70ff25b8d4830f61 Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期四, 16 六月 2022 11:47:49 +0800
Subject: [PATCH] 优化代码

---
 service-fee/src/main/java/com/java110/fee/smo/impl/FeeDiscountInnerServiceSMOImpl.java |  203 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 201 insertions(+), 2 deletions(-)

diff --git a/service-fee/src/main/java/com/java110/fee/smo/impl/FeeDiscountInnerServiceSMOImpl.java b/service-fee/src/main/java/com/java110/fee/smo/impl/FeeDiscountInnerServiceSMOImpl.java
old mode 100644
new mode 100755
index 7b1f7ee..ae4ca0f
--- a/service-fee/src/main/java/com/java110/fee/smo/impl/FeeDiscountInnerServiceSMOImpl.java
+++ b/service-fee/src/main/java/com/java110/fee/smo/impl/FeeDiscountInnerServiceSMOImpl.java
@@ -1,17 +1,31 @@
 package com.java110.fee.smo.impl;
 
-
 import com.java110.core.base.smo.BaseServiceSMO;
 import com.java110.dto.PageDto;
+import com.java110.dto.applyRoomDiscount.ApplyRoomDiscountDto;
+import com.java110.dto.fee.FeeDetailDto;
+import com.java110.dto.fee.FeeDto;
+import com.java110.dto.feeDiscount.ComputeDiscountDto;
 import com.java110.dto.feeDiscount.FeeDiscountDto;
+import com.java110.dto.feeDiscount.FeeDiscountSpecDto;
+import com.java110.dto.payFeeConfigDiscount.PayFeeConfigDiscountDto;
 import com.java110.fee.dao.IFeeDiscountServiceDao;
-import com.java110.intf.fee.IFeeDiscountInnerServiceSMO;
+import com.java110.fee.discount.IComputeDiscount;
+import com.java110.intf.fee.*;
 import com.java110.po.feeDiscount.FeeDiscountPo;
+import com.java110.utils.cache.MappingCache;
+import com.java110.utils.factory.ApplicationContextFactory;
+import com.java110.utils.util.Assert;
 import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -27,6 +41,24 @@
 
     @Autowired
     private IFeeDiscountServiceDao feeDiscountServiceDaoImpl;
+
+    @Autowired
+    private IFeeInnerServiceSMO feeInnerServiceSMOImpl;
+
+    @Autowired
+    private IPayFeeConfigDiscountInnerServiceSMO payFeeConfigDiscountInnerServiceSMOImpl;
+
+    @Autowired
+    private IFeeDiscountSpecInnerServiceSMO feeDiscountSpecInnerServiceSMOImpl;
+
+    @Autowired
+    private IApplyRoomDiscountInnerServiceSMO applyRoomDiscountInnerServiceSMOImpl;
+
+    //鍩�
+    public static final String DOMAIN_COMMON = "DOMAIN.COMMON";
+
+    //閿�
+    public static final String DISCOUNT_MODE = "DISCOUNT_MODE";
 
 
     @Override
@@ -64,10 +96,177 @@
 
         List<FeeDiscountDto> feeDiscounts = BeanConvertUtil.covertBeanList(feeDiscountServiceDaoImpl.getFeeDiscountInfo(BeanConvertUtil.beanCovertMap(feeDiscountDto)), FeeDiscountDto.class);
 
+        freshDiscountSpec(feeDiscounts);
+
         return feeDiscounts;
     }
 
 
+    private void freshDiscountSpec(List<FeeDiscountDto> feeDiscounts) {
+
+        if (feeDiscounts == null || feeDiscounts.size() < 1) {
+            return;
+        }
+
+        List<String> discountIds = new ArrayList<>();
+        for (FeeDiscountDto feeDiscount : feeDiscounts) {
+            discountIds.add(feeDiscount.getDiscountId());
+        }
+
+        FeeDiscountSpecDto tmpFeeDiscountSpecDto = new FeeDiscountSpecDto();
+
+        tmpFeeDiscountSpecDto.setDiscountIds(discountIds.toArray(new String[discountIds.size()]));
+        tmpFeeDiscountSpecDto.setCommunityId(feeDiscounts.get(0).getCommunityId());
+
+        List<FeeDiscountSpecDto> feeDiscountSpecDtos = feeDiscountSpecInnerServiceSMOImpl.queryFeeDiscountSpecs(tmpFeeDiscountSpecDto);
+
+        if (feeDiscountSpecDtos == null || feeDiscountSpecDtos.size() < 1) {
+            return;
+        }
+        List<FeeDiscountSpecDto> tmpSpecs = null;
+        for (FeeDiscountDto feeDiscount : feeDiscounts) {
+            tmpSpecs = new ArrayList<>();
+            for (FeeDiscountSpecDto feeDiscountSpecDto : feeDiscountSpecDtos) {
+                if (feeDiscount.getDiscountId().equals(feeDiscountSpecDto.getDiscountId())) {
+                    tmpSpecs.add(feeDiscountSpecDto);
+                }
+            }
+            feeDiscount.setFeeDiscountSpecs(tmpSpecs);
+        }
+    }
+
+    /**
+     * 璁$畻鎶樻墸
+     *
+     * @param feeDetailDto
+     * @return
+     */
+    public List<ComputeDiscountDto> computeDiscount(@RequestBody FeeDetailDto feeDetailDto) {
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Calendar c = Calendar.getInstance();
+        List<ComputeDiscountDto> computeDiscountDtos = new ArrayList<>();
+        FeeDto feeDto = new FeeDto();
+        feeDto.setFeeId(feeDetailDto.getFeeId());
+        feeDto.setCommunityId(feeDetailDto.getCommunityId());
+        feeDto.setState(FeeDto.STATE_DOING);
+        List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto);
+        Assert.listOnlyOne(feeDtos, "璐圭敤涓嶅瓨鍦�");
+        PayFeeConfigDiscountDto payFeeConfigDiscountDto = new PayFeeConfigDiscountDto();
+        payFeeConfigDiscountDto.setConfigId(feeDtos.get(0).getConfigId());
+        payFeeConfigDiscountDto.setRow(feeDetailDto.getRow());
+        payFeeConfigDiscountDto.setPage(feeDetailDto.getPage());
+        payFeeConfigDiscountDto.setCommunityId(feeDetailDto.getCommunityId());
+        payFeeConfigDiscountDto.setStatusCd("0");
+        Date currentTime = new Date();
+        payFeeConfigDiscountDto.setCurrentTime(currentTime);
+        //鏍规嵁璐圭敤鏌ヨ鎶樻墸
+        List<PayFeeConfigDiscountDto> payFeeConfigDiscountDtos =
+                payFeeConfigDiscountInnerServiceSMOImpl.queryPayFeeConfigDiscounts(payFeeConfigDiscountDto);
+        if (payFeeConfigDiscountDtos == null || payFeeConfigDiscountDtos.size() < 1) {
+            computeApplyRoomDiscount(feeDetailDto, simpleDateFormat, c, computeDiscountDtos);
+            //鍙栧嚭寮�鍏虫槧灏勭殑鍊�
+            String value = MappingCache.getValue(DOMAIN_COMMON, DISCOUNT_MODE);
+            List<ComputeDiscountDto> computeDiscountDtoList = new ArrayList<>();
+            for (ComputeDiscountDto computeDiscountDto : computeDiscountDtos) {
+                computeDiscountDto.setValue(value);
+                if (!StringUtil.isEmpty(computeDiscountDto.getDiscountType()) && "3003".equals(computeDiscountDto.getDiscountType())) {
+                    computeDiscountDto.setArdId(feeDetailDto.getArdId());
+                }
+                computeDiscountDtoList.add(computeDiscountDto);
+            }
+            return computeDiscountDtos;
+        }
+        c.setTime(feeDetailDto.getStartTime());
+        double mon = Double.parseDouble(feeDetailDto.getCycles());
+        c.add(Calendar.MONTH, (int) mon);
+        //鑾峰彇缂磋垂缁撴潫鏃堕棿
+        Date finishTime = c.getTime();
+        for (PayFeeConfigDiscountDto tmpPayFeeConfigDiscountDto : payFeeConfigDiscountDtos) {
+            //鑾峰彇缂磋垂鏈�澶ф埅姝㈡椂闂�
+            Date payMaxEndTime = tmpPayFeeConfigDiscountDto.getPayMaxEndTime();
+            if (payMaxEndTime == null) {
+                doCompute(tmpPayFeeConfigDiscountDto, Double.parseDouble(feeDetailDto.getCycles()), computeDiscountDtos, feeDetailDto.getFeeId());
+            } else if (payMaxEndTime.getTime() >= finishTime.getTime()) {
+                doCompute(tmpPayFeeConfigDiscountDto, Double.parseDouble(feeDetailDto.getCycles()), computeDiscountDtos, feeDetailDto.getFeeId());
+            } else {
+                continue;
+            }
+        }
+        computeApplyRoomDiscount(feeDetailDto, simpleDateFormat, c, computeDiscountDtos);
+        //鍙栧嚭寮�鍏虫槧灏勭殑鍊�
+        String value = MappingCache.getValue(DOMAIN_COMMON, DISCOUNT_MODE);
+        List<ComputeDiscountDto> computeDiscountDtoList = new ArrayList<>();
+        for (ComputeDiscountDto computeDiscountDto : computeDiscountDtos) {
+            computeDiscountDto.setValue(value);
+            if (!StringUtil.isEmpty(computeDiscountDto.getDiscountType()) && "3003".equals(computeDiscountDto.getDiscountType())) {
+                computeDiscountDto.setArdId(feeDetailDto.getArdId());
+            }
+            computeDiscountDtoList.add(computeDiscountDto);
+        }
+        return computeDiscountDtoList;
+    }
+
+    private void computeApplyRoomDiscount(@RequestBody FeeDetailDto feeDetailDto, SimpleDateFormat simpleDateFormat, Calendar c, List<ComputeDiscountDto> computeDiscountDtos) {
+        if (!StringUtil.isEmpty(feeDetailDto.getPayerObjType()) && FeeDto.PAYER_OBJ_TYPE_ROOM.equals(feeDetailDto.getPayerObjType())) {
+            //鏍规嵁鎴垮眿ID,鍘绘姌鎵g敵璇疯〃鏌ヨ鏄惁鏈夋姌鎵�
+            ApplyRoomDiscountDto applyRoomDiscountDto = new ApplyRoomDiscountDto();
+            //瀹℃牳宸查�氳繃
+            applyRoomDiscountDto.setState("4");
+            //鏄惁鍙敤鐘舵�佹爣璇�(0琛ㄧず鍦ㄧ敤锛�1琛ㄧず涓嶅彲鐢�)
+            applyRoomDiscountDto.setInUse("0");
+            //灏忓尯ID
+            applyRoomDiscountDto.setCommunityId(feeDetailDto.getCommunityId());
+            //鎴垮眿id
+            applyRoomDiscountDto.setRoomId(feeDetailDto.getPayerObjId());
+            //寮�濮嬫椂闂�
+            applyRoomDiscountDto.setStartTime(simpleDateFormat.format(feeDetailDto.getStartTime()));
+            //缁撴潫鏃堕棿
+            c.setTime(feeDetailDto.getStartTime());
+            c.add(Calendar.DAY_OF_MONTH, 2);//寮�濮嬫椂闂达紝娣诲姞1锛�2澶╃殑鍐椾綑锛屽彧瑕佹瘮5灏忓嵆鍙�
+            applyRoomDiscountDto.setStartTime(simpleDateFormat.format(c.getTime()));//閲嶆柊璁剧疆寮�濮嬫椂闂�
+            double month = Double.parseDouble(feeDetailDto.getCycles());
+            c.add(Calendar.MONTH, (int) month);
+            c.add(Calendar.DAY_OF_MONTH, -5);//杩欓噷鏍规嵁璁剧疆鏃堕棿鑽h獕5澶�
+            Date endTime = c.getTime();
+            applyRoomDiscountDto.setEndTime(simpleDateFormat.format(endTime));
+            applyRoomDiscountDto.setFeeId(feeDetailDto.getFeeId());
+            //鏌ヨ鎶樻墸鐢宠琛�
+            List<ApplyRoomDiscountDto> applyRoomDiscountDtos = applyRoomDiscountInnerServiceSMOImpl.queryApplyRoomDiscounts(applyRoomDiscountDto);
+            //鍒ゆ柇鏌ヨ鐨勬姌鎵g敵璇疯〃鏄惁鏈夋暟鎹�
+            if (applyRoomDiscountDtos != null && applyRoomDiscountDtos.size() > 0) {
+                //鑾峰彇浼樻儬id
+                String discountId = applyRoomDiscountDtos.get(0).getDiscountId();
+                String ardId = applyRoomDiscountDtos.get(0).getArdId();
+                feeDetailDto.setArdId(ardId);
+                PayFeeConfigDiscountDto payFeeConfigDiscount = new PayFeeConfigDiscountDto();
+                payFeeConfigDiscount.setCommunityId(applyRoomDiscountDtos.get(0).getCommunityId());
+                payFeeConfigDiscount.setDiscountId(discountId);
+                doCompute(payFeeConfigDiscount, Double.parseDouble(feeDetailDto.getCycles()), computeDiscountDtos, feeDetailDto.getFeeId());
+            }
+        }
+    }
+
+    private void doCompute(PayFeeConfigDiscountDto tmpPayFeeConfigDiscountDto, double cycles, List<ComputeDiscountDto> computeDiscountDtos, String feeId) {
+        FeeDiscountDto feeDiscountDto = new FeeDiscountDto();
+        feeDiscountDto.setCommunityId(tmpPayFeeConfigDiscountDto.getCommunityId());
+        feeDiscountDto.setDiscountId(tmpPayFeeConfigDiscountDto.getDiscountId());
+        List<FeeDiscountDto> feeDiscountDtos = queryFeeDiscounts(feeDiscountDto);
+        if (feeDiscountDtos == null || feeDiscountDtos.size() < 1) {
+            return;
+        }
+        for (FeeDiscountDto tmpFeeDiscountDto : feeDiscountDtos) {
+            tmpFeeDiscountDto.setFeeId(feeId);
+            tmpFeeDiscountDto.setCycles(cycles);
+        }
+        IComputeDiscount computeDiscount = (IComputeDiscount) ApplicationContextFactory.getBean(feeDiscountDtos.get(0).getBeanImpl());
+        ComputeDiscountDto computeDiscountDto = computeDiscount.compute(feeDiscountDtos.get(0));
+        if (computeDiscountDto == null) {
+            return;
+        }
+        computeDiscountDtos.add(computeDiscountDto);
+    }
+
+
     @Override
     public int queryFeeDiscountsCount(@RequestBody FeeDiscountDto feeDiscountDto) {
         return feeDiscountServiceDaoImpl.queryFeeDiscountsCount(BeanConvertUtil.beanCovertMap(feeDiscountDto));

--
Gitblit v1.8.0