yxh
2023-03-13 28c168589258f36b31fdb39add938e564804b3b1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ServiceReimbursementController.java
@@ -1,49 +1,44 @@
package com.ruoyi.web.controller.project;
import java.io.*;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.core.controller.BaseController;
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.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.poi.ExcelUtil;
import com.ruoyi.project.domain.*;
import com.ruoyi.project.domain.dto.ServiceReimbursementDto;
import com.ruoyi.project.domain.vo.CheckFundVO;
import com.ruoyi.project.domain.vo.SpFinancialExpensesIn;
import com.ruoyi.project.domain.vo.SpFinancialExpensesReimbursementOut;
import com.ruoyi.project.service.*;
import com.ruoyi.system.domain.SysPost;
import com.ruoyi.system.service.ISysPostService;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang.ArrayUtils;
import org.apache.ibatis.annotations.Options;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.annotation.RepeatSubmit;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
import freemarker.template.Configuration;
import org.springframework.web.bind.annotation.*;
import java.io.*;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * 报销申请Controller
@@ -58,6 +53,9 @@
{
    @Autowired
    private IServiceReimbursementService serviceReimbursementService;
    @Autowired
    private IServiceReimbursementSharedService serviceReimbursementServiceShare;
    @Autowired
    private IServiceReimbursementdetailService serviceReimbursementdetailService;
@@ -204,9 +202,246 @@
    @Options(useGeneratedKeys = true, keyProperty = "id")
    public AjaxResult add(@RequestBody ServiceReimbursement serviceReimbursement)
    {
        boolean b = serviceReimbursementService.save(serviceReimbursement);
        if(b)
        {
            addReiSharedDatd(serviceReimbursement,1);
        }
        Long id = serviceReimbursement.getId();
        return AjaxResult.success(id);
    }
    public  int addReiSharedDatd(ServiceReimbursement serviceReimbursement,int nType)
    {
        //remShare = ;
        ServiceReimbursementShared remShare = null;
        if(nType == 1)
       {
            remShare = new ServiceReimbursementShared();
            remShare.setReimid(serviceReimbursement.getId());
        }
        else //modify
        {
            List<ServiceReimbursementShared> remlist = serviceReimbursementServiceShare.getRemShareInfoByRemId(serviceReimbursement.getId());
            if(remlist!=null)
                remShare =remlist.get(0);
        }
        remShare.setUserno(serviceReimbursement.getUserno());
        remShare.setUsername(serviceReimbursement.getUsername());
        remShare.setTravelers(serviceReimbursement.getTravelers());
        remShare.setIdcardtype(serviceReimbursement.getIdcardtype());
        remShare.setIdcardno(serviceReimbursement.getIdcardno());
        remShare.setPhone(serviceReimbursement.getPhone());
        remShare.setDepositbank(serviceReimbursement.getDepositbank());
        remShare.setBankcardno(serviceReimbursement.getBankcardno());
        remShare.setBranchbankname(serviceReimbursement.getBranchbankname());
        remShare.setAnnexbankcard(serviceReimbursement.getAnnexbankcard());
        remShare.setAnnexfiles(serviceReimbursement.getAnnexfiles());
       // remShare.setAmountrequested(BigDecimal.valueOf(serviceReimbursement.getAmountrequested()));
        Double nTemp = serviceReimbursement.getAmountrequested();
        if( nTemp == null) nTemp = 0d;
        remShare.setAmountrequested(BigDecimal.valueOf(nTemp));
        nTemp = serviceReimbursement.getPrepaidamount();
        if(nTemp == null) nTemp = 0.0;
        remShare.setPrepaidamount(BigDecimal.valueOf(nTemp));
        remShare.setInvoicecount(serviceReimbursement.getInvoicecount());
        remShare.setAttachcount(serviceReimbursement.getAttachcount());
        remShare.setManagerno(serviceReimbursement.getManagerno());
        remShare.setManagername(serviceReimbursement.getManagername());
        remShare.setDeptmentno(serviceReimbursement.getDeptmentno());
        remShare.setDeptmentname(serviceReimbursement.getDeptmentname());
        remShare.setOpochecker(serviceReimbursement.getOpochecker());
        remShare.setFinvicepresident(serviceReimbursement.getFinvicepresident());
        remShare.setBusvicepresident(serviceReimbursement.getBusvicepresident());
        remShare.setOfficedirector(serviceReimbursement.getOfficedirector());
        remShare.setFinancedirector(serviceReimbursement.getFinancedirector());
        remShare.setFinancechecher(serviceReimbursement.getFinancechecher());
        remShare.setInfoid(serviceReimbursement.getInfoid());
        remShare.setDonorno(serviceReimbursement.getDonorno());
        remShare.setDonorname(serviceReimbursement.getDonorname());
        remShare.setReason(serviceReimbursement.getReason());
        remShare.setRecordstatus(serviceReimbursement.getRecordstatus());
        remShare.setUploadflag(serviceReimbursement.getUploadflag());
        remShare.setUploadtime(serviceReimbursement.getUploadtime());
        nTemp = serviceReimbursement.getTotalamount();
        if(nTemp == null) nTemp = 0.0;
        remShare.setTotalamount(BigDecimal.valueOf(nTemp));
        remShare.setBigstrmoney(serviceReimbursement.getBigstrmoney());
        remShare.setFlowlevel(serviceReimbursement.getFlowlevel());
        remShare.setCosttype(serviceReimbursement.getCosttype());
        remShare.setCosttypename(serviceReimbursement.getCosttypename());
        remShare.setFileurl(serviceReimbursement.getFileurl());
        //remShare.setOaid(serviceReimbursement.getOaid());
        //remShare.setDonorno(serviceReimbursement.getDonorno());
        boolean bRet = false;
        if(nType==1)
        {
            bRet = serviceReimbursementServiceShare.save(remShare);
        }
        else
        {
            //remShare.setId(serviceReimbursement.);
            bRet = serviceReimbursementServiceShare.updateById(remShare);
        }
        //if(!bRet) return -1;
        String strMutfileUrl = remShare.getFileurl();
        //有附件时才调用第三方进行上传
        if(strMutfileUrl == null) return 0;
        if(strMutfileUrl.isEmpty()) return 0;
        try
        {
            uploadOAFileAndUpdateDb(remShare);
        }
        catch (Exception e)
        {
            logger.error("调用第三方接口出错!");
            e.printStackTrace();
        }
        //此处保存成功后要上传OA,保存返回值
        return  0;
    }
    int uploadOAFileAndUpdateDb(ServiceReimbursementShared 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);//得到返回的token?
        JSONObject json1 = JSONObject.parseObject(strRes);
        strRes = json1.get("id").toString();
        ///if(strRes.isEmpty() || "" == strRes) return -1;// 为空代表失败
        //下面需求调用文件的接口,调用成功返回后,得到filename和fileid 用这二个值去更新数据
         String filePath = RuoYiConfig.getUploadPath();
         String strMutfileUrl = remShare.getFileurl();//可能存在多个地址,以,分开
        String strFUrl = "http://129.88.242.39:8899/seeyon/rest/attachment?token=%s"+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();
            }
            /*CloseableHttpClient httpClient = HttpClients.createDefault();
            //创建post方法连接实例,在post方法中传入待连接地址
            HttpPost httpPost = new HttpPost(strFUrl);
            CloseableHttpResponse response = null;
            String struploadResult = "";
            try {
                //设置请求参数(类似html页面中name属性)
                MultipartEntityBuilder entity = MultipartEntityBuilder.create();
                //entity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
                entity.setCharset(Charset.forName("UTF-8"));
                byte[] fileBytes = Files.readAllBytes(Paths.get(strFile));
                if (fileBytes != null) {
                    //内容类型,用于定义网络文件的类型和网页的编码,决定文件接收方将以什么形式、什么编码读取这个文件
                    ContentType OCTEC_STREAM = ContentType.create("application/octet-stream", Charset.forName("UTF-8"));
                    //添加文件
                    entity.addBinaryBody("file", fileBytes, OCTEC_STREAM, strTemp);
                }
                httpPost.setEntity(entity.build());
                //发起请求,并返回请求响应
                response = httpClient.execute(httpPost);
                struploadResult = EntityUtils.toString(response.getEntity(), "utf-8");
            }
            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 = serviceReimbursementServiceShare.updateById(remShare);
       if(!bRet) return -1;
        return 0;
    }
    /**
@@ -227,12 +462,12 @@
            if(!postids.contains(2))
            {
                serviceReimbursement.setFlowlevel(1);
                serviceReimbursement.setFlowlevel(1L);
                serviceReimbursement.setRecordstatus(2);
            }
            else
            {
                serviceReimbursement.setFlowlevel(0);
                serviceReimbursement.setFlowlevel(0L);
                serviceReimbursement.setRecordstatus(0);
            }
@@ -295,7 +530,7 @@
            }
            Integer CheckFlag=0;
            Integer RecordStatus=serviceReimbursement.getRecordstatus();
            Integer FlowLevel=serviceReimbursement.getFlowlevel();
            Integer FlowLevel = Integer.valueOf(serviceReimbursement.getFlowlevel().toString());
            Integer OriginalFlowLevel=FlowLevel;
            if(checkFundVO.getFlowconclusion()==1)
            {
@@ -329,7 +564,7 @@
            }
            serviceReimbursement.setRecordstatus(RecordStatus);
            serviceReimbursement.setFlowlevel(FlowLevel);
            serviceReimbursement.setFlowlevel(Long.valueOf(FlowLevel.toString()));
            ServiceFundflow serviceFundflow=new ServiceFundflow();
            SysUser user = loginUser.getUser();
@@ -410,7 +645,12 @@
    @RepeatSubmit    
    public AjaxResult edit(@RequestBody ServiceReimbursement serviceReimbursement)
    {
        return toAjax(serviceReimbursementService.updateById(serviceReimbursement));
        boolean b= serviceReimbursementService.updateById(serviceReimbursement);
        if(b)
        {
            addReiSharedDatd(serviceReimbursement,2);
        }
        return toAjax(b);
    }
    /**