From 0e31fd20a1be8899f0ade4b7b7fb0e8d196624bf Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期二, 23 一月 2024 15:17:11 +0800
Subject: [PATCH] 开发业务接口

---
 server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java |  260 ++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 244 insertions(+), 16 deletions(-)

diff --git a/server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
index 847d831..3b4aaf7 100644
--- a/server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/service/business/impl/ApplyChangeServiceImpl.java
@@ -63,6 +63,8 @@
     private MemberMapper memberMapper;
 
     @Autowired
+    private MultifileMapper multifileMapper;
+    @Autowired
     private DuSolutionMapper duSolutionMapper;
     @Autowired
     private DuWorktypeMapper duWorktypeMapper;
@@ -113,6 +115,215 @@
         return  1;
 
     }
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public Integer uploadPidan(ApplyChange param) {
+        if(param.getId() == null
+                || param.getValidCode() == null
+                || param.getApplyStartTime() == null
+                || param.getPidanFile() == null
+                ||StringUtils.isBlank( param.getPidanFile().getFileurl())
+                ||StringUtils.isBlank( param.getPidanFile() .getName())){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+
+        ApplyChange model = applyChangeMapper.selectById(param.getId());
+        if(model == null ||!Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(model.getStatus(),Constants.ApplyChangeStatus.SIGNATURE.getKey())){
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
+        }
+
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        ApplyChange update = new ApplyChange();
+        update.setEditDate(new Date());
+        update.setEditor(user.getId());
+        update.setStatus(Constants.ApplyChangeStatus.APPROVE.getKey());
+        update.setCheckDate(update.getEditDate());
+        update.setCheckInfo(param.getCheckInfo());
+        update.setCheckUserId(user.getId());
+        update.setId(model.getId());
+        update.setValidCode(param.getValidCode());
+        update.setApplyStartTime(model.getApplyStartTime());
+        applyChangeMapper.updateById(update);
+
+        param.getPidanFile().setIsdeleted(Constants.ZERO);
+        param.getPidanFile().setCreator(user.getId());
+        param.getPidanFile().setObjId(update.getId());
+        param.getPidanFile().setCreateDate(update.getEditDate());
+        param.getPidanFile().setObjType(Constants.MultiFile.CA_PD_PDF.getKey());
+        param.getPidanFile().setType(Constants.TWO);
+        multifileMapper.insert(param.getPidanFile());
+
+        update.setApplyId(model.getApplyId());
+        long times =  param.getApplyStartTime().getTime() - model.getValidTime().getTime();
+        //澶勭悊鍔犲噺淇濇槑缁嗘暟鎹�
+        dealDetailsValidTime(update,times);
+
+
+        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.CA_PLATFORM_APPROVE;
+        String info = "";
+        if(model.getValidTime()!=null && model.getValidTime().getTime()/1000!= param.getApplyStartTime().getTime()/1000){
+            info =applyLogType.getInfo();
+            info = info.replace("${param1}",DateUtil.getPlusTime2(model.getValidTime()));
+            info = info.replace("${param2}",DateUtil.getPlusTime2(param.getApplyStartTime()));
+        }
+        ApplyLog log = new ApplyLog(update,applyLogType.getName(), info,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
+        applyLogMapper.insert(log);
+
+        return  1;
+
+    }
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public     Integer editPidan(ApplyChange param) {
+        if(param.getId() == null
+                || param.getValidCode() == null
+                || param.getPidanFile() == null
+                || param.getCheckInfo() == null
+                ||StringUtils.isBlank( param.getPidanFile().getFileurl())
+                ||StringUtils.isBlank( param.getPidanFile() .getName())){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+
+        ApplyChange model = applyChangeMapper.selectById(param.getId());
+        if(model == null ||!Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
+            throw  new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(model.getStatus(),Constants.ApplyChangeStatus.APPROVE.getKey())){
+            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇峰綋鍓嶄笉鏀寔璇ユ搷浣渵");
+        }
+
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        ApplyChange update = new ApplyChange();
+        update.setEditDate(new Date());
+        update.setEditor(user.getId());
+        update.setCheckDate(update.getEditDate());
+        update.setCheckInfo(param.getCheckInfo());
+        update.setCheckUserId(user.getId());
+        update.setId(model.getId());
+        update.setValidCode(param.getValidCode());
+        applyChangeMapper.updateById(update);
+        //鍒犻櫎鍘熸湁鐨勪繚鍗曚俊鎭�
+        multifileMapper.delete(new UpdateWrapper<Multifile>().lambda()
+                .set(Multifile::getIsdeleted,Constants.ZERO)
+                .eq(Multifile::getIsdeleted,Constants.ZERO)
+                .eq(Multifile::getObjId,update.getId())
+                .eq(Multifile::getObjType,Constants.MultiFile.CA_PD_PDF.getKey())
+        );
+        param.getPidanFile().setIsdeleted(Constants.ZERO);
+        param.getPidanFile().setObjId(update.getId());
+        param.getPidanFile().setCreator(user.getId());
+        param.getPidanFile().setCreateDate(update.getEditDate());
+        param.getPidanFile().setObjType(Constants.MultiFile.CA_PD_PDF.getKey());
+        param.getPidanFile().setType(Constants.TWO);
+        multifileMapper.insert(param.getPidanFile());
+
+        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.CA_PALTFORM_EDIT_PIDAN;
+        String info =  applyLogType.getInfo();
+        info = info.replace("${param}",param.getCheckInfo());
+        ApplyLog log = new ApplyLog(update,applyLogType.getName(), info,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
+        applyLogMapper.insert(log);
+
+        return  1;
+
+    }
+
+    /**
+     * 澶勭悊鍔犲噺淇濇槑缁嗘暟鎹�
+     * @param update
+     * @param times
+     */
+    private void dealDetailsValidTime(ApplyChange update,long times) {
+        List<ApplyChagneDetail> detailList = applyChagneDetailJoinMapper.selectJoinList(ApplyChagneDetail.class,
+                new MPJLambdaWrapper<ApplyChagneDetail>()
+                        .selectAll(ApplyChagneDetail.class)
+                        .selectAs(Solutions::getTimeUnit,ApplyChagneDetail::getSolutionTimeUnit)
+                        .selectAs(Solutions::getPrice,ApplyChagneDetail::getSolutionPrice)
+                  .leftJoin(ApplyChange.class, ApplyChange::getId, ApplyChagneDetail::getApplyChangeId)
+                  .leftJoin(Solutions.class, Solutions::getId, ApplyChange::getSolutionsId)
+                  .eq(ApplyChagneDetail::getApplyChangeId,update.getId())
+                  .eq(ApplyChagneDetail::getIsdeleted,Constants.ZERO) );
+        if(detailList ==null || detailList.size()==0){
+            return;
+        }
+        List<ApplyDetail> addList = new ArrayList<>();
+        List<Integer> reduceMembers = new ArrayList<>();
+        BigDecimal totalFee = new BigDecimal(0);
+        BigDecimal currentFee = new BigDecimal(0);
+
+        for(ApplyChagneDetail detail : detailList){
+            if(Constants.equalsInteger(detail.getType(),Constants.ZERO)){
+                //鍔犱繚
+                ApplyDetail add = new ApplyDetail();
+                add.setApplyId(update.getApplyId());
+                add.setValidCode(update.getValidCode());
+                add.setFee(detail.getFee());
+                add.setIsdeleted(Constants.ZERO);
+                add.setCreator(update.getEditor());
+                add.setCreateDate(update.getEditDate());
+                add.setMemberId(detail.getMemberId());
+                add.setMemberName(detail.getMemberName());
+                add.setWorktypeId(detail.getWorktypeId());
+                add.setDuId(detail.getDuId());
+                add.setStartTime(update.getApplyStartTime());
+                add.setEndTime(detail.getEndTime());
+                add.setFee(Constants.countDetailFee(detail.getSolutionTimeUnit(),detail.getSolutionPrice(), add.getStartTime(),add.getEndTime()));
+                if(DateUtil.daysBetweenDates(add.getStartTime(),new Date() )>=0){
+                    //濡傛灉宸蹭骇鐢熻垂鐢紝璁$畻宸蹭骇鐢熻垂鐢�
+                    add.setCurrentFee(Constants.countDetailFee(detail.getSolutionTimeUnit(),detail.getSolutionPrice(), add.getStartTime(),new Date()));
+                }
+                addList.add(add);
+                totalFee.add(add.getFee());
+                currentFee.add(add.getCurrentFee());
+            }else{
+                //鍑忎繚鎿嶄綔
+                //鏌ヨ鍛樺伐鏄湪涓诲崟涓� 鏄惁瀛樺湪鐢熸晥涓殑鏁版嵁
+                ApplyDetail oldModel = applyDetailJoinMapper.selectOne(new QueryWrapper<ApplyDetail>().lambda()
+                        .eq(ApplyDetail::getApplyId, update.getApplyId())
+                        .eq(ApplyDetail::getMemberId, detail.getMemberId())
+                        .orderByDesc(ApplyDetail::getCreateDate)
+                        .last("limit 1"));
+                if(oldModel == null || oldModel.getStartTime()==null || oldModel.getStartTime().getTime() > update.getApplyStartTime().getTime()){
+                    throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鐢ㄦ埛銆�"+detail.getMemberName()+"銆戝師淇濆崟淇℃伅鏈夎锛屽綋鍓嶇敵璇蜂笉鏀寔鍑忎繚澶勭悊锛�");
+                }
+                BigDecimal updateFee = (Constants.countDetailFee(detail.getSolutionTimeUnit(),detail.getSolutionPrice(), oldModel.getStartTime(),update.getApplyStartTime()));
+                BigDecimal updateCurrentFee = new BigDecimal(0);
+                if(DateUtil.daysBetweenDates(update.getApplyStartTime(),new Date() )>0){
+                    //濡傛灉鐢熸晥鏃堕棿 鏄粖澶╀箣鍓嶏紝閫�鍥炲凡浜х敓璐圭敤锛岃绠楀凡浜х敓璐圭敤(鎬昏垂鐢�-宸蹭骇鐢熻垂鐢�)
+                    updateCurrentFee = updateFee.subtract(oldModel.getCurrentFee());
+                }
+                applyDetailJoinMapper.update(null, new UpdateWrapper<ApplyDetail>().lambda()
+                        .setSql(" fee = ifnull(fee,0)+"+updateFee)
+                        .setSql(" current_fee = "+updateFee)
+                        .set(ApplyDetail::getEditor,update.getEditor())
+                        .set(ApplyDetail::getEditDate,update.getEditDate())
+                        .eq(ApplyDetail::getId,oldModel.getApplyId())
+                );
+                totalFee.add(updateFee);
+                currentFee.add(updateCurrentFee);
+
+            }
+        }
+        if(addList!=null && addList.size()>0){
+            applyChagneDetailJoinMapper.insertBatchSomeColumn(addList);
+        }
+        if(totalFee.compareTo(new BigDecimal(0)) != 0){
+            //濡傛灉淇濆崟閲戦鍙戠敓缂栫爜锛屾洿鏂版�讳繚鍗曢噾棰�
+            insuranceApplyMapper.update(null, new UpdateWrapper<InsuranceApply>().lambda()
+                    .setSql(" fee = ifnull(fee,0)+"+totalFee)
+                    .setSql(" current_fee = ifnull(current_fee,0)+"+currentFee)
+                    .set(InsuranceApply::getEditor,update.getEditor())
+                    .set(InsuranceApply::getEditDate,update.getEditDate())
+                    .eq(InsuranceApply::getId,update.getApplyId())
+            );
+
+        }
+
+    }
+
     /**
      * 骞冲彴閫�鍥炴姇淇�
      * @param param
@@ -129,28 +340,46 @@
         if(model == null ||!Constants.equalsInteger(model.getIsdeleted(),Constants.ZERO)){
             throw  new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        if(Constants.equalsInteger(model.getStatus(),Constants.ApplyChangeStatus.UPLOAD.getKey())
-                ||Constants.equalsInteger(model.getStatus(),Constants.ApplyChangeStatus.APPROVE.getKey())){
-            //宸叉彁浜ゅ拰宸插畬鎴愮姸鎬佷笉鏀寔瀹℃牳涓嶉�氳繃
-            throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
-        }
+
         LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        Constants.ApplyLogType applyLogType = null;
+        String info = "";
         ApplyChange update = new ApplyChange();
+        if(param.getDealBackApply() ==1){
+            //濡傛灉鏄┏鍥�,鍙兘鍙┏鍥炲凡绛剧珷鐘舵�佷笅鐨勯��鍥炵敵璇风姸鎬佽繘琛屾搷浣�
+            if(!Constants.equalsInteger(model.getStatus(),Constants.ApplyChangeStatus.RETURN_APPLY_SIGNATURE.getKey())){
+                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
+            }
+            applyLogType = Constants.ApplyLogType.CA_PALTFORM_REFUSE_APPLY;
+            info = applyLogType.getInfo();
+            info = info.replace("${param}", param.getCheckInfo());
+            update.setStatus(Constants.ApplyChangeStatus.SIGNATURE.getKey());
+        }else{
+            //濡傛灉鏄悓鎰�,涓ょ鐢宠閫�鍥炵姸鎬侀兘鍙搷浣�
+            if(!(Constants.equalsInteger(model.getStatus(),Constants.ApplyChangeStatus.RETURN_APPLY_SIGNATURE.getKey())
+                    ||Constants.equalsInteger(model.getStatus(),Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey()))){
+                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ョ敵璇风姸鎬佸凡娴佽浆锛屽綋鍓嶄笉鏀寔璇ユ搷浣渵");
+            }
+            applyLogType = Constants.ApplyLogType.CA_PALTFORM_REFUSE_APPLY;
+            if( Constants.equalsInteger(model.getStatus(),Constants.ApplyChangeStatus.RETURN_APPLY_SIGNATURE.getKey())){
+                update.setStatus(Constants.ApplyChangeStatus.SIGNATURE.getKey());
+            }else if( Constants.equalsInteger(model.getStatus(),Constants.ApplyChangeStatus.RETURN_APPLY_UPLOAD.getKey())){
+                update.setStatus(Constants.ApplyChangeStatus.UPLOAD.getKey());
+            }
+        }
         update.setEditDate(new Date());
         update.setEditor(user.getId());
-        update.setStatus(Constants.ApplyChangeStatus.PALTFORM_CHECK_PASS_NO.getKey());
+        //鍚屾剰閫�鍥烇紝鐩存帴鍥炲埌鏈�鍒濈姸鎬侊紝濡傛灉椹冲洖閫�鍥炵敵璇凤紝鍒欎繚鍗曠姸鎬佸洖鍒板緟涓婁紶淇濋櫓鍗�
         update.setCheckDate(update.getEditDate());
         update.setCheckInfo(param.getCheckInfo());
         update.setCheckUserId(user.getId());
         update.setId(model.getId());
         applyChangeMapper.updateById(update);
 
-        Constants.ApplyLogType applyLogType = Constants.ApplyLogType.CA_PLATFORM_CHECK_PASS_NO;
-        String info =applyLogType.getInfo();
-        info = info.replace("${param}", update.getCheckInfo());
-        ApplyLog log = new ApplyLog(update,applyLogType.getName(),info,update.getId(),applyLogType.getKey(), JSONObject.toJSONString(model), JSONObject.toJSONString(update));
+        ApplyLog log = new ApplyLog(update,applyLogType.getName(),info,update.getId(),applyLogType.getKey(),JSONObject.toJSONString(model), JSONObject.toJSONString(update));
         applyLogMapper.insert(log);
         return  1;
+
 
     }
 
@@ -281,13 +510,12 @@
             List<ApplyDetail> applyDetailList = applyDetailJoinMapper.selectList(new QueryWrapper<ApplyDetail>().lambda()
                     .eq(ApplyDetail::getApplyId, applyChange.getApplyId())
                     .eq(ApplyDetail::getMemberId, applyChagneDetail.getMemberId())
-                    .le(ApplyDetail::getStartTime, "now()")
-                    .ge(ApplyDetail::getEndTime, "now()"));
+                    .orderByDesc(ApplyDetail::getCreateDate));
             if (applyDetailList.size() > Constants.ONE) {
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍑忎繚浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戜繚鍗曚俊鎭紓甯革紝瀛樺湪澶氭潯鏁版嵁");
             }
             ApplyDetail applyDetail = applyDetailList.get(Constants.ZERO);
-            if (applyChange.getValidTime().compareTo(DateUtil.StringToDate(applyDetail.getEndTime())) <= 0) {
+            if (applyChange.getValidTime().compareTo(applyDetail.getEndTime()) <= 0) {
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍑忎繚浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戜繚鍗曚繚闅滄棩鏈熻嚦锛氥��" + applyDetail.getEndTime() + "銆戞棤娉曢�氳繃鏈鐢宠");
             }
             applyChagneDetail.setCreateDate(new Date());
@@ -296,8 +524,8 @@
             applyChagneDetail.setApplyChangeId(applyChange.getId());
             applyChagneDetail.setType(Constants.ONE);
             applyChagneDetail.setFee(
-                    Constants.countDetailFee(solutions,DateUtil.stringToDate(applyDetail.getEndTime(),"yyyy-MM-dd HH:mm:ss"),DateUtil.stringToDate(applyDetail.getStartTime(),"yyyy-MM-dd HH:mm:ss"))
-                            .subtract(Constants.countDetailFee(solutions,applyChange.getValidTime(),DateUtil.stringToDate(applyDetail.getStartTime(),"yyyy-MM-dd HH:mm:ss")))
+                    Constants.countDetailFee(solutions, applyDetail.getEndTime(),applyDetail.getStartTime())
+                            .subtract(Constants.countDetailFee(solutions,applyChange.getValidTime(), applyDetail.getStartTime()))
             );
             applyChagneDetailJoinMapper.insert(applyChagneDetail);
         }
@@ -407,7 +635,7 @@
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎹㈠巶浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戜繚鍗曚俊鎭紓甯革紝瀛樺湪澶氭潯鏁版嵁");
             }
             ApplyDetail applyDetail = applyDetailList.get(Constants.ZERO);
-            if(applyChange.getValidTime().compareTo(DateUtil.StringToDate(applyDetail.getEndTime()))<=0){
+            if(applyChange.getValidTime().compareTo( applyDetail.getEndTime())<=0){
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎹㈠巶浜哄憳銆�" + applyChagneDetail.getMemberName() + "銆戜繚鍗曚繚闅滄棩鏈熻嚦锛氥��"+applyDetail.getEndTime()+"銆戞棤娉曢�氳繃鏈鐢宠");
             }
             //楠岃瘉娲鹃仯鍗曚綅淇℃伅 涓庡伐绉嶄俊鎭� 鏄惁瀛樺湪

--
Gitblit v1.9.3