From a19fd2396876e21fdc2ba2f4d5e60755f116132d Mon Sep 17 00:00:00 2001
From: sinake <sinake1@qq.com>
Date: 星期二, 13 十月 2026 17:00:41 +0800
Subject: [PATCH] 发送钉钉修改
---
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceReimbursementServiceImpl.java | 308 +++++++++++++++++++++++++++++++++++++--------------
1 files changed, 223 insertions(+), 85 deletions(-)
diff --git a/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceReimbursementServiceImpl.java b/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceReimbursementServiceImpl.java
index 32a4c69..3e34532 100644
--- a/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceReimbursementServiceImpl.java
+++ b/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceReimbursementServiceImpl.java
@@ -17,7 +17,9 @@
import com.ruoyi.common.utils.HttpClientKit;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.DtoConversionUtils;
-import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.project.common.FundNotifyMessageBuilder;
+import com.ruoyi.project.common.IdGeneratorUtils;
import com.ruoyi.project.domain.*;
import com.ruoyi.project.domain.dto.ServiceReimbursementDto;
import com.ruoyi.project.domain.vo.CheckFundVO;
@@ -25,7 +27,9 @@
import com.ruoyi.project.domain.vo.SpFinancialExpensesReimbursementOut;
import com.ruoyi.project.mapper.*;
import com.ruoyi.project.service.*;
+import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.mapper.SysUserRoleMapper;
+import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysPostService;
import com.ruoyi.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
@@ -78,6 +82,12 @@
IServiceReimbursementpayeeSharedService payeeSharedService;
@Autowired
+ IServiceReimbursementpayeeService payeeService;
+
+ @Autowired
+ SysUserMapper sysUserMapper;
+
+ @Autowired
IServiceFundflowruleService serviceFundflowruleService;
@Autowired
@@ -110,6 +120,35 @@
@Value("${spring.profiles.active}")
private String active;
+ @Autowired
+ private ISysConfigService sysConfigService;
+
+ /**
+ * 瀹℃壒鍗曟槸鍚︿笂浼犲尰闄㈠崗鍙嬶紙鑷磋繙锛夌郴缁燂細0=涓嶄笂浼狅紙娴嬭瘯鐜锛夛紝1=涓婁紶锛堟寮忕幆澧冿級銆�
+ *
+ * <p>2026-10-09 鏂板锛氬師鏉ョ敤 {@code spring.profiles.active == druid} 鏉ュ垽鏂槸鍚︽帹閫侊紝
+ * 瀵艰嚧娴嬭瘯鐜涓庢寮忕幆澧冩棤娉曢�氳繃鍙傛暟鍖哄垎銆傛敼涓虹郴缁熷弬鏁版帶鍒讹紝鐜鍚勮嚜閰嶇疆銆�
+ */
+ private static final String CFG_UPLOAD_OA = "sys.approval.upload.oa";
+
+ /** 鍙傛暟缂虹渷鍊硷細涓婁紶锛堜繚鎸佹寮忕幆澧冨師鏈夎涓猴級 */
+ private static final boolean DEFAULT_UPLOAD_OA = true;
+
+ /** 瀹℃壒鍗曟槸鍚﹂渶瑕佷笂浼犲尰闄㈠崗鍙嬶紙鑷磋繙锛夌郴缁� */
+ private boolean isUploadOaEnabled() {
+ String value = null;
+ try {
+ value = sysConfigService.selectConfigByKey(CFG_UPLOAD_OA);
+ } catch (Exception e) {
+ log.warn("璇诲彇鍙傛暟 {} 澶辫触锛屾寜榛樿鍊� {} 澶勭悊", CFG_UPLOAD_OA, DEFAULT_UPLOAD_OA, e);
+ }
+ if (value == null || value.trim().isEmpty()) {
+ return DEFAULT_UPLOAD_OA;
+ }
+ String v = value.trim();
+ return "1".equals(v) || "true".equalsIgnoreCase(v) || "y".equalsIgnoreCase(v) || "on".equalsIgnoreCase(v);
+ }
+
/**
* 鏌ヨ鎶ラ攢鐢宠鍒楄〃
@@ -129,7 +168,7 @@
if (serviceReimbursement.getCreateTime() != null) {
wrappers.eq(ServiceReimbursement::getCreateTime, serviceReimbursement.getCreateTime());
}
- if (StringUtils.isNotBlank(serviceReimbursement.getUsername())) {
+ if (StringUtils.isNotBlank(serviceReimbursement.getUsername()) && !serviceReimbursement.getUsername().equals("shenji")) {
wrappers.like(ServiceReimbursement::getUsername, serviceReimbursement.getUsername());
}
if (StringUtils.isNotBlank(serviceReimbursement.getTravelers())) {
@@ -158,6 +197,7 @@
wrappers.between(ServiceReimbursement::getCreateTime ,serviceReimbursement.getStarttime(),serviceReimbursement.getEndtime());
}*/
+ wrappers.orderByDesc(ServiceReimbursement::getApplyTime);
return this.list(wrappers);
}
@@ -210,7 +250,17 @@
List<ServiceReimbursementShared> serviceReimbursementShareds = sharedService.queryList(reimbursementShared1);
log.info("serviceReimbursementShareds鐨勬煡璇㈢粨鏋� :{}", serviceReimbursementShareds.size());
if (!CollectionUtils.isEmpty(serviceReimbursementShareds)) {
- return true;
+ //濡傛灉涓嶄负绌猴紝鍒欏皢鍒嗕韩琛ㄩ噷鐨勬暟鎹垹闄わ紙鍥犱负鎺ヤ笅鍘伙紝鑰佹暟鎹笂浼犵殑闄勪欢锛屽彲鑳戒笉鏄兂瑕佺殑浜嗭紝杩樼敤鑰侀檮浠讹紝鏄湁闂鐨勶紱鎵�浠ラ渶瑕佸皢鑰佺殑share鏁版嵁鍒犻櫎锛岀劧鍚庡啀鏂板锛屼笂浼犳柊闄勪欢锛�
+ for (ServiceReimbursementShared serviceReimbursementShared : serviceReimbursementShareds) {
+ sharedService.removeById(serviceReimbursementShared.getId());
+
+ ServiceReimbursementdetailShared srds = new ServiceReimbursementdetailShared();
+ srds.setRbid(serviceReimbursementShared.getId());
+ List<ServiceReimbursementdetailShared> serviceReimbursementdetailShareds = detailSharedService.queryList(srds);
+ for (ServiceReimbursementdetailShared serviceReimbursementdetailShared : serviceReimbursementdetailShareds) {
+ detailSharedService.removeById(serviceReimbursementdetailShared.getId());
+ }
+ }
}
//濡傛灉娌℃湁鎻掑叆锛屽垯璧颁笅闈㈢殑娴佺▼
@@ -234,21 +284,21 @@
// //涓婁紶OA鏂囦欢
//灏唖erviceReimbursementdetail琛ㄩ噷鐨刬d璧嬪�肩粰Rdid; 灏唖erviceReimbursementShared閲岀殑ID璧嬪�肩粰RBID,骞跺皢serviceReimbursementdetailShared琛ㄩ噷鐨刬d缃┖锛岀敱鏁版嵁搴撻噸鏂扮敓鎴�
for (int i = 0; i < details.size(); i++) {
- serviceReimbursementdetailShareds.get(i).setRdid(serviceReimbursementdetailShareds.get(i).getId());
+ serviceReimbursementdetailShareds.get(i).setRdid(details.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));
+ if (isUploadOaEnabled()) uploadOAFileAndUpdateDb(serviceReimbursementdetailShareds.get(i));
} catch (Exception e) {
- log.error("Exception涓璻eimShare鐨勫叆鍙俰d涓猴細{}", serviceReimbursementShared.getId());
+ log.error("宸梾闄勪欢涓婁紶鍖婚櫌鍗忓弸绯荤粺澶辫触锛氬垎浜玦d={}锛屾槑缁�={}锛堟湰娆℃姤閿�鍗曚笂浼犳暣浣撳け璐ワ紝瀹℃壒涓嶇敓鏁堬級",
+ serviceReimbursementShared.getId(), serviceReimbursementdetailShareds.get(i), e);
if (serviceReimbursementShared.getId() != null) {
Boolean aBoolean = sharedService.delResharedInfoById(serviceReimbursementShared.getId());
- log.error("鏂囦欢涓婁紶澶辫触锛屽皢鍒嗕韩琛ㄦ暟鎹洖婊氾細{}", aBoolean);
+ log.error("宸插洖婊氬垎浜〃鏁版嵁锛歿}", aBoolean);
}
- e.getMessage();
return false;
}
@@ -257,7 +307,16 @@
// detailSharedService.saveBatch(serviceReimbursementdetailShareds);
for (ServiceReimbursementdetailShared serviceReimbursementdetailShared : serviceReimbursementdetailShareds) {
if (ObjectUtils.isNotEmpty(serviceReimbursementdetailShared)) {
+ log.info("鏇存柊serviceReimbursementdetail琛ㄩ噷鐨勫�间负:{}", serviceReimbursementdetailShared);
detailSharedService.save(serviceReimbursementdetailShared);
+
+ log.info("鏇存柊serviceReimbursementdetail琛ㄩ噷鐨勯檮浠跺瓧娈�:{},{}", serviceReimbursementdetailShared.getAnnexfiles(), serviceReimbursementdetailShared.getInvoicefiles());
+ //鏇存柊serviceReimbursementdetail琛ㄩ噷鐨勯檮浠跺瓧娈�
+ ServiceReimbursementdetail serviceReimbursementdetail = new ServiceReimbursementdetail();
+ serviceReimbursementdetail.setId(serviceReimbursementdetailShared.getRdid());
+ serviceReimbursementdetail.setAnnexfiles(serviceReimbursementdetailShared.getAnnexfiles());
+ serviceReimbursementdetail.setInvoicefiles(serviceReimbursementdetailShared.getInvoicefiles());
+ serviceReimbursementdetailMapper.updateById(serviceReimbursementdetail);
} else {
log.info("serviceReimbursementdetailShared涓虹┖浜�");
}
@@ -306,6 +365,7 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public Map<String, String> checkFund(LoginUser loginUser, CheckFundVO checkFundVO) {
Map<String, String> allMap = new HashMap<>();
@@ -370,8 +430,9 @@
if (newSwitch == 1) {
aBoolean1 = sendData(serviceReimbursement);
if (!aBoolean1) {
- allMap.put("500", "鍙戦�佸け璐�");
- return allMap;
+ // 鎺ㄩ�佸尰闄㈠崗鍙嬬郴缁熷け璐ワ細鏁翠釜瀹℃壒涓嶇敓鏁堬紙浜嬪姟鍥炴粴锛夛紝鍏佽涓嬫閲嶆柊瀹℃壒
+ log.error("宸梾瀹℃壒鍗曚笂浼犲尰闄㈠崗鍙嬬郴缁熷け璐ワ紝瀹℃壒涓嶇敓鏁堬紝id={}锛岃閲嶆柊瀹℃壒", serviceReimbursement.getId());
+ throw new ServiceException("鍖婚櫌鍗忓弸绯荤粺鎺ユ敹澶辫触锛屾湰娆″鎵规湭鐢熸晥锛岃绋嶅悗閲嶆柊瀹℃壒");
}
}
//淇濆瓨瀹℃壒娴佺▼琛�
@@ -400,7 +461,7 @@
serviceReimbursement.setFinancechecher(user.getNickName());
}
- } else {
+ } //else {
CheckFlag = 2;
if (CheckFlag == 2) {
@@ -416,19 +477,27 @@
}
}
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);
- }
+ //瀹℃壒鏈�氳繃锛氬崟鎹俊鎭� + 鍑哄樊淇℃伅 + 瀹℃壒浜�/瀹℃壒鏃堕棿/鎰忚锛堟剰瑙� = "瀹℃壒鏈�氳繃銆�" + 椹冲洖鎰忚锛�
+ List<ConcurrentHashMap<String, Object>> contentList = FundNotifyMessageBuilder.newRows();
+ FundNotifyMessageBuilder.addBillInfo(contentList, "0", serviceReimbursement.getUsername(),
+ serviceReimbursement.getAmountrequested(), null,
+ FundNotifyMessageBuilder.billNo(serviceReimbursement.getBh(),
+ serviceReimbursement.getId()));
+ FundNotifyMessageBuilder.addTravelInfo(contentList, serviceReimbursement.getTravelers(),
+ serviceReimbursement.getReason());
+ FundNotifyMessageBuilder.addAuditResult(contentList, loginUser.getUser().getNickName(), new Date(),
+ FundNotifyMessageBuilder.opinion(FundNotifyMessageBuilder.CONCLUSION_REJECT,
+ checkFundVO.getFlowcontent()));
+ try {
+ DingTalkReqVo dingTalkReqVo = new DingTalkReqVo();
+ dingTalkReqVo.setTitle(FundNotifyMessageBuilder.TITLE);
+ dingTalkReqVo.setNumber(sysUser.getPhonenumber());
+ dingTalkReqVo.setContents(contentList);
+ dingTalkService.sendNotification(dingTalkReqVo);
+ } catch (Exception e) {
+ log.error("宸梾---瀹℃壒鏈�氳繃閽夐拤閫氱煡澶辫触锛宨d={}", serviceReimbursement.getId(), e);
+ }
+ //}
serviceReimbursement.setRecordstatus(RecordStatus);
serviceReimbursement.setFlowlevel(Long.valueOf(FlowLevel.toString()));
@@ -467,17 +536,33 @@
}
}
- //053瀹℃壒閫氳繃涔嬪悗锛屽氨闇�瑕佹妸鈥滃姙鍏涓讳换鈥濈殑鍚嶅瓧濉笂
- if (checkFundVO.getFlowconclusion() == 1 && user.getUserName().equals("053")) {
- serviceReimbursement.setOfficedirector(user.getNickName());
+ //鍔炲叕瀹や富浠诲鎵归�氳繃涔嬪悗锛屽氨闇�瑕佹妸鈥滃姙鍏涓讳换鈥濈殑鍚嶅瓧濉笂
+ //SysUser sysUser = null;
+ if (StringUtils.isNotEmpty(user.getUserName())) {
+ sysUser = sysUserMapper.selectUserByUserName(user.getUserName());
+ log.info("宸梾sysUsers杩斿洖鐨勫�间负:{}", sysUser);
+ }
+
+ // 2026-10-09锛氭帹閫佹潯浠剁敱"褰撳墠瀹℃牳浜烘湁 officedirector 瑙掕壊"鏀逛负"鏈瀹℃壒鍚庡埌杈炬渶鍚庝竴绾�"銆�
+ // 鍘熷啓娉曞湪"鏈�鍚庝竴绾у鏍镐汉娌℃湁璇ヨ鑹�"鏃舵案杩滀笉浼氭帹閫侊紝鑰�"闈炴渶鍚庝竴绾х殑 officedirector"浼氭彁鍓嶆帹閫併��
+ boolean uploadAtLastLevel = checkFundVO.getFlowconclusion() == 1
+ && totalLevel != null && totalLevel != 0 && totalLevel == OriginalFlowLevel + 1;
+ if (uploadAtLastLevel) {
+ // 浠嶅彧鍦ㄨ瑙掕壊瀹℃壒鏃惰褰曞姙鍏涓讳换锛屼繚鎸佸瓧娈佃涔変笉鍙�
+ if (Objects.nonNull(sysUser) && sysUser.getRoles() != null
+ && sysUser.getRoles().stream().anyMatch(role -> "officedirector".equals(role.getRoleKey()))) {
+ serviceReimbursement.setOfficedirector(user.getNickName());
+ }
serviceReimbursement.setUploadStates(1);
Boolean aBoolean1 = null;
if (newSwitch == 1) {
+ log.info("宸梾newSwitch杩斿洖鐨勫�间负:{}", newSwitch);
aBoolean1 = sendData(serviceReimbursement);
if (!aBoolean1) {
- allMap.put("500", "鍙戦�佸け璐�");
- return allMap;
+ // 鎺ㄩ�佸尰闄㈠崗鍙嬬郴缁熷け璐ワ細鏁翠釜瀹℃壒涓嶇敓鏁堬紙浜嬪姟鍥炴粴锛夛紝鍏佽涓嬫閲嶆柊瀹℃壒
+ log.error("宸梾瀹℃壒鍗曚笂浼犲尰闄㈠崗鍙嬬郴缁熷け璐ワ紝瀹℃壒涓嶇敓鏁堬紝id={}锛岃閲嶆柊瀹℃壒", serviceReimbursement.getId());
+ throw new ServiceException("鍖婚櫌鍗忓弸绯荤粺鎺ユ敹澶辫触锛屾湰娆″鎵规湭鐢熸晥锛岃绋嶅悗閲嶆柊瀹℃壒");
}
}
}
@@ -546,23 +631,51 @@
return "鏈壘鍒板鎵硅褰�";
}
+ /**
+ * 瀹℃壒鍗曚笂浼犲尰闄㈠崗鍙嬶紙鑷磋繙锛夌郴缁熴��
+ *
+ * <p>2026-10-09锛氬灞傚寘涓�灞傚厹搴曪紝淇濊瘉**浠讳綍寮傚父閮戒笉浼氬悜澶栨姏**锛堝師鏉� strRes 涓� null 鏃�
+ * 浼氬湪 parseObject 鍚庡彇 code 瑙﹀彂 NPE锛屾妸鏁翠釜瀹℃壒璇锋眰鎵撴垚 500锛夈��
+ * 杩斿洖 false 琛ㄧず鎺ㄩ�佸け璐ワ紝璋冪敤鏂规寜"瀹℃壒涓嶇敓鏁堛�佸厑璁镐笅娆¢噸鏂板鎵�"澶勭悊銆�
+ */
public Boolean sendData(ServiceReimbursement serviceReimbursement) {
- // fund鍜宖unddetail鐨勬暟鎹幏鍙�
- addSharedData(serviceReimbursement.getId());
- List<ServiceReimbursementShared> serviceReimbursementSharedList = sharedService.getRemShareInfoByRemId(serviceReimbursement.getId());
- if (org.springframework.util.CollectionUtils.isEmpty(serviceReimbursementSharedList)) return false;
+ if (!isUploadOaEnabled()) {
+ // 涓婁紶寮�鍏冲叧闂紙濡傛祴璇曠幆澧冿級锛氳烦杩囦笂浼犲苟瑙嗕负鎴愬姛锛岀粷涓嶈兘鍥犳闃绘柇瀹℃壒
+ log.info("瀹℃壒鍗曚笂浼犲尰闄㈠崗鍙嬬郴缁熷凡鍏抽棴锛坰ys.approval.upload.oa != 1锛夛紝璺宠繃涓婁紶骞惰涓烘垚鍔燂紝id={}",
+ serviceReimbursement == null ? null : serviceReimbursement.getId());
+ return true;
+ }
+ try {
+ return doSendData(serviceReimbursement);
+ } catch (Throwable t) {
+ log.error("宸梾瀹℃壒鍗曚笂浼犲尰闄㈠崗鍙嬬郴缁熷紓甯革紝瀹℃壒涓嶇敓鏁堬紝id={}",
+ serviceReimbursement == null ? null : serviceReimbursement.getId(), t);
+ return false;
+ }
+ }
+ private Boolean doSendData(ServiceReimbursement serviceReimbursement) {
+ // fund鍜宖unddetail鐨勬暟鎹幏鍙�
+ // 2026-10-09锛氭帴浣� addSharedData 鐨勫け璐ヤ俊鍙凤紙闄勪欢涓婁紶澶辫触鏃跺畠浼氬洖婊氬垎浜〃骞惰繑鍥� false锛�
+ Boolean sharedOk = addSharedData(serviceReimbursement.getId());
+ if (sharedOk == null || !sharedOk) {
+ log.error("宸梾鎶ラ攢鍗曚笂浼犲け璐ワ細鍒嗕韩琛�/闄勪欢鐜妭澶辫触锛屽鎵逛笉鐢熸晥锛宨d={}", serviceReimbursement.getId());
+ return false;
+ }
+ List<ServiceReimbursementShared> serviceReimbursementSharedList = sharedService.getRemShareInfoByRemId(serviceReimbursement.getId());
+ if (org.springframework.util.CollectionUtils.isEmpty(serviceReimbursementSharedList)) {
+ log.error("宸梾鎶ラ攢鍗曚笂浼犲け璐ワ細鍒嗕韩琛ㄤ负绌猴紙闄勪欢鎴栫粍瑁呯幆鑺傚紓甯革級锛屽鎵逛笉鐢熸晥锛宨d={}", serviceReimbursement.getId());
+ return false;
+ }
log.info("serviceReimbursementSharedList鐨勬暟鎹噺涓猴細{}", serviceReimbursementSharedList.size());
//detail璇︽儏
- ServiceReimbursementdetailShared serviceReimbursementdetailShared = new ServiceReimbursementdetailShared();
- serviceReimbursementdetailShared.setRbid(serviceReimbursementSharedList.get(0).getId());
- List<ServiceReimbursementdetailShared> serviceReimbursementdetailShareds = detailSharedService.queryList(serviceReimbursementdetailShared);
+ List<ServiceReimbursementdetail> serviceReimbursementdetailList = serviceReimbursementdetailMapper.getAllDetailsByRBID(serviceReimbursement.getId());
//payee璇︽儏
- ServiceReimbursementpayeeShared serviceReimbursementpayeeShared = new ServiceReimbursementpayeeShared();
- serviceReimbursementpayeeShared.setRbid(serviceReimbursementSharedList.get(0).getId());
- List<ServiceReimbursementpayeeShared> serviceReimbursementpayeeShareds = payeeSharedService.queryList(serviceReimbursementpayeeShared);
+ ServiceReimbursementpayee serviceReimbursementpayee = new ServiceReimbursementpayee();
+ serviceReimbursementpayee.setRbid(serviceReimbursement.getId());
+ List<ServiceReimbursementpayee> serviceReimbursementpayees = payeeService.queryList(serviceReimbursementpayee);
// 鏁版嵁鐨勫皝瑁�
@@ -576,10 +689,10 @@
ServiceReimbursement sr = serviceReimbursementMapper.selectById(serviceReimbursement.getId());
data2.put("formmain_1209", formmain_1209(sr));
// 鏄庣粏琛ㄥ瓧娈垫暟鎹紝涓庨檮浠剁殑澶勭悊
- Map<String, List<Map<String, Object>>> map1 = formson_1210(serviceReimbursementdetailShareds);
+ Map<String, List<Map<String, Object>>> map1 = formson_1210(serviceReimbursementdetailList);
data2.put("formson_1210", map1.get("formson_1210"));
data2.put("thirdAttachments", map1.get("annexfilesList"));
- data2.put("formson_1211", formson_1211(serviceReimbursementpayeeShareds));
+ data2.put("formson_1211", formson_1211(serviceReimbursementpayees));
data.put("data", data2);
//妯℃澘缂栧彿锛岀敱鑷磋繙鏂规彁渚涳紝璇ュ弬鏁板喅瀹氬彂璧峰崗鍚岀郴缁熶腑鍝釜娴佺▼
data.put("templateCode", "cyfbxd_rzhc_ceshi");
@@ -595,7 +708,7 @@
data.put("summaryId", serviceReimbursement1.getSummaryId() == null ? "" : serviceReimbursement1.getSummaryId());
map.put("data", data);
String strRes = null;
- if (!active.equals("druid")) {
+ if (isUploadOaEnabled()) {
//濡傛灉鏄湰鍦扮幆澧冿紝灏变笉璋冭繖涓簡
String token = getToken();
JSONObject json1 = JSONObject.parseObject(token);
@@ -626,53 +739,70 @@
}
}
log.error("-----Reimbursement-------------strRes鐨勫�间负锛歿}", strRes);
- JSONObject jsonObject = JSONObject.parseObject(strRes);
+ if (strRes == null || strRes.trim().isEmpty()) {
+ // 鍖婚櫌鍗忓弸绯荤粺鏃犺繑鍥烇紙瓒呮椂/寮傚父/鏈厤缃級锛氭帹閫佸け璐ワ紝鐢辫皟鐢ㄦ柟鍥炴粴鏁翠釜瀹℃壒
+ log.error("宸梾瀹℃壒鍗曚笂浼犲尰闄㈠崗鍙嬬郴缁熷け璐ワ細鎺ュ彛鏃犺繑鍥炲唴瀹癸紝id={}", serviceReimbursement.getId());
+ return false;
+ }
+ JSONObject jsonObject = null;
+ try {
+ jsonObject = JSONObject.parseObject(strRes);
+ } catch (Exception e) {
+ log.error("宸梾瀹℃壒鍗曚笂浼犲尰闄㈠崗鍙嬬郴缁熷け璐ワ細杩斿洖鍐呭鏃犳硶瑙f瀽锛宨d={}锛宻trRes={}",
+ serviceReimbursement.getId(), strRes, e);
+ return false;
+ }
+ if (jsonObject == null) {
+ log.error("宸梾瀹℃壒鍗曚笂浼犲尰闄㈠崗鍙嬬郴缁熷け璐ワ細杩斿洖鍐呭涓虹┖锛宨d={}锛宻trRes={}",
+ serviceReimbursement.getId(), strRes);
+ return false;
+ }
String code = jsonObject.getString("code");
- if (!code.equals("0")) {
+ if (code == null || !"0".equals(code)) {
+ log.error("宸梾瀹℃壒鍗曚笂浼犲尰闄㈠崗鍙嬬郴缁熷け璐ワ細code={}锛宨d={}锛宻trRes={}",
+ code, serviceReimbursement.getId(), strRes);
return false;
}
return true;
}
- private static final AtomicLong COUNTER = new AtomicLong(System.currentTimeMillis());
-
- private Map<String, List<Map<String, Object>>> formson_1210(List<ServiceReimbursementdetailShared> serviceReimbursementdetailSharedList) {
+ private Map<String, List<Map<String, Object>>> formson_1210(List<ServiceReimbursementdetail> serviceReimbursementdetailList) {
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) {
+ for (ServiceReimbursementdetail reimbursementdetail : serviceReimbursementdetailList) {
Map<String, Object> map = new HashMap<>();
- map.put("浜ら�氬伐鍏�", reimbursementdetailShared.getTraffictype());
- map.put("浜ら�氳垂", reimbursementdetailShared.getTrafficexpense());
- map.put("甯傚唴浜ら��", reimbursementdetailShared.getCityfee());
- 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("浜ら�氬伐鍏�", reimbursementdetail.getTraffictype());
+ map.put("浜ら�氳垂", reimbursementdetail.getTrafficexpense());
+ map.put("甯傚唴浜ら��", reimbursementdetail.getCityfee());
+ map.put("浣忓璐�", reimbursementdetail.getHotelexpense());
+ map.put("鏉傝垂", reimbursementdetail.getOtherexpense());
+ map.put("浼欓璐规姤閿�", reimbursementdetail.getFoodexpenses());
+ map.put("浼欓璐硅ˉ鍔�", reimbursementdetail.getFoodallowance());
+ map.put("鍏朵粬璐圭敤", reimbursementdetail.getOtherfeeamount());
+ map.put("鍏朵粬璐圭敤璇存槑", reimbursementdetail.getOtherfeedesc());
map.put("閲戦鍚堣", "");
- map.put("鍑哄樊鏃堕棿璧�", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(reimbursementdetailShared.getStarttime()));
- map.put("鍑哄彂鍦扮偣", reimbursementdetailShared.getDeparture());
- map.put("鍑哄樊鏃堕棿姝�", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(reimbursementdetailShared.getEndtime()));
- map.put("鍑哄樊鐩殑鍦�", reimbursementdetailShared.getDestination());
- map.put("澶╂暟", reimbursementdetailShared.getDays());
- BigDecimal total = safe(reimbursementdetailShared.getCityfee()).add(safe(reimbursementdetailShared.getTrafficexpense())).add(safe(reimbursementdetailShared.getHotelexpense())).add(safe(reimbursementdetailShared.getOtherexpense())).add(safe(reimbursementdetailShared.getFoodexpenses())).add(safe(reimbursementdetailShared.getFoodallowance())).add(safe(reimbursementdetailShared.getOtherfeeamount()));
+ map.put("鍑哄樊鏃堕棿璧�", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(reimbursementdetail.getStarttime()));
+ map.put("鍑哄彂鍦扮偣", reimbursementdetail.getDeparture());
+ map.put("鍑哄樊鏃堕棿姝�", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(reimbursementdetail.getEndtime()));
+ map.put("鍑哄樊鐩殑鍦�", reimbursementdetail.getDestination());
+ map.put("澶╂暟", reimbursementdetail.getDays());
+ BigDecimal total = safe(reimbursementdetail.getCityfee()).add(safe(reimbursementdetail.getTrafficexpense())).add(safe(reimbursementdetail.getHotelexpense())).add(safe(reimbursementdetail.getOtherexpense())).add(safe(reimbursementdetail.getFoodexpenses())).add(safe(reimbursementdetail.getFoodallowance())).add(safe(reimbursementdetail.getOtherfeeamount()));
map.put("瀹為檯鎶ラ攢閲戦", total);
- map.put("璐㈠姟澶囨敞", reimbursementdetailShared.getRemark());
- map.put("id", reimbursementdetailShared.getRdid());
- map.put("鍑哄樊浜�", reimbursementdetailShared.getPersonname());
+ map.put("璐㈠姟澶囨敞", reimbursementdetail.getRemark());
+ map.put("id", reimbursementdetail.getId());
+ map.put("鍑哄樊浜�", reimbursementdetail.getPersonname());
map.put("鍥炰氦閫氬伐鍏�", "");
- map.put("浜哄憳绫诲埆", reimbursementdetailShared.getPersontype());
+ map.put("浜哄憳绫诲埆", reimbursementdetail.getPersontype());
map.put("浣忓璐规爣鍑�", "");
- map.put("浣忓璐规爣鍑嗗悎璁�", reimbursementdetailShared.getHotelexpense());
- Long fpuuid = COUNTER.incrementAndGet();
+ map.put("浣忓璐规爣鍑嗗悎璁�", reimbursementdetail.getHotelexpense());
+ Long fpuuid = IdGeneratorUtils.nextId();
map.put("鍙戠エ闄勪欢", fpuuid);
map.put("绁ㄦ嵁璇嗗埆", "");
map.put("璇嗗埆浜�", "");
map.put("搴忓彿1", "");
- Long qtuuid = COUNTER.incrementAndGet();
+ Long qtuuid = IdGeneratorUtils.nextId();
map.put("鍏朵粬闄勪欢", qtuuid);
map.put("涓汉绁ㄥす鐢ㄦ埛", "");
map.put("璇嗗埆绁ㄦ嵁", "");
@@ -680,8 +810,8 @@
list.add(map);
//闄勪欢澶勭悊
- String annexfiles = reimbursementdetailShared.getAnnexfiles();
- String invoicefiles = reimbursementdetailShared.getInvoicefiles();
+ String annexfiles = reimbursementdetail.getAnnexfiles();
+ String invoicefiles = reimbursementdetail.getInvoicefiles();
int i = 0;
if (StringUtils.isNotEmpty(annexfiles)) {
@@ -716,18 +846,18 @@
return val == null ? BigDecimal.ZERO : val;
}
- private List<Map<String, Object>> formson_1211(List<ServiceReimbursementpayeeShared> serviceReimbursementpayeeShareds) {
+ private List<Map<String, Object>> formson_1211(List<ServiceReimbursementpayee> serviceReimbursementpayees) {
Map<String, List<Map<String, Object>>> allMap = new HashMap<>();
List<Map<String, Object>> list = new ArrayList<>();
- for (ServiceReimbursementpayeeShared serviceReimbursementpayeeShared : serviceReimbursementpayeeShareds) {
+ for (ServiceReimbursementpayee serviceReimbursementpayee : serviceReimbursementpayees) {
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("鏀舵浜�", serviceReimbursementpayee.getPersonname());
+ map.put("鍗″彿", serviceReimbursementpayee.getBankcardno());
+ map.put("寮�鎴烽摱琛�", serviceReimbursementpayee.getBankname());
+ map.put("鎵撴閲戦", serviceReimbursementpayee.getAmount());
+ map.put("浜哄憳绫诲埆鎵撴", serviceReimbursementpayee.getPersontype());
map.put("鏍哥畻椤圭洰", "");
map.put("棰勭畻椤圭洰", "");
map.put("鍊熸柟鎽樿", "");
@@ -749,7 +879,7 @@
formmain_1209.put("鎶ラ攢鏃ユ湡", new SimpleDateFormat("yyyy-MM-dd HH:mm").format(serviceReimbursement.getApplyTime()));
formmain_1209.put("鍑哄樊浜�-浣滃簾", "");
formmain_1209.put("鎶ラ攢浜�", serviceReimbursement.getUsername());
- formmain_1209.put("鍖哄煙缁勯暱", getLastApprovalInfo(serviceFundflows, serviceReimbursement.getManagername()));
+ formmain_1209.put("鍖哄煙缁勯暱", serviceReimbursement.getManagername());
formmain_1209.put("鍑哄樊浜嬬敱", serviceReimbursement.getReason());
formmain_1209.put("澶╂暟鍚堣", 0.00);
formmain_1209.put("浜ら�氳垂鍚堣", serviceReimbursement.getTotalamount());
@@ -764,8 +894,8 @@
formmain_1209.put("璐㈠姟瀹℃壒", "");
formmain_1209.put("璐㈠姟閮ㄨ礋璐d汉瀹℃壒", getLastApprovalInfo(serviceFundflows, serviceReimbursement.getFinancedirector()));
if (serviceReimbursement.getBackflowlevel() == 3)
- formmain_1209.put("鍔炲叕瀹や富浠诲鎵�", "瀹℃壒浜猴細鍛ㄨ偛鎴� & 瀹℃壒鏃堕棿锛�" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " & 瀹℃壒缁撴灉锛氶�氳繃");
- else formmain_1209.put("鍔炲叕瀹や富浠诲鎵�", getLastApprovalInfo(serviceFundflows, "鍛ㄨ偛鎴�"));
+ formmain_1209.put("鍔炲叕瀹や富浠诲鎵�", "瀹℃壒浜猴細鍚村織寮� & 瀹℃壒鏃堕棿锛�" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " & 瀹℃壒缁撴灉锛氶�氳繃");
+ else formmain_1209.put("鍔炲叕瀹や富浠诲鎵�", getLastApprovalInfo(serviceFundflows, "鍚村織寮�"));
formmain_1209.put("澶囨敞", serviceReimbursement.getRemark());
formmain_1209.put("涓氬姟鍓櫌闀垮鎵�", serviceReimbursement.getBusvicepresident());
@@ -774,7 +904,8 @@
formmain_1209.put("寮�鎴烽摱琛�-浣滃簾", "");
formmain_1209.put("鍗″彿-浣滃簾", "");
formmain_1209.put("鏀粯鏂瑰紡", serviceReimbursement.getZffs());
- formmain_1209.put("缁勯暱", getLastApprovalInfo(serviceFundflows, serviceReimbursement.getManagername()));
+ String lastApprovalInfo = getLastApprovalInfo(serviceFundflows, serviceReimbursement.getManagername());
+ formmain_1209.put("缁勯暱", lastApprovalInfo.contains("鍚村織寮�") ? null : lastApprovalInfo);
formmain_1209.put("瀹℃壒浜哄憳", getLastApprovalInfo(serviceFundflows, "闄堟厱鍗�"));
formmain_1209.put("鏀粯鏃ユ湡", serviceReimbursement.getRiqi());
formmain_1209.put("涓婁紶闄勪欢", "");
@@ -810,7 +941,6 @@
public int uploadOAFileAndUpdateDb(ServiceReimbursementdetailShared remShare) throws Exception {
log.info("uploadOAFileAndUpdate鏂规硶鐨勫叆鍙�:{}", remShare);
- System.out.println("uploadOAFileAndUpdate鏂规硶鐨勫叆鍙�:" + remShare);
//涓婁紶OA鏂囦欢
String strRes = getToken();
@@ -860,9 +990,17 @@
log.info("filePath鐨勪慨鏀�:{}", filePath);
String url = rbDetailFile.getUrl();
//file鐢ㄧ殑鏄粷瀵逛綅缃�
- String fileName = url.substring(url.indexOf("/profile/upload") + "/profile/upload".length());
+ // 2026-10-09锛氶檮浠跺湴鍧�瑙f瀽鍔犲浐锛岄伩鍏� url 寮傚父/鏂囦欢缂哄け鏃舵姏 NPE 瀵艰嚧鐪嬩笉鍒板け璐ュ師鍥�
+ int profileIdx = url == null ? -1 : url.indexOf("/profile/upload");
+ if (profileIdx < 0) {
+ throw new ServiceException("闄勪欢鍦板潃鏍煎紡涓嶆纭紙缂哄皯 /profile/upload锛夛紝鏃犳硶涓婁紶鍗忓弸锛�" + url);
+ }
+ String fileName = url.substring(profileIdx + "/profile/upload".length());
String strFile = rbDetailFile.getUrl().replace(filePath, "/profile/upload");
File fileUpload = new File(filePath + fileName);
+ if (!fileUpload.exists()) {
+ throw new ServiceException("闄勪欢鏂囦欢鍦ㄦ湇鍔″櫒涓婁笉瀛樺湪锛屾棤娉曚笂浼犲崗鍙嬶細" + fileUpload.getAbsolutePath());
+ }
log.info("璇锋眰绗笁鏂圭殑鍏ュ弬strFile : {}, strFUrl : {}", strFile, filePath);
String struploadResult = HttpClientKit.sendPostWithFile(fileUpload, strFUrl);
log.info("绗笁鏂逛紶鍥炵殑鏁版嵁: {}", struploadResult);
--
Gitblit v1.9.3