package com.ruoyi.project.service.impl;
|
|
import java.io.File;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
|
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.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.apache.commons.collections4.CollectionUtils;
|
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 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<ServiceReimbursementMapper, ServiceReimbursement> 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<ServiceReimbursement> queryList(ServiceReimbursement serviceReimbursement) {
|
LambdaQueryWrapper<ServiceReimbursement> 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<ServiceReimbursementdetailVO> getRBDetailList(Long id) {
|
log.info("getRBDetailList的入参:{}", id);
|
List<ServiceReimbursementdetailVO> serviceReimbursementdetailVOS = new ArrayList<>();
|
List<ServiceReimbursementdetail> 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<ServiceReimbursementShared> serviceReimbursementShareds = sharedService.queryList(reimbursementShared1);
|
log.info("serviceReimbursementShareds的查询结果 :{}", serviceReimbursementShareds.size());
|
if (!CollectionUtils.isEmpty(serviceReimbursementShareds)) {
|
return true;
|
}
|
|
//如果没有插入,则走下面的流程
|
ServiceReimbursement serviceReimbursement = serviceReimbursementMapper.selectById(id);
|
Map<String, Object> columnMap = new HashMap<>();
|
columnMap.put("rbid", id);
|
//获取详情数据
|
List<ServiceReimbursementdetail> details = serviceReimbursementdetailMapper.selectByMap(columnMap);
|
log.info("serviceReimbursementdetailMapper.selectByMap方法的返参参 :{}", CollectionUtils.isEmpty(details) ? null : details.size());
|
//获取支付数据
|
List<ServiceReimbursementpayee> 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<ServiceReimbursementdetailShared> serviceReimbursementdetailShareds = DtoConversionUtils.sourceToTarget(details, ServiceReimbursementdetailShared.class);
|
List<ServiceReimbursementpayeeShared> 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);
|
//上传OA文件
|
log.info("上传OA文件方法的入参:{}", serviceReimbursementdetailShareds.get(i));
|
try {
|
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<ServiceReimbursement> selectSearchList(ServiceReimbursementDto serviceReimbursementdto) {
|
return serviceReimbursementMapper.selectSearchList(serviceReimbursementdto);
|
}
|
|
@Override
|
public List<SpFinancialExpensesReimbursementOut> 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<ServiceReimbursement> getInfoByInfoId(Long infoid) {
|
return serviceReimbursementMapper.getInfoByInfoId(infoid);
|
}
|
|
@Override
|
public List<ServiceReimbursement> getInfoByInfoIdRelatives(Long infoid) {
|
return serviceReimbursementMapper.getInfoByInfoIdRelatives(infoid);
|
}
|
|
@Override
|
public List<ServiceReimbursementEo> getRDInfoByItem(ServiceReimbursementEo serviceReimbursementEo) {
|
return serviceReimbursementMapper.getRDInfoByItem(serviceReimbursementEo);
|
}
|
|
|
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<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());
|
|
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<RbDetailFile> parseArray2 = new ArrayList<>();
|
List<RbDetailFile> invoicefilesList = new ArrayList<>();
|
|
//普通文件上传
|
List<RbDetailFile> parseArray = JSON.parseArray(remShare.getAnnexfiles(), RbDetailFile.class);
|
//发票文件上传
|
List<RbDetailFile> 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<RbDetailFile> parseArray2, List<RbDetailFile> 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<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 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;
|
// }
|
|
|
}
|