package com.ruoyi.project.service.impl; import java.io.File; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.ConcurrentHashMap; 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.constant.HttpStatus; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.HttpClientKit; import com.ruoyi.common.utils.bean.DtoConversionUtils; import com.ruoyi.common.utils.uuid.IdUtils; 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.DingTalkReqVo; import com.ruoyi.project.domain.vo.SpFinancialExpensesReimbursementOut; import com.ruoyi.project.mapper.*; import com.ruoyi.project.service.*; import com.ruoyi.system.domain.SysUserRole; import com.ruoyi.system.mapper.SysUserRoleMapper; import com.ruoyi.system.service.ISysPostService; import com.ruoyi.system.service.ISysUserService; import com.sun.org.apache.bcel.internal.generic.NEW; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; 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.utils.StringUtils; import org.springframework.transaction.annotation.Transactional; /** * 报销申请Service业务层处理 * * @author ruoyi * @date 2022-01-24 */ @Slf4j @Service public class ServiceReimbursementServiceImpl extends ServiceImpl implements IServiceReimbursementService { @Autowired ServiceReimbursementMapper serviceReimbursementMapper; @Autowired ServiceReimbursementdetailMapper serviceReimbursementdetailMapper; @Autowired ServiceReimbursementdetailSharedMapper serviceReimbursementdetailSharedMapper; @Autowired ServiceReimbursementpayeeMapper reimbursementpayeeMapper; @Autowired ServiceReimbursementpayeeSharedMapper reimbursementpayeeSharedMapper; @Autowired IServiceReimbursementdetailSharedService detailSharedService; @Autowired IServiceReimbursementSharedService sharedService; @Autowired IServiceReimbursementpayeeSharedService payeeSharedService; @Autowired IServiceFundflowruleService serviceFundflowruleService; @Autowired IServiceFundflowService serviceFundflowService; @Autowired ISysUserService sysUserService; @Autowired private DingTalkService dingTalkService; @Autowired private ISysPostService postService; @Autowired private SysUserRoleMapper sysUserRoleMapper; @Autowired private IServiceSystemmessageService serviceSystemmessageService; @Value("${xyurl}") private String xyurl; @Value("${rexyurl}") private String rexyurl; @Value("${newSwitch}") private Integer newSwitch; @Value("${spring.profiles.active}") private String active; /** * 查询报销申请列表 * * @param serviceReimbursement 报销申请 * @return 报销申请 */ @Override public List queryList(ServiceReimbursement serviceReimbursement) { LambdaQueryWrapper wrappers = Wrappers.lambdaQuery(); if (ObjectUtils.isNotEmpty(serviceReimbursement.getId())) { wrappers.eq(ServiceReimbursement::getId, serviceReimbursement.getId()); } if (StringUtils.isNotBlank(serviceReimbursement.getCreateBy())) { wrappers.eq(ServiceReimbursement::getCreateBy, serviceReimbursement.getCreateBy()); } if (serviceReimbursement.getCreateTime() != null) { wrappers.eq(ServiceReimbursement::getCreateTime, serviceReimbursement.getCreateTime()); } if (StringUtils.isNotBlank(serviceReimbursement.getUsername())) { wrappers.like(ServiceReimbursement::getUsername, serviceReimbursement.getUsername()); } if (StringUtils.isNotBlank(serviceReimbursement.getTravelers())) { wrappers.like(ServiceReimbursement::getTravelers, serviceReimbursement.getTravelers()); } if (StringUtils.isNotBlank(serviceReimbursement.getDeptmentname())) { wrappers.like(ServiceReimbursement::getDeptmentname, serviceReimbursement.getDeptmentname()); } if (StringUtils.isNotBlank(serviceReimbursement.getDonorno())) { wrappers.eq(ServiceReimbursement::getDonorno, serviceReimbursement.getDonorno()); } if (serviceReimbursement.getRecordstatus() != null) { wrappers.eq(ServiceReimbursement::getRecordstatus, serviceReimbursement.getRecordstatus()); } if (serviceReimbursement.getUploadStates() != null) { wrappers.eq(ServiceReimbursement::getUploadStates, serviceReimbursement.getUploadStates()); } if (StringUtils.isNotBlank(serviceReimbursement.getUploadflag())) { wrappers.eq(ServiceReimbursement::getUploadflag, serviceReimbursement.getUploadflag()); } if (serviceReimbursement.getFlowlevel() != null) { wrappers.eq(ServiceReimbursement::getFlowlevel, serviceReimbursement.getFlowlevel()); } /* if (serviceReimbursement.getStarttime()!=null && serviceReimbursement.getEndtime()!=null){ wrappers.between(ServiceReimbursement::getCreateTime ,serviceReimbursement.getStarttime(),serviceReimbursement.getEndtime()); }*/ return this.list(wrappers); } @Override public Long getMaxId() { return serviceReimbursementMapper.getMaxId(); } @Override public List getRBDetailList(Long id) { log.info("getRBDetailList的入参:{}", id); List serviceReimbursementdetailVOS = new ArrayList<>(); List rbDetailList = serviceReimbursementdetailMapper.getRBDetailList(id); log.info("getRBDetailList的入参:{}", CollectionUtils.isEmpty(rbDetailList) ? null : rbDetailList.size()); for (int j = 0; j < rbDetailList.size(); j++) { ServiceReimbursementdetail serviceReimbursementdetail = rbDetailList.get(j); String annexfiles = serviceReimbursementdetail.getAnnexfiles(); String invoicefiles = serviceReimbursementdetail.getInvoicefiles(); ServiceReimbursementdetailVO serviceReimbursementdetailVO = DtoConversionUtils.sourceToTarget(serviceReimbursementdetail, ServiceReimbursementdetailVO.class); if (StringUtils.isNotBlank(annexfiles)) { try { serviceReimbursementdetailVO.setAnnexfilesList(JSON.parseArray(annexfiles)); } catch (Exception e) { if (e.getMessage().equals("invalid comment")) { log.error("报异常了,老大不让我处理"); } } } if (StringUtils.isNotBlank(invoicefiles)) { try { serviceReimbursementdetailVO.setInvoicefilesList(JSON.parseArray(invoicefiles)); } catch (Exception e) { if (e.getMessage().equals("invalid comment")) { } } } serviceReimbursementdetailVOS.add(serviceReimbursementdetailVO); } return serviceReimbursementdetailVOS; } @Override @Transactional(rollbackFor = Exception.class) public Boolean addSharedData(Long id) { log.info("addSharedData方法的入参id :{}", id); //先判断一下share表是否已经插入 ServiceReimbursementShared reimbursementShared1 = new ServiceReimbursementShared(); reimbursementShared1.setReimid(id); reimbursementShared1.setDelFlag(0L); List serviceReimbursementShareds = sharedService.queryList(reimbursementShared1); log.info("serviceReimbursementShareds的查询结果 :{}", serviceReimbursementShareds.size()); if (!CollectionUtils.isEmpty(serviceReimbursementShareds)) { return true; } //如果没有插入,则走下面的流程 ServiceReimbursement serviceReimbursement = serviceReimbursementMapper.selectById(id); Map columnMap = new HashMap<>(); columnMap.put("rbid", id); //获取详情数据 List details = serviceReimbursementdetailMapper.selectByMap(columnMap); log.info("serviceReimbursementdetailMapper.selectByMap方法的返参参 :{}", CollectionUtils.isEmpty(details) ? null : details.size()); //获取支付数据 List serviceReimbursementpayees = reimbursementpayeeMapper.selectByMap(columnMap); log.info("reimbursementpayeeMapper.selectByMap方法的返参参 :{}", CollectionUtils.isEmpty(serviceReimbursementpayees) ? null : serviceReimbursementpayees.size()); //数据组装 ServiceReimbursementShared serviceReimbursementShared = DtoConversionUtils.sourceToTarget(serviceReimbursement, ServiceReimbursementShared.class); serviceReimbursementShared.setReimid(id); serviceReimbursementShared.setId(null); List serviceReimbursementdetailShareds = DtoConversionUtils.sourceToTarget(details, ServiceReimbursementdetailShared.class); List serviceReimbursementpayeeShareds = DtoConversionUtils.sourceToTarget(serviceReimbursementpayees, ServiceReimbursementpayeeShared.class); //将组装好的数据插入到分享表中 sharedService.save(serviceReimbursementShared); // //上传OA文件 //将serviceReimbursementdetail表里的id赋值给Rdid; 将serviceReimbursementShared里的ID赋值给RBID,并将serviceReimbursementdetailShared表里的id置空,由数据库重新生成 for (int i = 0; i < details.size(); i++) { serviceReimbursementdetailShareds.get(i).setRdid(serviceReimbursementdetailShareds.get(i).getId()); serviceReimbursementdetailShareds.get(i).setRbid(serviceReimbursementShared.getId()); serviceReimbursementdetailShareds.get(i).setId(null); //上传OA文件 log.info("上传OA文件方法的入参:{}", serviceReimbursementdetailShareds.get(i)); try { //如果是本地环境,就不调这个了 if (!active.equals("druid")) uploadOAFileAndUpdateDb(serviceReimbursementdetailShareds.get(i)); } catch (Exception e) { log.error("Exception中reimShare的入参id为:{}", serviceReimbursementShared.getId()); if (serviceReimbursementShared.getId() != null) { Boolean aBoolean = sharedService.delResharedInfoById(serviceReimbursementShared.getId()); log.error("文件上传失败,将分享表数据回滚:{}", aBoolean); } e.getMessage(); return false; } } // detailSharedService.saveBatch(serviceReimbursementdetailShareds); for (ServiceReimbursementdetailShared serviceReimbursementdetailShared : serviceReimbursementdetailShareds) { if (ObjectUtils.isNotEmpty(serviceReimbursementdetailShared)) { detailSharedService.save(serviceReimbursementdetailShared); } else { log.info("serviceReimbursementdetailShared为空了"); } } //将serviceReimbursementpayee表里的id赋值给Rpid; 将serviceReimbursementShared里的ID赋值给RBID,并将serviceReimbursementpayeeShared表里的id置空,由数据库重新生成 for (int i = 0; i < serviceReimbursementpayees.size(); i++) { serviceReimbursementpayeeShareds.get(i).setRpid(Long.valueOf(serviceReimbursementpayees.get(i).getId())); serviceReimbursementpayeeShareds.get(i).setRbid(serviceReimbursementShared.getId()); serviceReimbursementpayeeShareds.get(i).setId(null); } for (ServiceReimbursementpayeeShared serviceReimbursementpayeeShared : serviceReimbursementpayeeShareds) { if (ObjectUtils.isNotEmpty(serviceReimbursementpayeeShared)) { payeeSharedService.save(serviceReimbursementpayeeShared); } else { log.info("serviceReimbursementpayeeShared为空了!"); } } return true; } @Override public List selectSearchList(ServiceReimbursementDto serviceReimbursementdto) { return serviceReimbursementMapper.selectSearchList(serviceReimbursementdto); } @Override public List getListBypower(String PAUSERNO, Integer PAFUNDTYPE, String PAAPPLICANT, String PAAPPLICATIONBEGTIME, String PAAPPLICATIONENDTIME, String PADEPARTMENT, Integer CHECKFLAG, Integer APPLYTYPE, Integer CHECKSTATUS, String donorname) { return serviceReimbursementMapper.getListBypower(PAUSERNO, PAFUNDTYPE, PAAPPLICANT, PAAPPLICATIONBEGTIME, PAAPPLICATIONENDTIME, PADEPARTMENT, CHECKFLAG, APPLYTYPE, CHECKSTATUS, donorname); } @Override public List getInfoByInfoId(Long infoid) { return serviceReimbursementMapper.getInfoByInfoId(infoid); } @Override public List getInfoByInfoIdRelatives(Long infoid) { return serviceReimbursementMapper.getInfoByInfoIdRelatives(infoid); } @Override public List getRDInfoByItem(ServiceReimbursementEo serviceReimbursementEo) { return serviceReimbursementMapper.getRDInfoByItem(serviceReimbursementEo); } @Override public Map checkFund(LoginUser loginUser, CheckFundVO checkFundVO) { Map allMap = new HashMap<>(); ServiceReimbursement serviceReimbursement = getById(checkFundVO.getFundid()); log.info("审核费用的serviceReimbursementService.getById返参 : {}", serviceReimbursement); if (serviceReimbursement != null) { Integer totalLevel = 0; ServiceFundflowrule serviceFundflowrule = new ServiceFundflowrule(); serviceFundflowrule.setFundtype(1); serviceFundflowrule.setApplytype("0"); serviceFundflowrule.setCheckuserno(loginUser.getUsername()); List serviceFundflowrules = serviceFundflowruleService.queryList(serviceFundflowrule); log.info("审核费用的serviceFundflowruleService.queryList返参 : {}", serviceFundflowrules.size()); if (serviceFundflowrules == null || serviceFundflowrules.stream().count() == 0) { allMap.put(HttpStatus.ERROR + "", "当前人员无此记录审核权限"); return allMap; } if (serviceFundflowrules.get(0).getFlowlevel() - 1 != serviceReimbursement.getFlowlevel()) { allMap.put(HttpStatus.ERROR + "", "当前人员与此记录的审核级别不符"); return allMap; } if (serviceFundflowrules != null && serviceFundflowrules.stream().count() > 0) { totalLevel = serviceFundflowrules.get(0).getTotallevel(); } Integer CheckFlag = 0; Integer RecordStatus = serviceReimbursement.getRecordstatus(); Integer FlowLevel = Integer.valueOf(serviceReimbursement.getFlowlevel().toString()); if (Objects.isNull(serviceReimbursement.getBackflowlevel()) && !Objects.isNull(serviceReimbursement.getFlowlevel())) { serviceReimbursement.setBackflowlevel(Long.valueOf(FlowLevel.toString())); } Integer OriginalFlowLevel = FlowLevel; if (checkFundVO.getFlowconclusion() == 1) { CheckFlag = 1; if (totalLevel == 0) { //99 取消 RecordStatus = 99; } else { if (totalLevel == FlowLevel + 1) { RecordStatus = 99; } else { RecordStatus = (FlowLevel + 1) * 2; } } SysUser user = loginUser.getUser(); if (serviceReimbursement.getFlowlevel() == 1 && serviceReimbursement.getBackflowlevel() == 100) { log.info("出差补贴被 财务退回再提交,出纳再次审批,之后提交到财务:{}", serviceReimbursement.getId()); //说明是财务退回再提交的.需要出纳再看一遍,没问题之后,往分享表里新增 // serviceReimbursementService.addSharedData(serviceReimbursement.getId()); serviceReimbursement.setFinancechecher("审批人:" + user.getUserName() + " & 审批时间" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + " & 审批结果:通过"); serviceReimbursement.setFlowlevel(serviceFundflowrules.get(0).getTotallevel().longValue()); serviceReimbursement.setRecordstatus(99); serviceReimbursement.setUploadStates(1); boolean b = updateById(serviceReimbursement); log.info("是否修改成功:{}", b); Boolean aBoolean1 = null; if (newSwitch == 1) { aBoolean1 = sendData(serviceReimbursement); if (!aBoolean1) { allMap.put("500", "发送失败"); return allMap; } } //保存审批流程表 ServiceFundflow serviceFundflow = new ServiceFundflow(); serviceFundflow.setFundid(serviceReimbursement.getId()); serviceFundflow.setCheckuserno(user.getUserName()); serviceFundflow.setCheckusername(user.getNickName()); serviceFundflow.setFundtype(1); serviceFundflow.setApplytype("0"); serviceFundflow.setFlowconclusion(CheckFlag); serviceFundflow.setFlowcontent("通过"); serviceFundflow.setFlowlevel(OriginalFlowLevel + 1); Boolean aBoolean = serviceFundflowService.save(serviceFundflow); allMap.put("200", "success"); return allMap; } FlowLevel = FlowLevel + 1; serviceReimbursement.setBackflowlevel(Long.valueOf(FlowLevel)); //如果当前登陆是财务,则 List roleIds = sysUserRoleMapper.getUserRoleByUserId(user.getUserId()); if (roleIds != null && roleIds.contains(11)) { //11为财务 serviceReimbursement.setFinancechecher("审批人:" + user.getUserName() + " & 审批时间" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " & 审批结果:通过"); } } else { CheckFlag = 2; if (CheckFlag == 2) { //应医院要求如果出现退回,直接退到发起者 FlowLevel = 0; RecordStatus = -1; } else { //下面是原来的写法,一级一级的往下退,医院现在不要这样搞了,下面这段代码先保留,等医院回心转意,再给放开 RecordStatus = (FlowLevel + 1) * 2 - 1; FlowLevel = (FlowLevel - 1); if (FlowLevel < 0) { FlowLevel = 0; } } SysUser sysUser = sysUserService.selectUserByUserName(serviceReimbursement.getUserno()); ArrayList> contentList = new ArrayList<>(); ConcurrentHashMap map = new ConcurrentHashMap(); map.put("审批人:", loginUser.getUser().getUserName()); map.put("审批时间:", new Date()); map.put("意见:", "不通过"); if (StringUtils.isNotBlank(checkFundVO.getFlowcontent())) map.put("意见:", checkFundVO.getFlowcontent()); contentList.add(map); DingTalkReqVo dingTalkReqVo = new DingTalkReqVo(); dingTalkReqVo.setTitle("财务系统驳回信息"); dingTalkReqVo.setNumber(sysUser.getPhonenumber()); dingTalkReqVo.setContents(contentList); dingTalkService.sendNotification(dingTalkReqVo); } serviceReimbursement.setRecordstatus(RecordStatus); serviceReimbursement.setFlowlevel(Long.valueOf(FlowLevel.toString())); ServiceFundflow serviceFundflow = new ServiceFundflow(); SysUser user = loginUser.getUser(); serviceFundflow.setFundid(serviceReimbursement.getId()); serviceFundflow.setCheckuserno(user.getUserName()); serviceFundflow.setCheckusername(user.getNickName()); serviceFundflow.setFundtype(1); serviceFundflow.setApplytype("0"); serviceFundflow.setFlowconclusion(CheckFlag); if (StringUtils.isNotBlank(checkFundVO.getFlowcontent())) { serviceFundflow.setFlowcontent(checkFundVO.getFlowcontent()); } else { serviceFundflow.setFlowcontent(checkFundVO.getFlowconclusion() == 1 ? "通过" : "不通过"); } serviceFundflow.setFlowlevel(OriginalFlowLevel + 1); serviceFundflowService.save(serviceFundflow); List postids = postService.selectPostListByUserId(loginUser.getUserId()); 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()); serviceFundflowAuto.setCheckuserno(user.getUserName()); serviceFundflowAuto.setCheckusername(user.getNickName()); serviceFundflowAuto.setFundtype(1); serviceFundflowAuto.setApplytype("0"); serviceFundflowAuto.setFlowconclusion(CheckFlag); serviceFundflowAuto.setFlowcontent("非专职人员二级审核拒绝后直接退回到修改状态"); serviceFundflowAuto.setFlowlevel(1); serviceFundflowService.save(serviceFundflowAuto); serviceReimbursement.setRecordstatus(1); } } //053审批通过之后,就需要把“办公室主任”的名字填上 if (checkFundVO.getFlowconclusion() == 1 && user.getUserName().equals("053")) { serviceReimbursement.setOfficedirector(user.getNickName()); serviceReimbursement.setUploadStates(1); Boolean aBoolean1 = null; if (newSwitch == 1) { aBoolean1 = sendData(serviceReimbursement); if (!aBoolean1) { allMap.put("500", "发送失败"); return allMap; } } } updateById(serviceReimbursement); ServiceSystemmessage serviceSystemmessage = new ServiceSystemmessage(); serviceSystemmessage.setFundtype(1); serviceSystemmessage.setApplytype("0"); serviceSystemmessage.setSenduserno(user.getUserName()); serviceSystemmessage.setSendusername(user.getNickName()); serviceSystemmessage.setReceiveuserno(serviceReimbursement.getUserno()); serviceSystemmessage.setReceiveusername(serviceReimbursement.getUsername()); serviceSystemmessage.setIsread(0); serviceSystemmessage.setMessagetype(1); serviceSystemmessage.setUpdateTime(new Date()); serviceSystemmessage.setUpdateBy(user.getNickName()); 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()) + "提交的差旅报销单申请已通过"); log.info("totalLevel的值 : {}, OriginalFlowLevel的值:{}", totalLevel, OriginalFlowLevel); } else { //驳回 serviceSystemmessage.setMessagetitle("" + (OriginalFlowLevel + 1) + "级审核驳回"); serviceSystemmessage.setMessagecontent("您" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(serviceReimbursement.getCreateTime()) + "提交的差旅报销单申请被驳回,原因:" + checkFundVO.getFlowcontent() + ""); } serviceSystemmessageService.save(serviceSystemmessage); allMap.put("200", "success"); } else { allMap.put(HttpStatus.NO_CONTENT + "", "费用编号不正确"); } return allMap; } public Boolean sendData(ServiceReimbursement serviceReimbursement) { // fund和funddetail的数据获取 addSharedData(serviceReimbursement.getId()); List serviceReimbursementSharedList = sharedService.getRemShareInfoByRemId(serviceReimbursement.getId()); if (org.springframework.util.CollectionUtils.isEmpty(serviceReimbursementSharedList)) return false; log.info("serviceReimbursementSharedList的数据量为:{}", serviceReimbursementSharedList.size()); //detail详情 ServiceReimbursementdetailShared serviceReimbursementdetailShared = new ServiceReimbursementdetailShared(); serviceReimbursementdetailShared.setRbid(serviceReimbursementSharedList.get(0).getId()); List serviceReimbursementdetailShareds = detailSharedService.queryList(serviceReimbursementdetailShared); //payee详情 ServiceReimbursementpayeeShared serviceReimbursementpayeeShared = new ServiceReimbursementpayeeShared(); serviceReimbursementpayeeShared.setRbid(serviceReimbursementSharedList.get(0).getId()); List serviceReimbursementpayeeShareds = payeeSharedService.queryList(serviceReimbursementpayeeShared); // 数据的封装 Map map = new HashMap<>(); Map data = new HashMap<>(); //应用类型 固定值 map.put("appName", "collaboration"); // 主表字段数据 Map data2 = new HashMap<>(); data2.put("formmain_1209", formmain_1209(serviceReimbursementSharedList.get(0))); // 明细表字段数据,与附件的处理 Map>> map1 = formson_1210(serviceReimbursementdetailShareds); data2.put("formson_1210", map1.get("formson_1210")); data2.put("thirdAttachments", map1.get("annexfilesList")); data2.put("formson_1211", formson_1211(serviceReimbursementpayeeShareds)); data.put("data", data2); //模板编号,由致远方提供,该参数决定发起协同系统中哪个流程 data.put("templateCode", "001"); //是否为待发:0:新建-发送;1:新建-保存待发 data.put("draft", "0"); //协同标题区附件,Long型List,值为附件的Id。Id是附件接口响应结果中fileUrl字段的值 data.put("attachments", null); //协同公文的id 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 (serviceReimbursement.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>> formson_1210(List serviceReimbursementdetailSharedList) { Map>> allMap = new HashMap<>(); List> list = new ArrayList<>(); List> annexfilesList = new ArrayList<>(); for (ServiceReimbursementdetailShared reimbursementdetailShared : serviceReimbursementdetailSharedList) { Map map = new HashMap<>(); map.put("交通工具", reimbursementdetailShared.getTraffictype()); map.put("交通费", reimbursementdetailShared.getTrafficexpense()); map.put("市内交通", reimbursementdetailShared.getTraffictype2()); map.put("住宿费", reimbursementdetailShared.getHotelexpense()); map.put("杂费", reimbursementdetailShared.getOtherexpense()); map.put("伙食费报销", reimbursementdetailShared.getFoodexpenses()); map.put("伙食费补助", reimbursementdetailShared.getFoodallowance()); map.put("其他费用", reimbursementdetailShared.getOtherfeeamount()); map.put("其他费用说明", reimbursementdetailShared.getOtherfeedesc()); map.put("金额合计", null); map.put("出差时间起", reimbursementdetailShared.getStarttime()); map.put("出发地点", reimbursementdetailShared.getDeparture()); map.put("出差时间止", reimbursementdetailShared.getEndtime()); map.put("出差目的地", reimbursementdetailShared.getDestination()); map.put("天数", reimbursementdetailShared.getDays()); map.put("实际报销金额", null); map.put("财务备注", reimbursementdetailShared.getRemark()); map.put("id", reimbursementdetailShared.getRdid()); map.put("出差人", reimbursementdetailShared.getPersonname()); map.put("回交通工具", null); map.put("人员类别", reimbursementdetailShared.getPersontype()); map.put("住宿费标准", null); map.put("住宿费标准合计", reimbursementdetailShared.getHotelexpense()); String fpuuid = IdUtils.simpleUUID(); map.put("发票附件", fpuuid); map.put("票据识别", null); map.put("识别人", null); map.put("序号1", null); String qtuuid = IdUtils.simpleUUID(); map.put("其他附件", qtuuid); map.put("个人票夹用户", null); map.put("识别票据", null); list.add(map); //附件处理 String annexfiles = reimbursementdetailShared.getAnnexfiles(); String invoicefiles = reimbursementdetailShared.getInvoicefiles(); int i = 0; if (StringUtils.isNotEmpty(annexfiles)) { List parseArray = JSON.parseArray(annexfiles, RbDetailFile.class); for (RbDetailFile rbDetailFile : parseArray) { Map thirdAttachments = new HashMap<>(); thirdAttachments.put("subReference", qtuuid); thirdAttachments.put("fileUrl", rbDetailFile.getFileid()); thirdAttachments.put("sort", i++); annexfilesList.add(thirdAttachments); } } if (StringUtils.isNotEmpty(invoicefiles)) { List parseArray = JSON.parseArray(invoicefiles, RbDetailFile.class); for (RbDetailFile rbDetailFile : parseArray) { Map thirdAttachments = new HashMap<>(); thirdAttachments.put("subReference", fpuuid); thirdAttachments.put("fileUrl", rbDetailFile.getFileid()); thirdAttachments.put("sort", i++); annexfilesList.add(thirdAttachments); } } } allMap.put("formson_1210", list); allMap.put("annexfilesList", annexfilesList); return allMap; } private List> formson_1211(List serviceReimbursementpayeeShareds) { Map>> allMap = new HashMap<>(); List> list = new ArrayList<>(); for (ServiceReimbursementpayeeShared serviceReimbursementpayeeShared : serviceReimbursementpayeeShareds) { Map map = new HashMap<>(); map.put("收款人", serviceReimbursementpayeeShared.getPersonname()); map.put("卡号", serviceReimbursementpayeeShared.getBankcardno()); map.put("开户银行", serviceReimbursementpayeeShared.getBankname()); map.put("打款金额", serviceReimbursementpayeeShared.getAmount()); map.put("人员类别打款", serviceReimbursementpayeeShared.getPersontype()); map.put("核算项目", null); map.put("预算项目", null); map.put("借方摘要", null); map.put("贷方摘要", null); list.add(map); } return list; } private Map formmain_1209(ServiceReimbursementShared serviceReimbursementShared) { Map formmain_1209 = new HashMap<>(); formmain_1209.put("报销日期", serviceReimbursementShared.getApplyTime()); formmain_1209.put("出差人-作废", null); formmain_1209.put("报销人", serviceReimbursementShared.getUsername()); formmain_1209.put("区域组长", serviceReimbursementShared.getManagername()); formmain_1209.put("出差事由", serviceReimbursementShared.getReason()); formmain_1209.put("天数合计", null); formmain_1209.put("交通费合计", serviceReimbursementShared.getTotalamount()); formmain_1209.put("市内交通合计", null); formmain_1209.put("住宿费合计", null); formmain_1209.put("杂费合计", null); formmain_1209.put("伙食费报销合计", null); formmain_1209.put("伙食费补助合计", null); formmain_1209.put("其他费用合计", null); formmain_1209.put("领款金额大写", serviceReimbursementShared.getBigstrmoney()); formmain_1209.put("领款金额", serviceReimbursementShared.getTotalamount()); formmain_1209.put("财务审批", serviceReimbursementShared.getFinancechecher()); formmain_1209.put("财务部负责人审批", serviceReimbursementShared.getFinancedirector()); formmain_1209.put("办公室主任审批", serviceReimbursementShared.getOfficedirector()); formmain_1209.put("备注", serviceReimbursementShared.getRemark()); formmain_1209.put("业务副院长审批", serviceReimbursementShared.getBusvicepresident()); formmain_1209.put("财务副院长审批", serviceReimbursementShared.getFinvicepresident()); formmain_1209.put("中心负责人审批", serviceReimbursementShared.getOpochecker()); formmain_1209.put("开户银行-作废", null); formmain_1209.put("卡号-作废", null); formmain_1209.put("支付方式", serviceReimbursementShared.getZffs()); formmain_1209.put("组长", null); formmain_1209.put("审批人员", null); formmain_1209.put("支付日期", serviceReimbursementShared.getRiqi()); formmain_1209.put("上传附件", null); formmain_1209.put("打款合计", null); formmain_1209.put("发票识别-作废", null); formmain_1209.put("识别人-作废", null); formmain_1209.put("财务审批签字", null); formmain_1209.put("财务部负责人审批签字", serviceReimbursementShared.getFinancedirector()); formmain_1209.put("表单编号1", null); formmain_1209.put("CIF账套配置1", null); formmain_1209.put("院区", null); formmain_1209.put("业务区域", null); formmain_1209.put("贷方科目", null); formmain_1209.put("编码", null); formmain_1209.put("是否支付", null); formmain_1209.put("凭证号", null); formmain_1209.put("银行回单", null); formmain_1209.put("OFD", null); formmain_1209.put("表单附件", null); formmain_1209.put("10204", null); formmain_1209.put("现金流量分析", null); formmain_1209.put("捐献者", serviceReimbursementShared.getDonorname()); formmain_1209.put("凭证类别", null); formmain_1209.put("合计", null); formmain_1209.put("实际合计", null); formmain_1209.put("伙食补助合计", null); formmain_1209.put("历史审批记录", null); formmain_1209.put("表单编号", serviceReimbursementShared.getBh()); formmain_1209.put("历史审批巨鹿查询", null); return formmain_1209; } public int uploadOAFileAndUpdateDb(ServiceReimbursementdetailShared remShare) throws Exception { log.info("uploadOAFileAndUpdate方法的入参:{}", remShare); System.out.println("uploadOAFileAndUpdate方法的入参:" + 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 map = new HashMap(); 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()); JSONObject json1 = JSONObject.parseObject(strRes); strRes = json1.get("id").toString(); log.info("strRes的值 : {}", strRes); String filePath = RuoYiConfig.getUploadPath(); String strFUrl = "http://129.88.242.39:8899/seeyon/rest/attachment?token=" + strRes; List parseArray2 = new ArrayList<>(); List invoicefilesList = new ArrayList<>(); //普通文件上传 List parseArray = JSON.parseArray(remShare.getAnnexfiles(), RbDetailFile.class); //发票文件上传 List invoicefilesArray = JSON.parseArray(remShare.getInvoicefiles(), RbDetailFile.class); //普通附件 uploadFile(filePath, strFUrl, parseArray2, parseArray, remShare, "1"); //发票附件 uploadFile(filePath, strFUrl, invoicefilesList, invoicefilesArray, remShare, "2"); return 0; } private Integer uploadFile(String filePath, String strFUrl, List parseArray2, List parseArray, ServiceReimbursementdetailShared remShare, String flag) throws Exception { if (!CollectionUtils.isEmpty(parseArray)) { for (int i = 0; i < parseArray.size(); i++) { RbDetailFile rbDetailFile = parseArray.get(i); log.info("filePath的修改:{}", filePath); String url = rbDetailFile.getUrl(); //file用的是绝对位置 String fileName = url.substring(url.indexOf("/profile/upload") + "/profile/upload".length()); String strFile = rbDetailFile.getUrl().replace(filePath, "/profile/upload"); File fileUpload = new File(filePath + fileName); log.info("请求第三方的入参strFile : {}, strFUrl : {}", strFile, filePath); String struploadResult = HttpClientKit.sendPostWithFile(fileUpload, strFUrl); log.info("第三方传回的数据: {}", struploadResult); if (StringUtils.isEmpty(struploadResult)) { log.info("HttpClientKit.sendPostWithFile 请求为空了 struploadResult:{}, strFUrl:{} ", struploadResult, strFUrl); return 0; } //获取fileid JSONObject jsonR = JSONObject.parseObject(struploadResult); JSONArray jsonArr = jsonR.getJSONArray("atts"); log.info("第三方传回的数据获取的atts : {}", jsonArr); for (int j = 0; j < jsonArr.size(); j++) { JSONObject jsonRet = jsonArr.getJSONObject(j); rbDetailFile.setFileid(jsonRet.get("fileUrl").toString()); } parseArray2.add(rbDetailFile); } } if (flag.equals("1")) { //如果flag为1,则是普通 remShare.setAnnexfiles(JSON.toJSONString(parseArray2)); } else if (flag.equals("2")) { //如果flag为2,则是发票 remShare.setInvoicefiles(JSON.toJSONString(parseArray2)); } log.info("ServiceReimbursementdetailShared 是否加上了fileid : {}", remShare); 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 map = new HashMap(); // 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 strMutfileUrl = remShare.getAnnexfiles(); // 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(); // } // // // /*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); // log.info("remShare的数据为 : {}:", remShare.toString()); // boolean bRet = sharedService.updateById(remShare); // if (!bRet) return -1; // // return 0; // } }