liusheng
2023-09-09 f0f6c3b39dddf5cfdf145425687e9339453b5ba1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceReimbursementController.java
@@ -1,9 +1,5 @@
package com.ruoyi.web.controller.project;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.config.RuoYiConfig;
@@ -15,7 +11,6 @@
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.HttpClientKit;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.bean.DtoConversionUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
@@ -32,7 +27,7 @@
import freemarker.template.TemplateException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang.ObjectUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.annotations.Options;
import org.springframework.beans.factory.annotation.Autowired;
@@ -41,9 +36,9 @@
import java.io.*;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@@ -53,6 +48,7 @@
 * @author ruoyi
 * @date 2022-01-24
 */
@Slf4j
@Api("报销申请")
@RestController
@RequestMapping("/project/reimbursement")
@@ -105,6 +101,7 @@
    public TableDataInfo list(ServiceReimbursement serviceReimbursement) {
        SysUser user = SecurityUtils.getLoginUser().getUser();
        serviceReimbursement.setCreateBy(user.getUserName());
        serviceReimbursement.setUsername(user.getNickName());
        startPage();
        List<ServiceReimbursement> list = serviceReimbursementService.queryList(serviceReimbursement);
        return getDataTable(list);
@@ -159,6 +156,10 @@
        }
        //startPage();
        List<SpFinancialExpensesReimbursementOut> list = serviceReimbursementService.getListBypower(loginUser.getUsername(), 1, APPLICANT, APPLICATIONBEGTIME, APPLICATIONENDTIME, loginUser.getDeptId().toString(), CHECKFLAG, APPLYTYPE);
        if (StringUtils.isNotBlank(spFinancialExpensesIn.getUsername())) {
            list = list.stream().filter(reimbursementOut -> reimbursementOut.getUsername().contains(spFinancialExpensesIn.getUsername())).collect(Collectors.toList()); // 按name字段过滤
        }
        Collections.sort(list, new Comparator<SpFinancialExpensesReimbursementOut>() {
            @Override
            public int compare(SpFinancialExpensesReimbursementOut o1, SpFinancialExpensesReimbursementOut o2) {
@@ -453,22 +454,21 @@
    @PostMapping("/travelexpensereport")
    public AjaxResult travelexpensereport(@RequestBody CheckFundVO checkFundVO) {
        ServiceReimbursement serviceReimbursement = serviceReimbursementService.getById(checkFundVO.getFundid());
        //如果等于100,说明已经走到医院财务那边了;财务那边取数据是从分享表取,所以,这里直接往分享表里添加数据就行了
        if (serviceReimbursement.getBackflowlevel() == 100 || serviceReimbursement.getBackflowlevel() == 199) {
        //如果等于100,说明已经走到医院财务那边了;财务那边取数据是从分享表取,所以,这里直接往分享表里添加数据就行了;
        if (!Objects.isNull(serviceReimbursement) && serviceReimbursement.getBackflowlevel() != null) {
//            if (serviceReimbursement.getBackflowlevel() == 100 || serviceReimbursement.getBackflowlevel() == 199) {
            if (serviceReimbursement.getBackflowlevel() == 199) {
                //将退回阶段设置成100
                serviceReimbursement.setBackflowlevel(100L);
                serviceReimbursement.setFlowlevel(100L);
                serviceReimbursement.setRecordstatus(0);
                serviceReimbursementService.updateById(serviceReimbursement);
            //将修改的上报数据 新增一条
            ServiceReimbursementShared serviceReimbursementShared = DtoConversionUtils.sourceToTarget(serviceReimbursement, ServiceReimbursementShared.class);
            serviceReimbursementShared.setId(null);
            serviceReimbursementShared.setDelFlag(0L);
            serviceReimbursementShared.setReimid(serviceReimbursement.getId());
            serviceReimbursementSharedService.save(serviceReimbursementShared);
                //将修改的上报数据 新增一条
                serviceReimbursementService.addSharedData(checkFundVO.getFundid());
            //将退回阶段设置成100
            serviceReimbursement.setBackflowlevel(100L);
            serviceReimbursement.setFlowlevel(100L);
            serviceReimbursement.setRecordstatus(0);
            serviceReimbursementService.updateById(serviceReimbursement);
            return success();
                return success();
            }
        }
        if (serviceReimbursement != null) {
            Integer TotalLevel = 0;
@@ -477,16 +477,25 @@
            List<Integer> postids = postService.selectPostListByUserId(loginUser.getUserId());
            if (!postids.contains(2)) {
                serviceReimbursement.setFlowlevel(1L);
                serviceReimbursement.setBackflowlevel(1L);
                serviceReimbursement.setRecordstatus(2);
                if (serviceReimbursement.getBackflowlevel() != null) {
                    serviceReimbursement.setFlowlevel(serviceReimbursement.getBackflowlevel());
                } else {
                    serviceReimbursement.setBackflowlevel(1L);
                    serviceReimbursement.setFlowlevel(1L);
                }
            } else {
                serviceReimbursement.setFlowlevel(0L);
                serviceReimbursement.setRecordstatus(0);
                serviceReimbursement.setBackflowlevel(0L);
                if (serviceReimbursement.getBackflowlevel() != null) {
                    serviceReimbursement.setFlowlevel(serviceReimbursement.getBackflowlevel());
                } else {
                    serviceReimbursement.setFlowlevel(0L);
                    serviceReimbursement.setBackflowlevel(0L);
                }
            }
            if (!postids.contains(2)) {
            if (!postids.contains(2) && (serviceReimbursement.getBackflowlevel() == null || serviceReimbursement.getBackflowlevel() == 0)) {
                ServiceFundflow serviceFundflow = new ServiceFundflow();
                serviceFundflow.setFundid(serviceReimbursement.getId());
                serviceFundflow.setCheckuserno(user.getUserName());
@@ -515,8 +524,9 @@
    @Log(title = "审核费用", businessType = BusinessType.OTHER)
    @PostMapping("/checkfund")
    public AjaxResult checkFund(@RequestBody CheckFundVO checkFundVO) {
        log.info("审核费用的入参 : {}", checkFundVO);
        ServiceReimbursement serviceReimbursement = serviceReimbursementService.getById(checkFundVO.getFundid());
        log.info("审核费用的serviceReimbursementService.getById返参 : {}", serviceReimbursement);
        if (serviceReimbursement != null) {
            Integer totalLevel = 0;
            LoginUser loginUser = getLoginUser();
@@ -525,7 +535,7 @@
            serviceFundflowrule.setApplytype("0");
            serviceFundflowrule.setCheckuserno(loginUser.getUsername());
            List<ServiceFundflowrule> serviceFundflowrules = serviceFundflowruleService.queryList(serviceFundflowrule);
            log.info("审核费用的serviceFundflowruleService.queryList返参 : {}", serviceFundflowrules.size());
            if (serviceFundflowrules == null || serviceFundflowrules.stream().count() == 0) {
                return AjaxResult.error(HttpStatus.ERROR, "当前人员无此记录审核权限");
            }
@@ -559,12 +569,14 @@
                    }
                }
                FlowLevel = FlowLevel + 1;
                serviceReimbursement.setBackflowlevel(Long.valueOf(FlowLevel));
            } else {
                CheckFlag = 2;
                if (CheckFlag == 2) {
                    //应医院要求如果出现退回,直接退到发起者
                    FlowLevel = 0;
                    RecordStatus = -1;
                } else {
                    //下面是原来的写法,一级一级的往下退,医院现在不要这样搞了,下面这段代码先保留,等医院回心转意,再给放开
                    RecordStatus = (FlowLevel + 1) * 2 - 1;
@@ -585,13 +597,17 @@
            serviceFundflow.setFundtype(1);
            serviceFundflow.setApplytype("0");
            serviceFundflow.setFlowconclusion(CheckFlag);
            serviceFundflow.setFlowcontent(checkFundVO.getFlowcontent());
            if (StringUtils.isNotBlank(checkFundVO.getFlowcontent())) {
                serviceFundflow.setFlowcontent(checkFundVO.getFlowcontent());
            } else {
                serviceFundflow.setFlowcontent(checkFundVO.getFlowconclusion() == 1 ? "通过" : "不通过");
            }
            serviceFundflow.setFlowlevel(OriginalFlowLevel + 1);
            serviceFundflowService.save(serviceFundflow);
            List<Integer> postids = postService.selectPostListByUserId(loginUser.getUserId());
            if (!postids.contains(2)) {
            log.info("postService.selectPostListByUserId : {}", postids.size());
            if (!postids.contains(2) && !postids.contains(6) && (serviceReimbursement.getBackflowlevel() == null || serviceReimbursement.getBackflowlevel() == 0)) {
                if (CheckFlag == 2 && OriginalFlowLevel == 1) {
                    ServiceFundflow serviceFundflowAuto = new ServiceFundflow();
                    serviceFundflowAuto.setFundid(serviceReimbursement.getId());
@@ -603,9 +619,9 @@
                    serviceFundflowAuto.setFlowcontent("非专职人员二级审核拒绝后直接退回到修改状态");
                    serviceFundflowAuto.setFlowlevel(1);
                    serviceFundflowService.save(serviceFundflowAuto);
                    serviceReimbursement.setRecordstatus(1);
                }
            }
            serviceReimbursementService.updateById(serviceReimbursement);
@@ -620,10 +636,12 @@
            serviceSystemmessage.setIsread(0);
            serviceSystemmessage.setMessagetype(1);
            serviceSystemmessage.setRelevantno(serviceReimbursement.getId());
            log.info("CheckFlag的值 : {}", CheckFlag);
            if (CheckFlag == 1) {
                //通过
                serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核通过");
                serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceReimbursement.getCreateTime()) + "提交的关于捐献案例【" + serviceReimbursement.getDonorname() + "】的差旅费申请已通过" + (OriginalFlowLevel + 1) + "级审核");
                log.info("totalLevel的值 : {},  OriginalFlowLevel的值:{}", totalLevel, OriginalFlowLevel);
                if (totalLevel == OriginalFlowLevel + 1) {
                    //所有数据新增到备份表
                    serviceReimbursementService.addSharedData(checkFundVO.getFundid());
@@ -648,7 +666,7 @@
    @ApiOperation("修改报销申请")
    //@PreAuthorize("@ss.hasPermi('project:reimbursement:edit')")
    @Log(title = "报销申请", businessType = BusinessType.UPDATE)
    @PutMapping
    @PostMapping("/reimbursementEdit")
    @RepeatSubmit
    public AjaxResult edit(@RequestBody ServiceReimbursement serviceReimbursement) {
        boolean b = serviceReimbursementService.updateById(serviceReimbursement);
@@ -678,8 +696,8 @@
     */
    @ApiOperation("删除报销申请")
    //@PreAuthorize("@ss.hasPermi('project:reimbursement:remove')")
    @Log(title = "报销申请", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    @Log(title = "报销申请")
    @GetMapping("/remove/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids) {
        return toAjax(serviceReimbursementService.removeByIds(Arrays.asList(ids)));
    }
@@ -748,9 +766,15 @@
        ServiceReimbursementEo serviceReimbursementEo = new ServiceReimbursementEo();
        serviceReimbursementEo.setId(id);
        List<ServiceReimbursementEo> rdInfoByItem = serviceReimbursementService.getRDInfoByItem(serviceReimbursementEo);
        log.info("rdInfoByItem是否为空 :{}", CollectionUtils.isEmpty(rdInfoByItem) ? null : rdInfoByItem.size());
        for (int i = 0; i < rdInfoByItem.size(); i++) {
            ServiceReimbursementEo serviceReimbursementEo1 = rdInfoByItem.get(i);
            String codeByInfo = PersonType.getCodeByInfo(serviceReimbursementEo1.getPersontype());
            serviceReimbursementEo1.setPersontype(codeByInfo);
        }
        //获取报销支付信息
        List<ServiceReimbursementpayee> reimbursementpayeeInfo = reimbursementpayeeService.getReimbursementpayeeInfo(serviceReimbursementEo);
        log.info("reimbursementpayeeInfo是否为空 :{}", CollectionUtils.isEmpty(reimbursementpayeeInfo) ? null : reimbursementpayeeInfo.size());
        Map<String, List<ServiceReimbursementEo>> listMap = rdInfoByItem.stream().collect(Collectors.groupingBy(ServiceReimbursementEo::getPersontype));
        List<Map<String, BigDecimal>> list = new ArrayList<>();
        StringBuffer FYXM1 = new StringBuffer();
@@ -767,28 +791,76 @@
            BigDecimal keyOneMoney = new BigDecimal(0.00);
            BigDecimal keyTwoMoney = new BigDecimal(0.00);
            for (ServiceReimbursementEo serviceReimbursementEo1 : values) {
                otherMoney = otherMoney.add(serviceReimbursementEo1.getTrafficexpense()).add(serviceReimbursementEo1.getHotelexpense()).add(serviceReimbursementEo1.getFoodexpenses()).add(serviceReimbursementEo1.getFoodallowance()).add(serviceReimbursementEo1.getOtherexpense()).add(serviceReimbursementEo1.getOtherfeeamount());
                otherMoney = otherMoney.add(serviceReimbursementEo1.getTrafficexpense()).add(serviceReimbursementEo1.getHotelexpense()).add(serviceReimbursementEo1.getCityfee()).add(serviceReimbursementEo1.getFoodexpenses()).add(serviceReimbursementEo1.getFoodallowance()).add(serviceReimbursementEo1.getOtherexpense()).add(serviceReimbursementEo1.getOtherfeeamount());
            }
            map.put(key, otherMoney);
            list.add(map);
            // 不为专家或家属
            if (!key.equals("3") && !key.equals("4")) {
                //将上一次的清空
                FYXM1.delete(0, FYXM1.length());
                //再新增
                otherMoneyall = otherMoneyall.add(otherMoney);
                FYXM1.append("OPO工作人员" + ":" + otherMoneyall + " ");
            } else {
                if (flag == 0) {
                    key1 = key;
                    flag = 1;
                }
                if (key1 == key) {
                    FYXM2.append(PersonType.getInfoByCode(key) + ":" + otherMoney);
                    allMoney = allMoney.add(otherMoney);
            // 不为专家或家属,key有可能是数字,有可能是汉字
            Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
            boolean matches = pattern.matcher(key).matches();
            if (matches) {
                if (!key.equals("3") && !key.equals("4")) {
                    //将上一次的清空
                    FYXM1.delete(0, FYXM1.length());
                    //再新增
                    otherMoneyall = otherMoneyall.add(otherMoney);
                    FYXM1.append("OP0 工作人员报销差旅费" + ":" + otherMoneyall + " ");
                } else {
                    FYXM3.append(PersonType.getInfoByCode(key) + ":" + otherMoney);
                    allMoney = allMoney.add(otherMoney);
                    if (flag == 0) {
                        key1 = key;
                        flag = 1;
                    }
                    if (key1 == key) {
                        if (key.equals("3")) {
//                        FYXM2.append(PersonType.getInfoByCode(key) + ":" + otherMoney);
                            FYXM2.append("专家报销差旅费 :" + otherMoney);
                            allMoney = allMoney.add(otherMoney);
                        } else {
                            FYXM2.append("家属报销差旅费及误工费用 : " + otherMoney);
                            allMoney = allMoney.add(otherMoney);
                        }
                    } else {
                        if (key.equals("3")) {
//                        FYXM2.append(PersonType.getInfoByCode(key) + ":" + otherMoney);
                            FYXM3.append("专家报销差旅费 :" + otherMoney);
                            allMoney = allMoney.add(otherMoney);
                        } else {
                            FYXM3.append("家属报销差旅费及误工费用 : " + otherMoney);
                            allMoney = allMoney.add(otherMoney);
                        }
                    }
                }
            } else {
                if (!key.equals("专家") && !key.equals("家属")) {
                    //将上一次的清空
                    FYXM1.delete(0, FYXM1.length());
                    //再新增
                    otherMoneyall = otherMoneyall.add(otherMoney);
                    FYXM1.append("OP0 工作人员报销差旅费" + ":" + otherMoneyall + " ");
                } else {
                    if (flag == 0) {
                        key1 = key;
                        flag = 1;
                    }
                    if (key1 == key) {
                        if (key.equals("专家")) {
//                        FYXM2.append(PersonType.getInfoByCode(key) + ":" + otherMoney);
                            FYXM2.append("专家报销差旅费 :" + otherMoney);
                            allMoney = allMoney.add(otherMoney);
                        } else {
                            FYXM2.append("家属报销差旅费及误工费用 : " + otherMoney);
                            allMoney = allMoney.add(otherMoney);
                        }
                    } else {
                        if (key.equals("专家")) {
//                        FYXM2.append(PersonType.getInfoByCode(key) + ":" + otherMoney);
                            FYXM3.append("专家报销差旅费 :" + otherMoney);
                            allMoney = allMoney.add(otherMoney);
                        } else {
                            FYXM3.append("家属报销差旅费及误工费用 : " + otherMoney);
                            allMoney = allMoney.add(otherMoney);
                        }
                    }
                }
            }
        }
@@ -818,6 +890,7 @@
        String date = formatter.format(dt);
        String time = date.substring(0, 10);
        dataMap.put("XZBH", rdInfoByItem.get(0).getBh() == null ? "" : rdInfoByItem.get(0).getBh());
        dataMap.put("TBYYMMDD", time);
        dataMap.put("BXDFJ", rdInfoByItem.get(0).getAttachcount() == null ? "   " : "" + rdInfoByItem.get(0).getAttachcount());
        dataMap.put("JXZXM", rdInfoByItem.get(0).getDonorname() == null ? "" : rdInfoByItem.get(0).getDonorname());
@@ -854,6 +927,14 @@
        }
        dataMap.put("BXBZ", remark);
        dataMap.put("ZXFZR", StringUtils.isEmpty(rdInfoByItem.get(0).getOpochecker()) ? "" : rdInfoByItem.get(0).getOpochecker());
//
        dataMap.put("CWFYZ", StringUtils.isEmpty(rdInfoByItem.get(0).getFinvicepresident()) ? "" : rdInfoByItem.get(0).getFinvicepresident());
        dataMap.put("YWFYZ", StringUtils.isEmpty(rdInfoByItem.get(0).getBusvicepresident()) ? "" : rdInfoByItem.get(0).getBusvicepresident());
        dataMap.put("BGSZR", StringUtils.isEmpty(rdInfoByItem.get(0).getOfficedirector()) ? "" : rdInfoByItem.get(0).getOfficedirector());
        dataMap.put("CWBZR", StringUtils.isEmpty(rdInfoByItem.get(0).getFinancedirector()) ? "" : rdInfoByItem.get(0).getFinancedirector());
        dataMap.put("CWSH", StringUtils.isEmpty(rdInfoByItem.get(0).getFinancechecher()) ? "" : rdInfoByItem.get(0).getFinancechecher());
        dataMap.put("YYMMDD", time);