package com.ruoyi.project.service.impl; import java.io.File; import java.util.HashMap; import java.util.List; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.utils.HttpClientKit; import com.ruoyi.common.utils.bean.DtoConversionUtils; import com.ruoyi.project.domain.*; import com.ruoyi.project.domain.dto.ServiceReimbursementDto; import com.ruoyi.project.domain.vo.SpFinancialExpensesReimbursementOut; import com.ruoyi.project.mapper.*; import com.ruoyi.project.service.IServiceReimbursementSharedService; import com.ruoyi.project.service.IServiceReimbursementdetailSharedService; import com.ruoyi.project.service.IServiceReimbursementpayeeSharedService; import lombok.extern.slf4j.Slf4j; 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 java.util.Map; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.project.service.IServiceReimbursementService; 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; /** * 查询报销申请列表 * * @param serviceReimbursement 报销申请 * @return 报销申请 */ @Override public List queryList(ServiceReimbursement serviceReimbursement) { LambdaQueryWrapper wrappers = Wrappers.lambdaQuery(); 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 (StringUtils.isNotBlank(serviceReimbursement.getUploadflag())) { wrappers.eq(ServiceReimbursement::getUploadflag, serviceReimbursement.getUploadflag()); } /* 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) { return serviceReimbursementdetailMapper.getRBDetailList(id); } @Override @Transactional public Boolean addSharedData(Long id) { ServiceReimbursement serviceReimbursement = serviceReimbursementMapper.selectById(id); Map columnMap = new HashMap<>(); columnMap.put("rbid", id); //获取详情数据 List details = serviceReimbursementdetailMapper.selectByMap(columnMap); //获取支付数据 List serviceReimbursementpayees = reimbursementpayeeMapper.selectByMap(columnMap); //数据组装 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文件 uploadOAFileAndUpdateDb(serviceReimbursementShared); //将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); } detailSharedService.saveBatch(serviceReimbursementdetailShareds); //将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); } payeeSharedService.saveBatch(serviceReimbursementpayeeShareds); 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) { return serviceReimbursementMapper.getListBypower(PAUSERNO, PAFUNDTYPE, PAAPPLICANT, PAAPPLICATIONBEGTIME, PAAPPLICATIONENDTIME, PADEPARTMENT, CHECKFLAG, APPLYTYPE); } @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); } 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 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; } }