From 65314b14210a175bae095649584614973b3619df Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期二, 12 八月 2025 13:48:14 +0800
Subject: [PATCH] 代码提交

---
 ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java | 1091 ++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 930 insertions(+), 161 deletions(-)

diff --git a/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java b/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java
index 7649c23..2e80ce8 100644
--- a/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java
+++ b/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java
@@ -1,36 +1,51 @@
 package com.ruoyi.project.service.impl;
 
-import java.io.File;
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.ruoyi.common.config.RuoYiConfig;
-import com.ruoyi.common.tax.TaxtUtils;
-import com.ruoyi.common.utils.HttpClientKit;
-import com.ruoyi.common.utils.bean.DtoConversionUtils;
-import com.ruoyi.project.domain.*;
-import com.ruoyi.project.domain.vo.*;
-import com.ruoyi.project.mapper.*;
-import com.ruoyi.project.service.IServiceFundSharedService;
-import com.ruoyi.project.service.IServiceFunddetailService;
-import com.ruoyi.project.service.IServiceFunddetailSharedService;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.ObjectUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.config.RuoYiConfig;
+import com.ruoyi.common.constant.HttpStatus;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.exception.base.BaseException;
+import com.ruoyi.common.utils.HttpClientKit;
 import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.project.service.IServiceFundService;
+import com.ruoyi.common.utils.bean.DtoConversionUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.project.domain.*;
+import com.ruoyi.project.domain.vo.*;
+import com.ruoyi.project.mapper.*;
+import com.ruoyi.project.service.*;
+import com.ruoyi.system.mapper.SysUserMapper;
+import com.ruoyi.system.mapper.SysUserRoleMapper;
+import com.ruoyi.system.service.ISysUserService;
+import com.taobao.api.ApiException;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
 
 /**
  * 璐圭敤鐢宠涓籗ervice涓氬姟灞傚鐞�
@@ -45,6 +60,21 @@
     ServiceFundMapper serviceFundMapper;
 
     @Autowired
+    private DingTalkService dingTalkService;
+
+    @Autowired
+    private IServiceFundflowruleService serviceFundflowruleService;
+
+    @Autowired
+    private IServiceFundflowService serviceFundflowService;
+
+    @Autowired
+    private SysUserRoleMapper sysUserRoleMapper;
+
+    @Autowired
+    SysUserMapper sysUserMapper;
+
+    @Autowired
     ServiceFunddetailMapper serviceFunddetailMapper;
 
     @Autowired
@@ -52,6 +82,21 @@
 
     @Autowired
     ServiceReimbursementMapper serviceReimbursementMapper;
+
+    @Autowired
+    ServiceReimbursementSharedMapper serviceReimbursementSharedMapper;
+
+    @Autowired
+    private IServiceFundflowService fundflowService;
+
+    @Autowired
+    private ISysUserService sysUserService;
+
+    @Autowired
+    private IServiceSystemmessageService iServiceSystemmessageService;
+
+    @Autowired
+    IServiceReimbursementService iServiceReimbursementService;
 
     @Autowired
     IServiceFundSharedService sharedService;
@@ -68,6 +113,155 @@
     @Autowired
     private IServiceFunddetailService serviceFunddetailService;
 
+    @Autowired
+    private VExpertfeeExpertMapper vExpertfeeExpertMapper;
+
+    @Autowired
+    private VExpertfeeDonorMapper vExpertfeeDonorMapper;
+
+    @Autowired
+    private VExpertfeeTotalMapper vExpertfeeTotalMapper;
+
+    @Value("${xyurl}")
+    private String xyurl;
+
+    @Value("${rexyurl}")
+    private String rexyurl;
+
+    @Value("${newSwitch}")
+    private Integer newSwitch;
+
+    @Value("${spring.profiles.active}")
+    private String active;
+
+    /**
+     * 鑷磋繙绯荤粺娴佺▼閫�鍥�
+     *
+     * @param serviceProcessVO
+     * @return
+     */
+    @Override
+    public Boolean backDocument(ServiceProcessDocVO serviceProcessVO) {
+        String applytype = serviceProcessVO.getApplytype();
+
+        if (applytype.equals("0")) {
+            //宸梾鎶ラ攢閫�鍥�
+            ServiceReimbursement serviceReimbursement = new ServiceReimbursement();
+            serviceReimbursement.setId(serviceProcessVO.getBackCode());
+            List<ServiceReimbursement> serviceReimbursementList = iServiceReimbursementService.queryList(serviceReimbursement);
+            ServiceReimbursement serviceReimbursement1 = serviceReimbursementList.get(0);
+            serviceReimbursement1.setFlowlevel(100L);
+            serviceReimbursement1.setDelFlag(0);
+            serviceReimbursement1.setUploadStates(0);
+            serviceReimbursement1.setBackflowlevel(199L);
+            serviceReimbursement1.setRecordstatus(-1);
+            iServiceReimbursementService.updateById(serviceReimbursement1);
+
+            //鍒犻櫎share鏁版嵁
+            serviceReimbursementSharedMapper.delResharedInfoByReimid(serviceReimbursement1.getId());
+
+        } else {
+            //璐圭敤鐢宠閫�鍥�
+            ServiceFund serviceFund = new ServiceFund();
+            serviceFund.setId(serviceProcessVO.getBackCode());
+            List<ServiceFund> serviceFunds = queryInfoById(serviceFund);
+            ServiceFund serviceFund1 = serviceFunds.get(0);
+            serviceFund1.setFlowlevel(100L);
+            serviceFund1.setDel_flag(0);
+            serviceFund1.setRecordstatus(-1);
+            serviceFund1.setBackflowlevel(199);
+            updateById(serviceFund1);
+
+            //鍒犻櫎share鏁版嵁
+            serviceFundSharedMapper.delfundsharedInfoById(null, serviceFund1.getId());
+
+            //杩欎釜娑堟伅鍙戦�侊紝灏变笉鍦ㄨ繖鍋氫簡锛屽湪瀹℃壒璁板綍鐨勬帴鍙i噷鍋氾紙鍗虫棩蹇楁帴鍙o級
+            //sendMeg(serviceFund1.getApplytype(), sysUser.getPhonenumber());
+        }
+
+        return true;
+    }
+
+    /**
+     * 娴佺▼瀹℃壒鏃ュ織
+     *
+     * @param serviceProcessVO
+     * @return
+     */
+    @Override
+    public Boolean processlog(ServiceProcessVO serviceProcessVO) {
+
+        String userNo = null;
+        String userName = null;
+        String phone = null;
+        String applytype = null;
+        Long flowlevel = null;
+        if (serviceProcessVO.getApplytype().equals("0")) {
+            ServiceReimbursement serviceReimbursement = new ServiceReimbursement();
+            serviceReimbursement.setId(serviceProcessVO.getBackCode());
+            List<ServiceReimbursement> serviceReimbursementList = iServiceReimbursementService.queryList(serviceReimbursement);
+            if (CollectionUtils.isEmpty(serviceReimbursementList)) {
+                log.error("serviceReimbursementList娌℃湁鏌ュ埌鏁版嵁锛歿}", serviceProcessVO.getBackCode());
+                return false;
+            }
+            //杩欏嚑涓�硷紝闇�瑕佺粰涓嬮潰鐢�;  applytype锛屼笉鑳界敤浼犺繘鏉ョ殑锛屽彧鑳借嚜宸辨煡
+            userNo = serviceReimbursementList.get(0).getUserno();
+            userName = serviceReimbursementList.get(0).getUsername();
+            phone = serviceReimbursementList.get(0).getPhone();
+            flowlevel = serviceReimbursementList.get(0).getFlowlevel();
+            applytype = "0";
+        } else {
+            ServiceFund serviceFund = new ServiceFund();
+            serviceFund.setId(serviceProcessVO.getBackCode());
+            List<ServiceFund> serviceFunds = queryInfoById(serviceFund);
+            if (CollectionUtils.isEmpty(serviceFunds)) {
+                log.error("serviceFunds娌℃湁鏌ュ埌鏁版嵁锛歿}", serviceProcessVO.getBackCode());
+                return false;
+            }
+            userNo = serviceFunds.get(0).getUserno();
+            userName = serviceFunds.get(0).getUsername();
+            phone = serviceFunds.get(0).getPhone();
+            flowlevel = serviceFunds.get(0).getFlowlevel();
+            applytype = serviceFunds.get(0).getApplytype();
+        }
+
+        //灏嗘搷浣滀繚瀛樺埌fundflow琛ㄤ腑
+        ServiceFundflow serviceFundflow = new ServiceFundflow();
+        serviceFundflow.setCreateBy("admin");
+        serviceFundflow.setCreateTime(new Date());
+        serviceFundflow.setUpdateBy("admin");
+        serviceFundflow.setUpdateTime(new Date());
+        serviceFundflow.setCheckusername(serviceProcessVO.getCheckusername());
+        serviceFundflow.setFlowcontent(serviceProcessVO.getFlowcontent());
+        serviceFundflow.setFlowconclusion(1);
+        serviceFundflow.setFundtype(2);
+        serviceFundflow.setFlowlevel(flowlevel.intValue());
+        if (serviceProcessVO.getFlowconclusion() == 3) serviceFundflow.setFlowlevel(999);
+        serviceFundflow.setApplytype(applytype);
+        serviceFundflow.setFundid(serviceProcessVO.getBackCode());
+        serviceFundflow.setCheckTime(serviceProcessVO.getCheckTime());
+        fundflowService.save(serviceFundflow);
+
+
+        SysUser sysUser = sysUserService.selectUserByUserName(userNo);
+        sendMeg(serviceProcessVO, phone);
+        //鍙戦�佷俊鎭繚瀛�
+        ServiceSystemmessage serviceSystemmessage = new ServiceSystemmessage();
+        serviceSystemmessage.setFundtype(1);
+        serviceSystemmessage.setSenduserno(sysUser.getUserName());
+        serviceSystemmessage.setSendusername(sysUser.getNickName());
+        serviceSystemmessage.setReceiveuserno(userNo);
+        serviceSystemmessage.setReceiveusername(userName);
+        serviceSystemmessage.setUpdateTime(new Date());
+        serviceSystemmessage.setUpdateBy(sysUser.getNickName());
+        serviceSystemmessage.setIsread(0);
+        serviceSystemmessage.setMessagetype(1);
+        serviceSystemmessage.setMessagetitle("璐㈠姟绯荤粺淇℃伅");
+        serviceSystemmessage.setMessagecontent(serviceProcessVO.getFlowcontent());
+        iServiceSystemmessageService.save(serviceSystemmessage);
+
+        return true;
+    }
 
     /**
      * 鏌ヨ璐圭敤鐢宠涓诲垪琛�(鍖呭惈鍒犻櫎鐨�)
@@ -83,6 +277,9 @@
         }
         if (serviceFund.getId() != null) {
             wrappers.eq(ServiceFund::getId, serviceFund.getId());
+        }
+        if (serviceFund.getFundTaxId() != null) {
+            wrappers.eq(ServiceFund::getFundTaxId, serviceFund.getFundTaxId());
         }
         if (StringUtils.isNotBlank(serviceFund.getUserno())) {
             wrappers.eq(ServiceFund::getUserno, serviceFund.getUserno());
@@ -105,9 +302,17 @@
         if (serviceFund.getUploadtime() != null) {
             wrappers.eq(ServiceFund::getUploadtime, serviceFund.getUploadtime());
         }
+        if (serviceFund.getUploadStates() != null) {
+            wrappers.eq(ServiceFund::getUploadStates, serviceFund.getUploadStates());
+        }
         if (serviceFund.getFlowlevel() != null) {
             wrappers.eq(ServiceFund::getFlowlevel, serviceFund.getFlowlevel());
         }
+        if (serviceFund.getJxrq() != null) {
+            wrappers.eq(ServiceFund::getJxrq, serviceFund.getJxrq());
+        }
+        // 娣诲姞 group by donorname
+//        wrappers.groupBy(ServiceFund::getDonorname);
         return this.list(wrappers);
     }
 
@@ -128,6 +333,392 @@
         return serviceFundMapper.getInfoByInfoId(infoid);
     }
 
+    @Override
+    public Map<String, String> checkFund(CheckFundVO checkFundVO, LoginUser loginUser) {
+        ServiceFund serviceFund = getById(checkFundVO.getFundid());
+        Map<String, String> map = new HashMap<>();
+
+        if (serviceFund == null) {
+            map.put(HttpStatus.NO_CONTENT + "", "璐圭敤缂栧彿涓嶆纭�");
+            return map;
+        }
+
+        Integer TotalLevel = 0;
+        ServiceFundflowrule serviceFundflowrule = new ServiceFundflowrule();
+        serviceFundflowrule.setFundtype(2);
+        serviceFundflowrule.setApplytype(serviceFund.getApplytype());
+        serviceFundflowrule.setCheckuserno(loginUser.getUsername());
+        log.info("serviceFundController---checkFund---queryList鐨勫叆鍙傚�約erviceFundflowrule:{}", serviceFundflowrule);
+        List<ServiceFundflowrule> serviceFundflowrules = serviceFundflowruleService.queryList(serviceFundflowrule);
+
+        if (serviceFundflowrules == null || serviceFundflowrules.stream().count() == 0) {
+            map.put(HttpStatus.ERROR + "", "褰撳墠浜哄憳鏃犳璁板綍瀹℃牳鏉冮檺");
+            return map;
+        }
+
+        if (serviceFundflowrules.get(0).getFlowlevel() - 1 != serviceFund.getFlowlevel()) {
+            map.put(HttpStatus.ERROR + "", "褰撳墠浜哄憳涓庢璁板綍鐨勫鏍哥骇鍒笉绗�");
+            return map;
+        }
+
+        if (serviceFundflowrules != null && serviceFundflowrules.stream().count() > 0) {
+            TotalLevel = serviceFundflowrules.get(0).getTotallevel();
+        }
+
+        Integer CheckFlag = 0;
+        Integer RecordStatus = serviceFund.getRecordstatus();
+        Integer FlowLevel = serviceFund.getFlowlevel().intValue();
+        Integer OriginalFlowLevel = FlowLevel;
+        if (checkFundVO.getFlowconclusion() == 1) {
+            CheckFlag = 1;
+            if (TotalLevel == 0) {
+                RecordStatus = 99;
+            } else {
+                if (TotalLevel == FlowLevel + 1) {
+                    RecordStatus = 99;
+                } else {
+                    RecordStatus = (FlowLevel + 1) * 2;
+                }
+            }
+            FlowLevel = FlowLevel + 1;
+            SysUser user = loginUser.getUser();
+            if (serviceFund.getFlowlevel() == Long.valueOf(serviceFundflowrules.get(0).getFlowlevel() - 1) && serviceFund.getBackflowlevel() == 100) {
+                log.info("璐㈠姟閫�鍥炲啀鎻愪氦锛屽嚭绾冲啀娆″鎵癸紝涔嬪悗鎻愪氦鍒拌储鍔�");
+                serviceFund.setFinancechecher("瀹℃壒浜猴細" + user.getUserName() + " & 瀹℃壒鏃堕棿" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + " & 瀹℃壒缁撴灉锛氶�氳繃");
+
+                serviceFund.setFlowlevel(serviceFundflowrules.get(0).getTotallevel().longValue());
+                serviceFund.setRecordstatus(99);
+                serviceFund.setUploadStates(1);
+                updateById(serviceFund);
+
+                //鏁版嵁鍙戦��
+                Boolean aBoolean1 = null;
+                if (newSwitch == 1) {
+                    aBoolean1 = sendData(serviceFund);
+                    if (!aBoolean1) {
+                        map.put("500", "鍙戦�佸け璐�");
+                        return map;
+                    }
+                }
+                //淇濆瓨瀹℃壒娴佺▼琛�
+                ServiceFundflow serviceFundflow = new ServiceFundflow();
+                serviceFundflow.setFundid(serviceFund.getId());
+                serviceFundflow.setCheckuserno(user.getUserName());
+                serviceFundflow.setCheckusername(user.getNickName());
+                serviceFundflow.setFundtype(2);
+                serviceFundflow.setApplytype(serviceFund.getApplytype());
+                serviceFundflow.setFlowconclusion(CheckFlag);
+                serviceFundflow.setFlowcontent("閫氳繃");
+                Boolean aBoolean = serviceFundflowService.saveData(serviceFundflow);
+                map.put("200", "success");
+                return map;
+            }
+            //濡傛灉褰撳墠鐧婚檰鏄储鍔★紝鍒欒繘琛岃褰�
+            List<Integer> roleIds = sysUserRoleMapper.getUserRoleByUserId(user.getUserId());
+            if (roleIds != null && roleIds.contains(11)) {
+                //11涓鸿储鍔�
+                serviceFund.setFinancechecher("瀹℃壒浜猴細" + user.getUserName() + " & 瀹℃壒鏃堕棿" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " & 瀹℃壒缁撴灉锛氶�氳繃");
+            }
+
+            //璁板綍涓�涓嬶紝涓嬩竴绾х殑瀹℃壒锛屼互渚夸簬涓嬩竴绾ч��鍥炲悗锛屽彂璧疯�呮彁浜ゆ椂锛岃兘鍐嶆彁鍒板綋鍓嶅鎵瑰眰绾�
+            serviceFund.setBackflowlevel(FlowLevel);
+        } else {
+            CheckFlag = 2;
+            if (CheckFlag == 2) {
+                //搴斿尰闄㈣姹傚鏋滃嚭鐜伴��鍥烇紝鐩存帴閫�鍒板彂璧疯��
+                FlowLevel = 0;
+                RecordStatus = -1;
+                log.info("serviceFund杩涙潵浜嗗悧锛燂紵锛燂紵锛燂紵 :{},{}", RecordStatus, FlowLevel);
+                System.out.println("serviceFund杩涙潵浜嗗悧锛燂紵锛燂紵锛燂紵");
+            } else {
+                RecordStatus = (FlowLevel + 1) * 2 - 1;
+                FlowLevel = (FlowLevel - 1);
+                if (FlowLevel < 0) {
+                    FlowLevel = 0;
+                }
+            }
+
+            SysUser sysUser = sysUserService.selectUserByUserName(serviceFund.getUserno());
+            ArrayList<ConcurrentHashMap<String, Object>> contentList = new ArrayList<>();
+            ConcurrentHashMap cmap = new ConcurrentHashMap();
+            cmap.put("瀹℃壒浜猴細", loginUser.getUser().getUserName());
+            cmap.put("瀹℃壒鏃堕棿锛�", new Date());
+            cmap.put("鎰忚锛�", "涓嶉�氳繃");
+            if (StringUtils.isNotBlank(checkFundVO.getFlowcontent())) cmap.put("鎰忚锛�", checkFundVO.getFlowcontent());
+            contentList.add(cmap);
+            DingTalkReqVo dingTalkReqVo = new DingTalkReqVo();
+            dingTalkReqVo.setTitle("璐㈠姟绯荤粺椹冲洖淇℃伅");
+            dingTalkReqVo.setNumber(sysUser.getPhonenumber());
+            dingTalkReqVo.setContents(contentList);
+            dingTalkService.sendNotification(dingTalkReqVo);
+        }
+
+        serviceFund.setRecordstatus(RecordStatus);
+        serviceFund.setFlowlevel(FlowLevel.longValue());
+        //  serviceFund.setBackflowlevel(serviceFund.getFlowlevel());
+
+        ServiceFundflow serviceFundflow = new ServiceFundflow();
+        SysUser user = loginUser.getUser();
+        serviceFundflow.setFundid(serviceFund.getId());
+        serviceFundflow.setCheckuserno(user.getUserName());
+        serviceFundflow.setCheckusername(user.getNickName());
+        serviceFundflow.setFundtype(2);
+        serviceFundflow.setApplytype(serviceFund.getApplytype());
+        serviceFundflow.setFlowconclusion(CheckFlag);
+        if (StringUtils.isNotBlank(checkFundVO.getFlowcontent())) {
+            serviceFundflow.setFlowcontent(checkFundVO.getFlowcontent());
+        } else {
+            serviceFundflow.setFlowcontent(checkFundVO.getFlowconclusion() == 1 ? "閫氳繃" : "涓嶉�氳繃");
+        }
+        serviceFundflow.setFlowlevel(OriginalFlowLevel + 1);
+
+        Boolean aBoolean = serviceFundflowService.saveData(serviceFundflow);
+        log.info("sserviceFund淇濆瓨鐨勭殑鍊兼槸-------- :{}", aBoolean);
+
+        //053瀹℃壒閫氳繃涔嬪悗锛屽氨闇�瑕佹妸鈥滃姙鍏涓讳换鈥濈殑鍚嶅瓧濉笂
+        if (checkFundVO.getFlowconclusion() == 1 && user.getUserName().equals("053")) {
+            serviceFund.setOfficedirector(user.getNickName());
+            serviceFund.setUploadStates(1);
+            //鏁版嵁鍙戦��
+            Boolean aBoolean1 = null;
+            if (newSwitch == 1) {
+                //鎼炰竴涓紑鍏筹紝鍒奖鍝嶈�佹祦绋�
+                aBoolean1 = sendData(serviceFund);
+                if (!aBoolean1) {
+                    map.put("500", "鍙戦�佸け璐�");
+                    return map;
+                }
+            }
+        }
+        System.out.println("serviceFund鐨勫�兼槸--------:" + serviceFund);
+        log.info("寮�濮嬫洿鏂扮殑鐨勫�兼槸--------");
+
+        Boolean aBoolean1 = updateById(serviceFund);
+        log.info("integer鏇存柊鐨勭殑鍊兼槸-------- :{}", aBoolean1);
+        ServiceSystemmessage serviceSystemmessage = new ServiceSystemmessage();
+        serviceSystemmessage.setFundtype(2);
+        serviceSystemmessage.setApplytype(serviceFund.getApplytype());
+        serviceSystemmessage.setSenduserno(user.getUserName());
+        serviceSystemmessage.setSendusername(user.getNickName());
+        serviceSystemmessage.setReceiveuserno(serviceFund.getUserno());
+        serviceSystemmessage.setReceiveusername(serviceFund.getUsername());
+        serviceSystemmessage.setUpdateTime(new Date());
+        serviceSystemmessage.setUpdateBy(user.getNickName());
+        serviceSystemmessage.setIsread(0);
+        serviceSystemmessage.setMessagetype(1);
+        serviceSystemmessage.setRelevantno(serviceFund.getId());
+
+        if (CheckFlag == 1) {
+            //閫氳繃
+            if (serviceFund.getApplytype().equals("1")) {
+                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "绾у鏍搁�氳繃");
+                serviceSystemmessage.setMessagecontent("鎮�" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "鎻愪氦鐨勪笓瀹跺姵鍔¤垂鎹愮尞妗堜緥銆�" + serviceFund.getDonorname() + "銆戠殑璐圭敤鐢宠宸查�氳繃");
+            } else if (serviceFund.getApplytype().equals("2")) {
+                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "绾у鏍搁�氳繃");
+                serviceSystemmessage.setMessagecontent("鎮�" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "鎻愪氦鐨勪鸡鐞嗕笓瀹跺姵鍔¤垂鎹愮尞妗堜緥銆�" + serviceFund.getDonorname() + "銆戠殑璐圭敤鐢宠宸查�氳繃");
+            } else if (serviceFund.getApplytype().equals("3")) {
+                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "绾у鏍搁�氳繃");
+                serviceSystemmessage.setMessagecontent("鎮�" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "鎻愪氦鐨勫尰瀛︽垚鏈崘鐚渚嬨��" + serviceFund.getDonorname() + "銆戠殑璐圭敤鐢宠宸查�氳繃");
+            } else if (serviceFund.getApplytype().equals("4")) {
+                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "绾у鏍搁�氳繃");
+                serviceSystemmessage.setMessagecontent("鎮�" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "鎻愪氦鐨勫姙鍏垂鐢ㄧ敵璇峰凡閫氳繃");
+            } else if (serviceFund.getApplytype().equals("5")) {
+                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "绾у鏍搁�氳繃");
+                serviceSystemmessage.setMessagecontent("鎮�" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "鎻愪氦鐨勭哗鏁堢敵璇峰凡閫氳繃");
+            }
+        } else {
+            //椹冲洖
+            if (serviceFund.getApplytype().equals("1")) {
+                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "绾у鏍搁┏鍥�");
+                serviceSystemmessage.setMessagecontent("鎮�" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "鎻愪氦鐨勪笓瀹跺姵鍔¤垂鎹愮尞妗堜緥銆�" + serviceFund.getDonorname() + "銆戠殑璐圭敤鐢宠宸茶椹冲洖锛屽師鍥�: " + checkFundVO.getFlowcontent() + "");
+            } else if (serviceFund.getApplytype().equals("2")) {
+                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "绾у鏍搁┏鍥�");
+                serviceSystemmessage.setMessagecontent("鎮�" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "鎻愪氦鐨勪鸡鐞嗕笓瀹跺姵鍔¤垂鎹愮尞妗堜緥銆�" + serviceFund.getDonorname() + "銆戠殑璐圭敤鐢宠宸茶椹冲洖锛屽師鍥�: " + checkFundVO.getFlowcontent() + "");
+            } else if (serviceFund.getApplytype().equals("3")) {
+                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "绾у鏍搁┏鍥�");
+                serviceSystemmessage.setMessagecontent("鎮�" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "鎻愪氦鐨勫尰瀛︽垚鏈崘鐚渚嬨��" + serviceFund.getDonorname() + "銆戠殑璐圭敤鐢宠宸茶椹冲洖锛屽師鍥�: " + checkFundVO.getFlowcontent() + "");
+            } else if (serviceFund.getApplytype().equals("4")) {
+                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "绾у鏍搁┏鍥�");
+                serviceSystemmessage.setMessagecontent("鎮�" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "鎻愪氦鐨勫姙鍏垂鐢ㄧ敵璇峰凡椹冲洖锛屽師鍥�: " + checkFundVO.getFlowcontent() + "");
+            } else if (serviceFund.getApplytype().equals("5")) {
+                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "绾у鏍搁┏鍥�");
+                serviceSystemmessage.setMessagecontent("鎮�" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceFund.getCreateTime()) + "鎻愪氦鐨勭哗鏁堢敵璇峰凡椹冲洖锛屽師鍥�: " + checkFundVO.getFlowcontent() + "");
+            }
+        }
+        iServiceSystemmessageService.save(serviceSystemmessage);
+        map.put("200", "success");
+        return map;
+
+
+    }
+
+    public Boolean sendData(ServiceFund serviceFund) {
+        // fund鍜宖unddetail鐨勬暟鎹幏鍙�
+        addFundSharedInfo(serviceFund.getId());
+        List<ServiceFundShared> fundShareInfos = serviceFundSharedMapper.getFundShareInfoById(serviceFund.getId());
+        if (CollectionUtils.isEmpty(fundShareInfos)) return false;
+
+        log.info("fundShareInfos鐨勬暟鎹噺涓猴細{}", fundShareInfos.size());
+        ServiceFunddetailShared serviceFunddetailShared = new ServiceFunddetailShared();
+        serviceFunddetailShared.setFundid(fundShareInfos.get(0).getId());
+        List<ServiceFunddetailShared> serviceFunddetailShareds = detailSharedService.queryList(serviceFunddetailShared);
+
+        // 鏁版嵁鐨勫皝瑁�
+        Map<String, Object> map = new HashMap<>();
+        Map<String, Object> data = new HashMap<>();
+        //搴旂敤绫诲瀷 鍥哄畾鍊�
+        map.put("appName", "collaboration");
+
+        // 涓昏〃瀛楁鏁版嵁
+        Map<String, Object> data2 = new HashMap<>();
+        data2.put("formmain_0831", getformmain_0831(fundShareInfos.get(0)));
+        // 鏄庣粏琛ㄥ瓧娈垫暟鎹紝涓庨檮浠剁殑澶勭悊
+        Map<String, List<Map<String, Object>>> map1 = formson_0832(serviceFunddetailShareds);
+        data2.put("formson_0832", map1.get("formson_0832"));
+        data2.put("thirdAttachments", map1.get("annexfilesList"));
+
+        data.put("data", data2);
+        //妯℃澘缂栧彿锛岀敱鑷磋繙鏂规彁渚涳紝璇ュ弬鏁板喅瀹氬彂璧峰崗鍚岀郴缁熶腑鍝釜娴佺▼
+        data.put("templateCode", "001");
+        //鏄惁涓哄緟鍙戯細0:鏂板缓-鍙戦�侊紱1:鏂板缓-淇濆瓨寰呭彂
+        data.put("draft", "0");
+        //鍗忓悓鏍囬鍖洪檮浠讹紝Long鍨婰ist锛屽�间负闄勪欢鐨処d銆侷d鏄檮浠舵帴鍙e搷搴旂粨鏋滀腑fileUrl瀛楁鐨勫��
+        data.put("attachments", null);
+        //鍗忓悓鍏枃鐨刬d
+        data.put("relateDoc", "col|123,456;doc|321,654");
+        //鏈缃彇妯℃澘璁剧疆鐨勬爣棰�
+        data.put("subject", "null");
+
+        map.put("data", data);
+        String strRes = null;
+        if (!active.equals("druid")) {
+            //濡傛灉鏄湰鍦扮幆澧冿紝灏变笉璋冭繖涓簡
+            if (serviceFund.getBackflowlevel() == 100L) {
+                //鍐嶆鍙戣捣
+                strRes = HttpClientKit.postOpr(rexyurl, map.toString());
+            } else {
+                //棣栨鍙戣捣
+                strRes = HttpClientKit.postOpr(xyurl, map.toString());
+
+            }
+        }
+        com.alibaba.fastjson2.JSONObject jsonObject = com.alibaba.fastjson2.JSONObject.parseObject(strRes);
+        String code = jsonObject.getJSONObject("code").toString();
+        if (!code.equals("0")) {
+            return false;
+        }
+
+        return true;
+    }
+
+    private Map<String, List<Map<String, Object>>> formson_0832(List<ServiceFunddetailShared> serviceFunddetailSharedList) {
+        Map<String, List<Map<String, Object>>> allMap = new HashMap<>();
+
+        List<Map<String, Object>> list = new ArrayList<>();
+        List<Map<String, Object>> annexfilesList = new ArrayList<>();
+        for (ServiceFunddetailShared serviceFunddetailShared : serviceFunddetailSharedList) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("搴忓彿1", serviceFunddetailShared.getOrderno());
+            map.put("璐圭敤椤圭洰", serviceFunddetailShared.getItemname());
+            map.put("绋庡墠閲戦", serviceFunddetailShared.getAmount());
+            map.put("寮�鎴烽摱琛�", serviceFunddetailShared.getDepositbank());
+            map.put("鍗″彿", serviceFunddetailShared.getBankcardno());
+            map.put("鏀剁泭浜哄灞炴垨涓撳", serviceFunddetailShared.getBeneficiaryname());
+            map.put("绋庡悗閲戦", serviceFunddetailShared.getTaxamount());
+            map.put("浣滃簾鏈�缁堥噾棰�", null);
+            String fpuuid = IdUtils.simpleUUID();
+            map.put("鍙戠エ闄勪欢", fpuuid);
+            map.put("鍙戠エ璇嗗埆", null);
+            map.put("璇嗗埆浜�", null);
+            map.put("绋庨", null);
+            String qtuuid = IdUtils.simpleUUID();
+            map.put("鍏朵粬闄勪欢", qtuuid);
+            map.put("椤圭洰缂栫爜", serviceFunddetailShared.getItemcode());
+            map.put("棰勭畻椤圭洰", null);
+            map.put("璐锋柟绉戠洰", null);
+            map.put("鍊熸柟鎽樿", null);
+            map.put("璐锋柟鎽樿", null);
+            map.put("璇嗗埆澶囨敞", null);
+            map.put("璐圭敤璇存槑", null);
+            list.add(map);
+
+            //闄勪欢澶勭悊
+            String annexfiles = serviceFunddetailShared.getAnnexfiles();
+            String invoicefiles = serviceFunddetailShared.getInvoicefiles();
+
+            int i = 0;
+            if (StringUtils.isNotEmpty(annexfiles)) {
+                List<RbDetailFile> parseArray = JSON.parseArray(annexfiles, RbDetailFile.class);
+                for (RbDetailFile rbDetailFile : parseArray) {
+                    Map<String, Object> thirdAttachments = new HashMap<>();
+                    thirdAttachments.put("subReference", qtuuid);
+                    thirdAttachments.put("fileUrl", rbDetailFile.getFileid());
+                    thirdAttachments.put("sort", i++);
+                    annexfilesList.add(thirdAttachments);
+                }
+            }
+
+            if (StringUtils.isNotEmpty(invoicefiles)) {
+                List<RbDetailFile> parseArray = JSON.parseArray(invoicefiles, RbDetailFile.class);
+                for (RbDetailFile rbDetailFile : parseArray) {
+                    Map<String, Object> thirdAttachments = new HashMap<>();
+                    thirdAttachments.put("subReference", fpuuid);
+                    thirdAttachments.put("fileUrl", rbDetailFile.getFileid());
+                    thirdAttachments.put("sort", i++);
+                    annexfilesList.add(thirdAttachments);
+                }
+            }
+
+        }
+        allMap.put("formson_0832", list);
+        allMap.put("annexfilesList", annexfilesList);
+        return allMap;
+    }
+
+
+    private Map<String, Object> getformmain_0831(ServiceFundShared serviceFundShared) {
+        Map<String, Object> formmain_0831 = new HashMap<>();
+        formmain_0831.put("鎹愮尞鑰呭鍚�", serviceFundShared.getDonorname());
+        formmain_0831.put("鎶ラ攢浜哄憳", serviceFundShared.getUsername());
+        formmain_0831.put("涓氬姟鍖哄煙", serviceFundShared.getDeptmentname());
+        formmain_0831.put("缁忔墜浜�", serviceFundShared.getUsername());
+        formmain_0831.put("濉〃鏃堕棿", serviceFundShared.getApplyTime());
+        formmain_0831.put("鎶ラ攢閲戦鍚堣", serviceFundShared.getPretaxcost());
+        formmain_0831.put("涓婁紶闄勪欢", null);
+        formmain_0831.put("澶囨敞", null);
+        formmain_0831.put("璐㈠姟瀹℃壒", serviceFundShared.getFinancechecher());
+        formmain_0831.put("璐㈠姟閮ㄨ礋璐d汉瀹℃壒", serviceFundShared.getFinancedirector());
+        formmain_0831.put("鍔炲叕瀹や富浠诲鎵�", serviceFundShared.getOfficedirector());
+        formmain_0831.put("涓氬姟鍓櫌闀垮鎵�", serviceFundShared.getBusvicepresident());
+        formmain_0831.put("璐㈠姟鍓櫌闀垮鎵�", serviceFundShared.getFinvicepresident());
+        formmain_0831.put("涓績璐熻矗浜哄鎵�", serviceFundShared.getOpochecker());
+        formmain_0831.put("鏀粯鏂瑰紡", serviceFundShared.getZffs());
+        formmain_0831.put("缁勯暱", null);
+        formmain_0831.put("瀹℃壒浜哄憳", null);
+        formmain_0831.put("鏀粯鏃ユ湡", serviceFundShared.getRiqi());
+        formmain_0831.put("璇嗗埆浜�-浣滃簾", null);
+        formmain_0831.put("璐㈠姟瀹℃壒绛惧瓧", serviceFundShared.getFinancedirector());
+        formmain_0831.put("璐㈠姟閮ㄨ礋璐d汉绛惧瓧", serviceFundShared.getFinancedirector());
+        formmain_0831.put("琛ㄨ揪绫诲瀷", null);
+        formmain_0831.put("绋庡墠閲戦鍚堣", serviceFundShared.getPretaxcost());
+        formmain_0831.put("绋庨鍚堣", serviceFundShared.getPretaxcost() - serviceFundShared.getTaxedcost());
+        formmain_0831.put("琛ㄥ崟缂栧彿1", null);
+        formmain_0831.put("缂栫爜", null);
+        formmain_0831.put("CIF璐﹀閰嶇疆1", null);
+        formmain_0831.put(" 闄㈠尯", null);
+        formmain_0831.put("鏄惁鏀粯", serviceFundShared.getIsdistribute());
+        formmain_0831.put("鍑瘉鍙�", null);
+        formmain_0831.put("閾惰鍥炲崟", null);
+        formmain_0831.put("OFD", null);
+        formmain_0831.put("琛ㄥ崟闄勪欢", null);
+        formmain_0831.put("鐜伴噾娴侀噺鍒嗘瀽", null);
+        formmain_0831.put("鍑瘉绫诲埆", null);
+        formmain_0831.put("绋庡悗閲戦鍚堣", serviceFundShared.getTaxedcost());
+        formmain_0831.put("鍘嗗彶瀹℃壒璁板綍", null);
+        formmain_0831.put("琛ㄥ崟缂栧彿", serviceFundShared.getBh());
+        formmain_0831.put("鍘嗗彶瀹℃壒鍗曟煡璇�", null);
+        return formmain_0831;
+    }
 
     @Override
     public Long getFundId(Long infoid) {
@@ -135,8 +726,18 @@
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Boolean addFundSharedInfo(Long id) {
+        log.info("fund琛ㄧ殑id锛歿}", id);
+        //鍒ゆ柇涓�涓嬶紝share琛ㄦ槸鍚﹀凡缁忓瓨鍦ㄤ簡
+        Map<String, Object> map = new HashMap<>();
+        map.put("serfunid", id);
+        map.put("del_flag", 0);
+        List<ServiceFundShared> serviceFundSharedList = serviceFundSharedMapper.selectByMap(map);
+        if (!CollectionUtils.isEmpty(serviceFundSharedList)) {
+            return true;
+        }
+
         ServiceFund serviceFund = serviceFundMapper.selectById(id);
         ServiceFundShared serviceFundShared = DtoConversionUtils.sourceToTarget(serviceFund, ServiceFundShared.class);
         serviceFundShared.setSerfunid(serviceFundShared.getId());
@@ -156,7 +757,17 @@
             serviceFunddetailShareds.get(i).setFundid(serviceFundShared.getId());
             serviceFunddetailShareds.get(i).setId(null);
             //鏁版嵁鍙戦�佺粰璐㈠姟
-            uploadOAFileAndUpdateDb(serviceFunddetailShareds.get(i));
+            try {
+                if (!active.equals("druid")) uploadOAFileAndUpdateDb(serviceFunddetailShareds.get(i));
+            } catch (Exception e) {
+                e.printStackTrace();
+                log.error("Exception涓叆鍙傜殑ID涓猴細{},寮傚父淇℃伅涓� 锛� {}", id, e.getMessage());
+                if (id != null) {
+                    Boolean aBoolean = sharedService.delfundsharedInfoById(null, id);
+                    log.error("fund2鍒嗕韩琛ㄩ噷鐨勬暟鎹槸鍚﹀垹闄ゆ垚鍔燂細{}", aBoolean);
+                }
+                return false;
+            }
         }
         boolean result = false;
         for (ServiceFunddetailShared serviceFunddetailShared : serviceFunddetailShareds) {
@@ -659,14 +1270,19 @@
     }
 
     @Override
-    public List<SpFinancialExpensesFundOut> getListBypower(String PAUSERNO, Integer PAFUNDTYPE, String PAAPPLICANT, String PAAPPLICATIONBEGTIME, String PAAPPLICATIONENDTIME, String PADEPARTMENT, Integer CHECKFLAG, Integer APPLYTYPE, Integer CHECKSTATUS) {
-        return serviceFundMapper.getListBypower(PAUSERNO, PAFUNDTYPE, PAAPPLICANT, PAAPPLICATIONBEGTIME, PAAPPLICATIONENDTIME, PADEPARTMENT, CHECKFLAG, APPLYTYPE, CHECKSTATUS);
+    public List<SpFinancialExpensesFundOut> getListBypower(String PAUSERNO, Integer PAFUNDTYPE, String PAAPPLICANT, String PAAPPLICATIONBEGTIME, String PAAPPLICATIONENDTIME, String PADEPARTMENT, Integer CHECKFLAG, Integer APPLYTYPE, Integer CHECKSTATUS, String donorname) {
+        return serviceFundMapper.getListBypower(PAUSERNO, PAFUNDTYPE, PAAPPLICANT, PAAPPLICATIONBEGTIME, PAAPPLICATIONENDTIME, PADEPARTMENT, CHECKFLAG, APPLYTYPE, CHECKSTATUS, donorname);
+    }
+
+    @Override
+    public List<SpFinancialExpensesFundOut> getExpertfeeList(SpSelectExpertfee spSelectExpertfee) {
+        log.info("spSelectExpertfee鐨勫叆鍙備负锛歿}", spSelectExpertfee);
+        return serviceFundMapper.getExpertfeeList(spSelectExpertfee.getPaApplyType(), spSelectExpertfee.getPfundtaxid(), spSelectExpertfee.getDonorname(), spSelectExpertfee.getPadepartid(), spSelectExpertfee.getPausername());
     }
 
     @Override
     public int countItem(Long infoid, Long itemid) {
         List<ServiceFund> serviceFunds = serviceFundMapper.getInfoByInfoId(infoid);
-
         int count = 0;
         for (ServiceFund s : serviceFunds) {
             long fundid = s.getId();
@@ -678,36 +1294,54 @@
     }
 
     @Override
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public Long addOrUpdateNew(ServiceFundVO serviceFundVO) {
         Long id = null;
         //灏嗘暟鎹繚瀛樺埌fund琛�
+        serviceFundVO.setUploadStates(0);
         id = saveFund(serviceFundVO);
 
         List<ServiceFunddetailVO> serviceFunddetails = serviceFundVO.getServiceFunddetails();
-        if (CollectionUtils.isEmpty(serviceFunddetails)) {
-            System.out.println("serviceFunddetails涓虹┖鍠�");
-            return null;
-        }
-        // 淇濆瓨璇︽儏鏁版嵁
-        for (ServiceFunddetailVO serviceFunddetailVO : serviceFunddetails) {
-            serviceFunddetailVO.setFundid(id);
-            //灏囬檮浠惰浆鎴恓son
-            if (!CollectionUtils.isEmpty(serviceFunddetailVO.getAnnexfilesList())) {
-                serviceFunddetailVO.setAnnexfiles(JSON.toJSONString(serviceFunddetailVO.getAnnexfilesList()));
-            }
-            if (!CollectionUtils.isEmpty(serviceFunddetailVO.getInvoicefilesList())) {
-                serviceFunddetailVO.setInvoicefiles(JSON.toJSONString(serviceFunddetailVO.getInvoicefilesList()));
-            }
-            ServiceFunddetail serviceFunddetail = DtoConversionUtils.sourceToTarget(serviceFunddetailVO, ServiceFunddetail.class);
 
-            if (serviceFunddetailVO.getId() == null) {
-                serviceFunddetailService.save(serviceFunddetail);
-            } else {
-                serviceFunddetailService.updateById(serviceFunddetail);
+        BigDecimal bigDecimal = new BigDecimal(0.0);
+        if (!CollectionUtils.isEmpty(serviceFunddetails)) {
+
+            // 淇濆瓨璇︽儏鏁版嵁
+            for (ServiceFunddetailVO serviceFunddetailVO : serviceFunddetails) {
+                //鍘绘帀韬唤璇佺殑棣栧熬绌烘牸
+                if (StringUtils.isNotEmpty(serviceFunddetailVO.getIdcardno())) {
+                    serviceFunddetailVO.setIdcardno(serviceFunddetailVO.getIdcardno().trim());
+                }
+                log.info("韬唤璇佸彿涓猴細{}", serviceFunddetailVO.getIdcardno());
+                if (StringUtils.isEmpty(serviceFunddetailVO.getBankcardno())) {
+                    throw new BaseException("璇锋鏌ラ摱琛屽崱鍙锋槸鍚︿负绌�,濮撳悕锛�" + serviceFunddetailVO.getBeneficiaryname());
+                }
+                serviceFunddetailVO.setFundid(id);
+                //灏囬檮浠惰浆鎴恓son
+                if (!CollectionUtils.isEmpty(serviceFunddetailVO.getAnnexfilesList())) {
+                    serviceFunddetailVO.setAnnexfiles(JSON.toJSONString(serviceFunddetailVO.getAnnexfilesList()));
+                } else {
+                    serviceFunddetailVO.setAnnexfiles(null);
+                }
+                if (!CollectionUtils.isEmpty(serviceFunddetailVO.getInvoicefilesList())) {
+                    serviceFunddetailVO.setInvoicefiles(JSON.toJSONString(serviceFunddetailVO.getInvoicefilesList()));
+                } else {
+                    serviceFunddetailVO.setInvoicefiles(null);
+                }
+                ServiceFunddetail serviceFunddetail = DtoConversionUtils.sourceToTarget(serviceFunddetailVO, ServiceFunddetail.class);
+
+                if (serviceFunddetailVO.getId() == null) {
+                    serviceFunddetailService.save(serviceFunddetail);
+                } else {
+                    serviceFunddetailService.updateById(serviceFunddetail);
+                }
+
+                bigDecimal = bigDecimal.add(BigDecimal.valueOf(serviceFunddetailVO.getAmount()));
+
             }
         }
-
+        serviceFundVO.setPretaxcost(bigDecimal.doubleValue());
+        serviceFundMapper.updateById(serviceFundVO);
         return id;
     }
 
@@ -747,11 +1381,156 @@
         return map;
     }
 
-    int uploadOAFileAndUpdateDb(ServiceFunddetailShared remShare) {
+    @Override
+    public Map<String, List<ServiceFunddetailExcel>> totaltax(TotalTaxVO totalTaxVO) {
+        if (CollectionUtils.isEmpty(totalTaxVO.getFundids())) {
+            throw new BaseException("璇峰嬀閫変箣鍚庯紝鍐嶈繘琛屽悎璁′釜绋�");
+        }
+        Map<String, List<ServiceFunddetailExcel>> map = new HashMap<>();
+
+        if (totalTaxVO.getIsTaxAfter() == null) {
+            //濡備綍涓虹┖锛岄粯璁ゅ綋娌℃湁绠楄繃绋庯紝杩涜鍚堣
+            totalTaxVO.setIsTaxAfter(0);
+        }
+        List<ServiceFunddetail> serviceFunddetails = serviceFunddetailMapper.totlaTax(totalTaxVO.getFundids());
+        if (CollectionUtils.isEmpty(serviceFunddetails)) {
+            throw new BaseException("鏌ヨ鐨勮鎯呮暟鎹负绌�");
+        }
+
+        //鐢ㄤ簬杩斿洖excel
+        List<ServiceFunddetailExcel> serviceFunddetailList = new ArrayList<>();
+
+        if (totalTaxVO.getIsTaxAfter() == 1) {
+            //閫氳繃鍙楃泭浜哄悕绉帮紝灏嗙◣鍓嶃�佺◣鍚庣殑鍊肩浉鍔�
+            Map<String, Double> sumAmount = serviceFunddetails.stream().collect(Collectors.groupingBy(ServiceFunddetail::getBeneficiaryname, Collectors.summingDouble(ServiceFunddetail::getAmount)));
+            Map<String, Double> sumTaxdAmount = serviceFunddetails.stream().collect(Collectors.groupingBy(ServiceFunddetail::getBeneficiaryname, Collectors.summingDouble(ServiceFunddetail::getTaxedamount)));
+
+            for (String key : sumAmount.keySet()) {
+                ServiceFunddetailExcel serviceFunddetailExcel = new ServiceFunddetailExcel();
+                serviceFunddetailExcel.setAmount(sumAmount.getOrDefault(key, 0.0));
+                serviceFunddetailExcel.setTaxedamount(sumTaxdAmount.getOrDefault(key, 0.0));
+                for (ServiceFunddetail serviceFunddetail2 : serviceFunddetails) {
+                    if (serviceFunddetail2.getBeneficiaryname().equals(key)) {
+                        serviceFunddetailExcel.setIdcardno(serviceFunddetail2.getIdcardno());
+                        serviceFunddetailExcel.setBankcardno(serviceFunddetail2.getBankcardno());
+                        serviceFunddetailExcel.setBeneficiaryname(serviceFunddetail2.getBeneficiaryname());
+                        serviceFunddetailExcel.setDepositbank(serviceFunddetail2.getDepositbank());
+                        serviceFunddetailExcel.setBranchbankname(serviceFunddetail2.getBranchbankname());
+                        serviceFunddetailExcel.setDonorname(serviceFunddetail2.getDonorname());
+                        serviceFunddetailExcel.setPhone(serviceFunddetail2.getPhone());
+                        break;
+                    }
+                }
+                serviceFunddetailList.add(serviceFunddetailExcel);
+            }
+            //杩斿洖绠楄繃绋庝箣鍚庣殑锛屽悎璁�
+            map.put("鍚堣涓◣锛堢◣鍚庯級", serviceFunddetailList);
+            return map;
+
+        } else {
+            a:
+            for (ServiceFunddetail serviceFunddetail : serviceFunddetails) {
+                ServiceFunddetailExcel sfeBefore = new ServiceFunddetailExcel();
+                ServiceFunddetailExcel sfeAfter = new ServiceFunddetailExcel();
+
+                for (ServiceFunddetailExcel serviceFunddetailExcel : serviceFunddetailList) {
+                    //鍒ゆ柇涓�涓嬶紝璇ュ彈鐩婁汉鏄惁宸茬粡璁$畻杩囷紝宸茬粡璁$畻杩囦簡锛屽氨涓嶇畻浜�
+                    if (serviceFunddetail.getBeneficiaryname().trim().equals(serviceFunddetailExcel.getBeneficiaryname().trim())) {
+                        continue a;
+                    }
+                }
+
+
+                for (ServiceFunddetail serviceFunddetail2 : serviceFunddetails) {
+                    if (StringUtils.isEmpty(serviceFunddetail2.getServicesscopename())) {
+                        ServiceFund serviceFund = null;
+                        if (serviceFunddetail2.getFundid() == null) {
+                            serviceFund = serviceFundMapper.selectById(serviceFunddetail2.getFundid());
+                        }
+                        throw new BaseException("鏈嶅姟璇存槑涓虹┖,璇锋鏌ュ悗鍐嶈绠�,鎹愮尞鑰呬负 :" + serviceFund.getDonorname());
+                    }
+                    if (serviceFunddetail.getBeneficiaryname().equals(serviceFunddetail2.getBeneficiaryname()) && !(serviceFunddetail2.getServicesscopename().equals("绋庡悗"))) {
+                        //绱绋庡墠
+                        sfeBefore.setIdcardno(serviceFunddetail2.getIdcardno());
+                        sfeBefore.setBankcardno(serviceFunddetail2.getBankcardno());
+                        sfeBefore.setBeneficiaryname(serviceFunddetail2.getBeneficiaryname());
+                        sfeBefore.setDepositbank(serviceFunddetail2.getDepositbank());
+                        sfeBefore.setBranchbankname(serviceFunddetail2.getBranchbankname());
+                        sfeBefore.setDonorname(serviceFunddetail2.getDonorname());
+                        sfeBefore.setPhone(serviceFunddetail2.getPhone());
+                        if (sfeBefore.getAmount() == null) {
+                            sfeBefore.setAmount(serviceFunddetail2.getAmount());
+                        } else {
+                            sfeBefore.setAmount(sfeBefore.getAmount() + serviceFunddetail2.getAmount());
+                        }
+                        sfeBefore.setTaxedamount(null);
+
+                    } else if (serviceFunddetail.getBeneficiaryname().equals(serviceFunddetail2.getBeneficiaryname()) && serviceFunddetail2.getServicesscopename().equals("绋庡悗")) {
+                        //绱绋庡悗
+                        sfeAfter.setIdcardno(serviceFunddetail2.getIdcardno());
+                        sfeAfter.setBankcardno(serviceFunddetail2.getBankcardno());
+                        sfeAfter.setBeneficiaryname(serviceFunddetail2.getBeneficiaryname());
+                        sfeAfter.setDepositbank(serviceFunddetail2.getDepositbank());
+                        sfeAfter.setBranchbankname(serviceFunddetail2.getBranchbankname());
+                        sfeAfter.setDonorname(serviceFunddetail2.getDonorname());
+                        sfeAfter.setPhone(serviceFunddetail2.getPhone());
+                        sfeAfter.setAmount(null);
+                        if (sfeAfter.getTaxedamount() == null) {
+                            sfeAfter.setTaxedamount(serviceFunddetail2.getTaxedamount());
+                        } else {
+                            sfeAfter.setTaxedamount(sfeAfter.getTaxedamount() + serviceFunddetail2.getTaxedamount());
+                        }
+                    }
+
+                }
+                //灏嗚绠楀ソ鐨勭◣鍓嶆�诲�笺�佺◣鍚庢�诲�硷紝鏀惧埌List涓�
+                if (ObjectUtils.isNotEmpty(sfeBefore.getBeneficiaryname())) serviceFunddetailList.add(sfeBefore);
+
+                if (ObjectUtils.isNotEmpty(sfeAfter.getBeneficiaryname())) serviceFunddetailList.add(sfeAfter);
+
+            }
+            //杩斿洖绠楃◣涔嬪墠鐨勶紝鍚堣
+            map.put("鍚堣涓◣锛堢◣鍓嶏級", serviceFunddetailList);
+            return map;
+        }
+    }
+
+    @Override
+    public Map<String, Object> exportFeeSum(Integer faxId) {
+        List<VExpertfeeTotal> list = vExpertfeeTotalMapper.selectVExpertfeeTotalListByTaxId(faxId);
+        ExcelUtil<VExpertfeeTotal> util = new ExcelUtil<VExpertfeeTotal>(VExpertfeeTotal.class);
+        AjaxResult ajaxResult = util.exportExcel(list, "vExpertfeeTotal");
+        String filePath = RuoYiConfig.getDownloadPath() + ajaxResult.get("msg");
+
+        List<VExpertfeeDonor> list2 = vExpertfeeDonorMapper.selectVExpertfeeDonorList2(faxId);
+        ExcelUtil<VExpertfeeDonor> util2 = new ExcelUtil<VExpertfeeDonor>(VExpertfeeDonor.class);
+        AjaxResult ajaxResult2 = util2.exportExcel(list2, "VExpertfeeDonor");
+
+        List<VExpertfeeExpert> list3 = vExpertfeeExpertMapper.selectVExpertfeeExpertListByFaxId(faxId);
+        ExcelUtil<VExpertfeeExpert> util3 = new ExcelUtil<VExpertfeeExpert>(VExpertfeeExpert.class);
+        AjaxResult ajaxResult3 = util3.exportExcel(list3, "vExpertfeeExpert");
+
+        List<String> list1 = new ArrayList<>();
+        list1.add(ajaxResult.get("msg").toString());
+        list1.add(ajaxResult2.get("msg").toString());
+        list1.add(ajaxResult3.get("msg").toString());
+
+
+        String name = "涓撳璐规眹鎬诲崟" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xlsx";
+        mergeExcel(list1, RuoYiConfig.getDownloadPath() + name);
+        for (String path : list1) {
+            new File(RuoYiConfig.getDownloadPath() + path).delete();
+        }
+        Map<String, Object> map = new HashMap<>();
+        map.put("downloadUrl", "/profile/download/" + name);
+        map.put("downloadName", name);
+        return map;
+    }
+
+
+    int uploadOAFileAndUpdateDb(ServiceFunddetailShared remShare) throws Exception {
         //涓婁紶OA鏂囦欢
-        //String strUrl = "http://129.88.242.39:8899/seeyon/rest/token?userName=opo&password=127814f8-84e8-4304-84a5-a71573567efd&loginName=demo3";
         String strUrl = "http://129.88.242.39:8899/seeyon/rest/token";
-        //String strUrl = "http://slb.hospitalstar.com:8899/seeyon/rest/token";
         //涓婁紶鏂囦欢鎴愬姛鍚庯紝鍘绘洿鏂扮浉鍏崇殑鏁版嵁搴�
         Map<String, Object> map = new HashMap<String, Object>();
         map.put("userName", "opo");
@@ -787,7 +1566,7 @@
     }
 
 
-    private Integer uploadFile(String filePath, String strFUrl, List<RbDetailFile> parseArray2, List<RbDetailFile> parseArray, ServiceFunddetailShared remShare, String flag) {
+    private Integer uploadFile(String filePath, String strFUrl, List<RbDetailFile> parseArray2, List<RbDetailFile> parseArray, ServiceFunddetailShared remShare, String flag) throws Exception {
         if (!CollectionUtils.isEmpty(parseArray)) {
             for (int i = 0; i < parseArray.size(); i++) {
                 RbDetailFile rbDetailFile = parseArray.get(i);
@@ -799,24 +1578,24 @@
                 System.out.println("fund鏈嶅姟鐨刦ilePath + substring: " + filePath + substring);
                 File filetest = new File(filePath + substring);
 
-                try {
-                    String struploadResult = HttpClientKit.sendPostWithFile(filetest, strFUrl);
-                    log.info("绗笁鏂逛紶鍥炵殑鏁版嵁: {}", struploadResult);
-                    if (StringUtils.isEmpty(struploadResult)) {
-                        log.error("HttpClientKit.sendPostWithFile 璇锋眰涓虹┖浜� filetest:{},  strFUrl:{} ", filetest, strFUrl);
-                        return 0;
-                    }
-                    //鑾峰彇fileid
-                    JSONObject jsonR = JSONObject.parseObject(struploadResult);
-                    JSONArray jsonArr = jsonR.getJSONArray("atts");
-                    log.info("绗笁鏂逛紶鍥炵殑鏁版嵁鑾峰彇鐨刟tts : {}", jsonArr);
-                    for (int j = 0; j < jsonArr.size(); j++) {
-                        JSONObject jsonRet = jsonArr.getJSONObject(j);
-                        rbDetailFile.setFileid(jsonRet.get("fileUrl").toString());
-                    }
-                } catch (Exception e) {
-                    e.printStackTrace();
+                String struploadResult = HttpClientKit.sendPostWithFile(filetest, strFUrl);
+                log.info("绗笁鏂逛紶鍥炵殑鏁版嵁: {}", struploadResult);
+                if (StringUtils.isEmpty(struploadResult)) {
+                    log.error("HttpClientKit.sendPostWithFile 璇锋眰涓虹┖浜� filetest:{},  strFUrl:{} ", filetest, strFUrl);
+                    return 0;
                 }
+                //鑾峰彇fileid
+                JSONObject jsonR = JSONObject.parseObject(struploadResult);
+                JSONArray jsonArr = jsonR.getJSONArray("atts");
+                log.info("绗笁鏂逛紶鍥炵殑鏁版嵁鑾峰彇鐨刟tts : {}", jsonArr);
+                for (int j = 0; j < jsonArr.size(); j++) {
+                    JSONObject jsonRet = jsonArr.getJSONObject(j);
+                    if (StringUtils.isEmpty(jsonRet.get("fileUrl").toString())) {
+                        throw new BaseException("fileID涓虹┖,璇疯仈绯荤涓夋柟澶勭悊");
+                    }
+                    rbDetailFile.setFileid(jsonRet.get("fileUrl").toString());
+                }
+
                 parseArray2.add(rbDetailFile);
             }
             if (flag.equals("1")) {
@@ -830,98 +1609,6 @@
         }
         return 0;
     }
-
-//    int uploadOAFileAndUpdateDb(ServiceFundShared remShare) {
-//        //涓婁紶OA鏂囦欢
-//        //String strUrl = "http://129.88.242.39:8899/seeyon/rest/token?userName=opo&password=127814f8-84e8-4304-84a5-a71573567efd&loginName=demo3";
-//        String strUrl = "http://129.88.242.39:8899/seeyon/rest/token";
-//        //String strUrl = "http://slb.hospitalstar.com:8899/seeyon/rest/token";
-//        //涓婁紶鏂囦欢鎴愬姛鍚庯紝鍘绘洿鏂扮浉鍏崇殑鏁版嵁搴�
-//
-//
-//        Map<String, Object> map = new HashMap<String, Object>();
-//        map.put("userName", "opo");
-//        map.put("password", "4126407a-9821-4874-be41-6568abd6dbe5");
-//        map.put("loginName", "demo3");
-//
-//        JSONObject jsonObj = new JSONObject(map);
-//
-//        System.out.println("uploadOAFileAndUpdateDb + jsonObject" + jsonObj.toString() + "\r\n" + jsonObj.toJSONString());
-//        String strRes = HttpClientKit.postOpr(strUrl, jsonObj.toString());//
-//        //String strRes = HttpClientKit.postMsg(strUrl,jsonObj);//寰楀埌杩斿洖鐨則oken?
-//
-//        JSONObject json1 = JSONObject.parseObject(strRes);
-//        strRes = json1.get("id").toString();
-//
-//        ///if(strRes.isEmpty() || "" == strRes) return -1;// 涓虹┖浠h〃澶辫触
-//
-//        //涓嬮潰闇�姹傝皟鐢ㄦ枃浠剁殑鎺ュ彛锛岃皟鐢ㄦ垚鍔熻繑鍥炲悗锛屽緱鍒癴ilename鍜宖ileid 鐢ㄨ繖浜屼釜鍊煎幓鏇存柊鏁版嵁
-//
-//        String filePath = RuoYiConfig.getUploadPath();
-//        String strMutfileUrl = remShare.getAnnexbankcard();//鍙兘瀛樺湪澶氫釜鍦板潃锛屼互,鍒嗗紑
-//
-//        String strFUrl = "http://129.88.242.39:8899/seeyon/rest/attachment?token=" + strRes;
-//        //String strFUrl = "http://slb.hospitalstar.com:8899/seeyon/rest/attachment?token="+strRes;
-//        //strFUrl = String.format(strFUrl, strRes);
-//
-//        /*File test = null;
-//        File file = new File("E:\\YYJQ\\OPO\\WEB\\Upload\\upload\\2023\\02\\17");
-//        if (file.exists() && file.isDirectory()) {
-//            // 鑾峰彇鎵�鏈夌洸鐩掓枃浠跺す
-//            File[] ones = file.listFiles();
-//            for (File one : ones) {
-//                test = one;
-//            }
-//        }*/
-//
-//        String filename = "";
-//        String fileid = "";
-//
-//        String[] urlArray = strMutfileUrl.split(",");
-//        for (int i = 0; i < urlArray.length; i++) {
-//            String strOneFileName = urlArray[i];
-//            String strTemp = strOneFileName.substring(15);
-//            String strFile = filePath + strTemp;
-//            //FileUploadUtils.getAbsoluteFile(filePath,strOneFileName);
-//            String struploadResult = "";
-//            File filetest = new File(strFile);
-//            try {
-//                struploadResult = HttpClientKit.sendPostWithFile(filetest, strFUrl);
-//            } catch (Exception e) {
-//                e.printStackTrace();
-//            }
-//
-//
-//            //String strFRes = HttpClientKit.postMsg(strFUrl,jsonFObj);
-//            if (struploadResult == null) return 0;
-//            if (struploadResult.isEmpty()) return 0;
-//
-//            JSONObject jsonR = JSONObject.parseObject(struploadResult);
-//
-//            JSONArray jsonArr = jsonR.getJSONArray("atts");
-//            for (int j = 0; j < jsonArr.size(); j++) {
-//                JSONObject jsonRet = jsonArr.getJSONObject(j);
-//                String name1 = jsonRet.get("filename").toString();
-//                String id1 = jsonRet.get("fileUrl").toString();
-//                filename += name1;
-//                fileid += id1;
-//                if (i != urlArray.length - 1) {
-//                    filename += ",";
-//                    fileid += ",";
-//                }
-//            }
-//
-//        }
-//
-//        long nId = remShare.getId();
-//        remShare.setId(nId);
-//        remShare.setFilename(filename);
-//        remShare.setFileid(fileid);
-//        boolean bRet = sharedService.updateById(remShare);
-//        if (!bRet) return -1;
-//
-//        return 0;
-//    }
 
     public long saveFund(ServiceFundVO serviceFundVO) {
         Long id = null;
@@ -937,4 +1624,86 @@
         return id;
     }
 
+    public void mergeExcel(List<String> files, String outputFile) {
+        try {
+            Workbook resultWorkbook = new XSSFWorkbook();
+            for (String file : files) {
+                InputStream is1 = new FileInputStream(RuoYiConfig.getDownloadPath() + file);
+                Workbook workbook1 = new XSSFWorkbook(is1);
+                Sheet sheet1 = workbook1.getSheetAt(0);
+                // 澶嶅埗绗竴涓枃浠剁殑Sheet
+                Sheet newSheet1 = resultWorkbook.createSheet(file.substring(0, file.indexOf(".")));
+                for (Row row : sheet1) {
+                    Row newRow = newSheet1.createRow(row.getRowNum());
+                    int columns = row.getLastCellNum();
+                    for (int i = 0; i < columns; i++) {
+                        newSheet1.setColumnWidth(i, 5000);
+                        Cell cell = row.getCell(i);
+                        Cell newCell = newRow.createCell(cell.getColumnIndex());
+                        newCell.setCellValue(cell.getStringCellValue());
+                        // 鍒涘缓鍗曞厓鏍兼牱寮�
+                        CellStyle style = resultWorkbook.createCellStyle();
+                        style.setAlignment(HorizontalAlignment.CENTER); // 姘村钩灞呬腑
+                        style.setVerticalAlignment(VerticalAlignment.CENTER); // 鍨傜洿灞呬腑
+                        if (row.getRowNum() == 0) {
+                            // 璁剧疆绗竴琛岃儗鏅壊
+                            style.setFillForegroundColor(IndexedColors.GREY_50_PERCENT.getIndex());
+                            style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+                        }
+
+                        newCell.setCellStyle(style);
+                    }
+                }
+            }
+            FileOutputStream out = new FileOutputStream(outputFile);
+            resultWorkbook.write(out);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean updateFundTaxIdById(Long id, Long fundTaxId) {
+        //灏唂und閲岀殑绠楃◣鏃堕棿锛屼笌璇︽儏閲岀殑鐗堢◣鏃堕棿鍏ㄦ竻绌�
+        Boolean aBoolean = serviceFundMapper.updateFundTaxIdById(id, fundTaxId);
+        ServiceFunddetail serviceFunddetail = new ServiceFunddetail();
+        serviceFunddetail.setFundid(id);
+        serviceFunddetail.setTaxTime(null);
+        serviceFunddetail.setXh(null);
+        boolean b = serviceFunddetailMapper.updateTaxTime(serviceFunddetail);
+        return b;
+    }
+
+
+    public void sendMeg(ServiceProcessVO serviceProcessVO, String phone) {
+        //璁板綍鎿嶄綔璁板綍
+        ServiceFundflow serviceFundflow = new ServiceFundflow();
+
+        serviceFundflow.setCreateBy(serviceProcessVO.getCheckusername());
+        serviceFundflow.setUpdateBy(serviceProcessVO.getCheckusername());
+        serviceFundflow.setCheckusername(serviceProcessVO.getCheckusername());
+        serviceFundflow.setCreateTime(new Date());
+        serviceFundflow.setUpdateTime(new Date());
+        serviceFundflow.setFlowcontent(serviceProcessVO.getFlowcontent());
+        serviceFundflow.setFlowconclusion(serviceProcessVO.getFlowconclusion());
+        if (serviceProcessVO.getApplytype() == "0") serviceFundflow.setFundtype(1);
+        if (serviceProcessVO.getApplytype() == "1") serviceFundflow.setFundtype(2);
+        serviceFundflow.setFlowlevel(100);
+        serviceFundflow.setApplytype(serviceProcessVO.getApplytype());
+        serviceFundflow.setFundid(serviceProcessVO.getBackCode());
+        fundflowService.save(serviceFundflow);
+
+        ArrayList<ConcurrentHashMap<String, Object>> contentList = new ArrayList<>();
+        ConcurrentHashMap map = new ConcurrentHashMap();
+        map.put("瀹℃壒浜猴細", serviceProcessVO.getCheckusername());
+        map.put("瀹℃壒鏃堕棿锛�", serviceProcessVO.getCheckTime());
+        map.put("鎰忚锛�", serviceProcessVO.getFlowcontent());
+        contentList.add(map);
+        DingTalkReqVo dingTalkReqVo = new DingTalkReqVo();
+        dingTalkReqVo.setTitle("璐㈠姟绯荤粺淇℃伅");
+        dingTalkReqVo.setNumber(phone);
+        dingTalkReqVo.setContents(contentList);
+        log.info("閽夐拤鍙戦�佹秷鎭�:{}", dingTalkReqVo);
+        dingTalkService.sendNotification(dingTalkReqVo);
+    }
 }

--
Gitblit v1.9.3