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<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;
|
|
@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<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文件
|
//将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<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);
|
}
|
|
@Override
|
public Map<String, String> checkFund(LoginUser loginUser, CheckFundVO checkFundVO) {
|
Map<String, String> 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<ServiceFundflowrule> 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<Integer> 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<ConcurrentHashMap<String, Object>> 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<Integer> 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<ServiceReimbursementShared> 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<ServiceReimbursementdetailShared> serviceReimbursementdetailShareds = detailSharedService.queryList(serviceReimbursementdetailShared);
|
|
//payee详情
|
ServiceReimbursementpayeeShared serviceReimbursementpayeeShared = new ServiceReimbursementpayeeShared();
|
serviceReimbursementpayeeShared.setRbid(serviceReimbursementSharedList.get(0).getId());
|
List<ServiceReimbursementpayeeShared> serviceReimbursementpayeeShareds = payeeSharedService.queryList(serviceReimbursementpayeeShared);
|
|
|
// 数据的封装
|
Map<String, Object> map = new HashMap<>();
|
Map<String, Object> data = new HashMap<>();
|
//应用类型 固定值
|
map.put("appName", "collaboration");
|
|
// 主表字段数据
|
Map<String, Object> data2 = new HashMap<>();
|
data2.put("formmain_1209", formmain_1209(serviceReimbursementSharedList.get(0)));
|
|
// 明细表字段数据,与附件的处理
|
Map<String, List<Map<String, Object>>> 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<String, List<Map<String, Object>>> formson_1210(List<ServiceReimbursementdetailShared> serviceReimbursementdetailSharedList) {
|
Map<String, List<Map<String, Object>>> allMap = new HashMap<>();
|
|
List<Map<String, Object>> list = new ArrayList<>();
|
List<Map<String, Object>> annexfilesList = new ArrayList<>();
|
for (ServiceReimbursementdetailShared reimbursementdetailShared : serviceReimbursementdetailSharedList) {
|
Map<String, Object> 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<RbDetailFile> parseArray = JSON.parseArray(annexfiles, RbDetailFile.class);
|
for (RbDetailFile rbDetailFile : parseArray) {
|
Map<String, Object> thirdAttachments = new HashMap<>();
|
thirdAttachments.put("subReference", qtuuid);
|
thirdAttachments.put("fileUrl", rbDetailFile.getFileid());
|
thirdAttachments.put("sort", i++);
|
annexfilesList.add(thirdAttachments);
|
}
|
}
|
|
if (StringUtils.isNotEmpty(invoicefiles)) {
|
List<RbDetailFile> parseArray = JSON.parseArray(invoicefiles, RbDetailFile.class);
|
for (RbDetailFile rbDetailFile : parseArray) {
|
Map<String, Object> 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<Map<String, Object>> formson_1211(List<ServiceReimbursementpayeeShared> serviceReimbursementpayeeShareds) {
|
Map<String, List<Map<String, Object>>> allMap = new HashMap<>();
|
|
List<Map<String, Object>> list = new ArrayList<>();
|
for (ServiceReimbursementpayeeShared serviceReimbursementpayeeShared : serviceReimbursementpayeeShareds) {
|
Map<String, Object> 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<String, Object> formmain_1209(ServiceReimbursementShared serviceReimbursementShared) {
|
Map<String, Object> 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<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;
|
// }
|
|
|
}
|