From 194ecd2dbc3a9c7eccfe5d9809ff947715960465 Mon Sep 17 00:00:00 2001
From: sinake <sinake1@qq.com>
Date: 星期二, 13 十月 2026 17:32:14 +0800
Subject: [PATCH] 上传命名规则调整
---
ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java | 372 ++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 295 insertions(+), 77 deletions(-)
diff --git a/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java b/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java
index cfea81f..4098927 100644
--- a/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java
+++ b/ruoyi-project/src/main/java/com/ruoyi/project/service/impl/ServiceFundServiceImpl.java
@@ -15,17 +15,22 @@
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.enums.ApplyTypeEnum;
+import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.HttpClientKit;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.DtoConversionUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.project.common.FundNotifyMessageBuilder;
+import com.ruoyi.project.common.IdGeneratorUtils;
import com.ruoyi.project.domain.*;
import com.ruoyi.project.domain.vo.*;
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.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
@@ -59,6 +64,10 @@
public class ServiceFundServiceImpl extends ServiceImpl<ServiceFundMapper, ServiceFund> implements IServiceFundService {
@Autowired
ServiceFundMapper serviceFundMapper;
+
+ /** 涓撳鍔冲姟璐� 9 鏉¤垂鐢ㄦ帶鍒惰鍒欐牎楠岋紙鍚屼竴妗堜緥绱锛� */
+ @Autowired
+ private ExpertFeeValidateService expertFeeValidateService;
@Autowired
private DingTalkService dingTalkService;
@@ -135,6 +144,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);
+ }
+
/**
* 鑷磋繙绯荤粺娴佺▼閫�鍥�
*
@@ -177,7 +215,7 @@
serviceFundSharedMapper.delfundsharedInfoById(null, serviceFund1.getId());
//杩欎釜娑堟伅鍙戦�侊紝灏变笉鍦ㄨ繖鍋氫簡锛屽湪瀹℃壒璁板綍鐨勬帴鍙i噷鍋氾紙鍗虫棩蹇楁帴鍙o級
- //sendMeg(serviceFund1.getApplytype(), sysUser.getPhonenumber());
+// sendMeg(serviceFund1.getApplytype(), sysUser.getPhonenumber());
}
return true;
@@ -197,6 +235,12 @@
String phone = null;
String applytype = null;
Long flowlevel = null;
+ //閽夐拤閫氱煡鐢ㄧ殑鍗曟嵁淇℃伅
+ Double amount = null;
+ String donorName = null;
+ String billNo = null;
+ String travelers = null;
+ String reason = null;
if (serviceProcessVO.getApplytype().equals("0")) {
ServiceReimbursement serviceReimbursement = new ServiceReimbursement();
serviceReimbursement.setId(StringUtils.isNotEmpty(serviceProcessVO.getBackCode()) ? Long.valueOf(serviceProcessVO.getBackCode()) : null);
@@ -211,6 +255,11 @@
phone = serviceReimbursementList.get(0).getPhone();
flowlevel = serviceReimbursementList.get(0).getFlowlevel();
applytype = "0";
+ amount = serviceReimbursementList.get(0).getAmountrequested();
+ billNo = FundNotifyMessageBuilder.billNo(serviceReimbursementList.get(0).getBh(),
+ serviceReimbursementList.get(0).getId());
+ travelers = serviceReimbursementList.get(0).getTravelers();
+ reason = serviceReimbursementList.get(0).getReason();
} else {
ServiceFund serviceFund = new ServiceFund();
serviceFund.setId(StringUtils.isNotEmpty(serviceProcessVO.getBackCode()) ? Long.valueOf(serviceProcessVO.getBackCode()) : null);
@@ -224,6 +273,10 @@
phone = serviceFunds.get(0).getPhone();
flowlevel = serviceFunds.get(0).getFlowlevel();
applytype = serviceFunds.get(0).getApplytype();
+ amount = serviceFunds.get(0).getPretaxcost();
+ donorName = serviceFunds.get(0).getDonorname();
+ billNo = FundNotifyMessageBuilder.billNo(serviceFunds.get(0).getBh(),
+ serviceFunds.get(0).getId());
}
// //灏嗘搷浣滀繚瀛樺埌fundflow琛ㄤ腑
@@ -246,7 +299,16 @@
SysUser sysUser = sysUserService.selectUserByUserName(userNo);
- sendMeg(serviceProcessVO, phone);
+
+ //閽夐拤閫氱煡鍐呭锛氬崟鎹俊鎭紙绫诲瀷/鎶ラ攢浜�/閲戦/妗堜緥/缂栧彿锛�+ 瀹℃壒浜�/瀹℃壒鏃堕棿/鎰忚
+ List<ConcurrentHashMap<String, Object>> notifyRows = FundNotifyMessageBuilder.newRows();
+ FundNotifyMessageBuilder.addBillInfo(notifyRows, applytype, userName, amount, donorName, billNo);
+ FundNotifyMessageBuilder.addTravelInfo(notifyRows, travelers, reason);
+ FundNotifyMessageBuilder.addAuditResult(notifyRows, serviceProcessVO.getCheckusername(),
+ serviceProcessVO.getCheckTime(),
+ FundNotifyMessageBuilder.opinion(serviceProcessVO.getFlowconclusion(),
+ serviceProcessVO.getFlowcontent()));
+ sendMeg(serviceProcessVO, phone, notifyRows);
//鍙戦�佷俊鎭繚瀛�
ServiceSystemmessage serviceSystemmessage = new ServiceSystemmessage();
serviceSystemmessage.setFundtype(1);
@@ -258,7 +320,7 @@
serviceSystemmessage.setUpdateBy(sysUser.getNickName());
serviceSystemmessage.setIsread(0);
serviceSystemmessage.setMessagetype(1);
- serviceSystemmessage.setMessagetitle("璐㈠姟绯荤粺淇℃伅");
+ serviceSystemmessage.setMessagetitle("OPO绯荤粺瀹℃壒");
serviceSystemmessage.setMessagecontent(serviceProcessVO.getFlowcontent());
iServiceSystemmessageService.save(serviceSystemmessage);
@@ -372,6 +434,7 @@
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public Map<String, String> checkFund(CheckFundVO checkFundVO, LoginUser loginUser) {
ServiceFund serviceFund = getById(checkFundVO.getFundid());
Map<String, String> map = new HashMap<>();
@@ -379,6 +442,19 @@
if (serviceFund == null) {
map.put(HttpStatus.NO_CONTENT + "", "璐圭敤缂栧彿涓嶆纭�");
return map;
+ }
+
+ // 涓撳鍔冲姟璐癸細瀹℃牳鈥滈�氳繃鈥濆墠鏍¢獙 9 鏉¤垂鐢ㄦ帶鍒惰鍒欙紙鍚屼竴妗堜緥绱锛夛紱涓嶉�氳繃鍒欎笉闃绘柇
+ if (checkFundVO.getFlowconclusion() != null && checkFundVO.getFlowconclusion() == 1) {
+ ExpertFeeCheckResult expertFeeResult = expertFeeValidateService.validateBeforeCheck(checkFundVO.getFundid());
+ if (expertFeeResult.hasError()) {
+ map.put(HttpStatus.ERROR + "", expertFeeResult.errorMessage());
+ return map;
+ }
+ if (expertFeeResult.hasWarning()) {
+ // 瑙勫垯 5銆�6 浠呮彁绀猴紝涓嶉樆鏂鏍�
+ log.warn("涓撳鍔冲姟璐瑰鏍告牎楠屾彁绀猴細fundId={}锛寋}", checkFundVO.getFundid(), expertFeeResult.warningMessage());
+ }
}
Integer TotalLevel = 0;
@@ -407,6 +483,11 @@
Integer RecordStatus = serviceFund.getRecordstatus();
Integer FlowLevel = serviceFund.getFlowlevel().intValue();
Integer OriginalFlowLevel = FlowLevel;
+ //瀹℃壒缁撹蹇呭~锛氬師瀹炵幇鐩存帴 == 1 鎷嗙锛屾帴鍙h鐩磋皟浼� null 浼� NPE 500
+ if (checkFundVO.getFlowconclusion() == null) {
+ map.put(HttpStatus.ERROR + "", "瀹℃壒缁撹涓嶈兘涓虹┖");
+ return map;
+ }
if (checkFundVO.getFlowconclusion() == 1) {
CheckFlag = 1;
if (TotalLevel == 0) {
@@ -422,7 +503,8 @@
SysUser user = loginUser.getUser();
if (serviceFund.getFlowlevel() == Long.valueOf(serviceFundflowrules.get(0).getFlowlevel() - 1) && serviceFund.getBackflowlevel() == 100) {
log.info("璐㈠姟閫�鍥炲啀鎻愪氦锛屽嚭绾冲啀娆″鎵癸紝涔嬪悗鎻愪氦鍒拌储鍔�");
- serviceFund.setFinancechecher("瀹℃壒浜猴細" + user.getNickName() + " & 瀹℃壒鏃堕棿" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + " & 瀹℃壒缁撴灉锛氶�氳繃");
+// serviceFund.setFinancechecher("瀹℃壒浜猴細" + user.getNickName() + " & 瀹℃壒鏃堕棿" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + " & 瀹℃壒缁撴灉锛氶�氳繃");
+ serviceFund.setFinancechecher(user.getNickName());
serviceFund.setFlowlevel(serviceFundflowrules.get(0).getTotallevel().longValue());
serviceFund.setRecordstatus(99);
@@ -434,8 +516,9 @@
if (newSwitch == 1) {
aBoolean1 = sendData(serviceFund);
if (!aBoolean1) {
- map.put("500", "鍙戦�佸け璐�");
- return map;
+ // 鎺ㄩ�佸尰闄㈠崗鍙嬬郴缁熷け璐ワ細鏁翠釜瀹℃壒涓嶇敓鏁堬紙浜嬪姟鍥炴粴锛夛紝鍏佽涓嬫閲嶆柊瀹℃壒
+ log.error("璐圭敤瀹℃壒鍗曚笂浼犲尰闄㈠崗鍙嬬郴缁熷け璐ワ紝瀹℃壒涓嶇敓鏁堬紝fundId={}锛岃閲嶆柊瀹℃壒", serviceFund.getId());
+ throw new ServiceException("鍖婚櫌鍗忓弸绯荤粺鎺ユ敹澶辫触锛屾湰娆″鎵规湭鐢熸晥锛岃绋嶅悗閲嶆柊瀹℃壒");
}
}
//淇濆瓨瀹℃壒娴佺▼琛�
@@ -444,6 +527,7 @@
serviceFundflow.setCheckuserno(user.getUserName());
serviceFundflow.setCheckusername(user.getNickName());
serviceFundflow.setFundtype(2);
+ serviceFundflow.setCheckTime(new Date());
serviceFundflow.setApplytype(serviceFund.getApplytype());
serviceFundflow.setFlowconclusion(CheckFlag);
serviceFundflow.setFlowcontent("閫氳繃");
@@ -455,12 +539,13 @@
List<Integer> roleIds = sysUserRoleMapper.getUserRoleByUserId(user.getUserId());
if (roleIds != null && roleIds.contains(11)) {
//11涓鸿储鍔�
- serviceFund.setFinancechecher("瀹℃壒浜猴細" + user.getNickName() + " & 瀹℃壒鏃堕棿" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " & 瀹℃壒缁撴灉锛氶�氳繃");
+// serviceFund.setFinancechecher("瀹℃壒浜猴細" + user.getNickName() + " & 瀹℃壒鏃堕棿" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " & 瀹℃壒缁撴灉锛氶�氳繃");
+ serviceFund.setFinancechecher(user.getNickName());
}
//璁板綍涓�涓嬶紝涓嬩竴绾х殑瀹℃壒锛屼互渚夸簬涓嬩竴绾ч��鍥炲悗锛屽彂璧疯�呮彁浜ゆ椂锛岃兘鍐嶆彁鍒板綋鍓嶅鎵瑰眰绾�
serviceFund.setBackflowlevel(FlowLevel);
- } else {
+ } //else {
CheckFlag = 2;
if (CheckFlag == 2) {
//搴斿尰闄㈣姹傚鏋滃嚭鐜伴��鍥烇紝鐩存帴閫�鍒板彂璧疯��
@@ -476,19 +561,24 @@
}
SysUser sysUser = sysUserService.selectUserByUserName(serviceFund.getUserno());
- ArrayList<ConcurrentHashMap<String, Object>> contentList = new ArrayList<>();
- ConcurrentHashMap cmap = new ConcurrentHashMap();
- cmap.put("瀹℃壒浜猴細", loginUser.getUser().getUserName());
- cmap.put("瀹℃壒鏃堕棿锛�", new Date());
- cmap.put("鎰忚锛�", "涓嶉�氳繃");
- if (StringUtils.isNotBlank(checkFundVO.getFlowcontent())) cmap.put("鎰忚锛�", checkFundVO.getFlowcontent());
- contentList.add(cmap);
- 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, serviceFund.getApplytype(),
+ serviceFund.getUsername(), serviceFund.getPretaxcost(), serviceFund.getDonorname(),
+ FundNotifyMessageBuilder.billNo(serviceFund.getBh(), serviceFund.getId()));
+ 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("璐圭敤---瀹℃壒鏈�氳繃閽夐拤閫氱煡澶辫触锛宖undId={}", serviceFund.getId(), e);
+ }
+ //}
serviceFund.setRecordstatus(RecordStatus);
serviceFund.setFlowlevel(FlowLevel.longValue());
@@ -502,6 +592,7 @@
serviceFundflow.setFundtype(2);
serviceFundflow.setApplytype(serviceFund.getApplytype());
serviceFundflow.setFlowconclusion(CheckFlag);
+ serviceFundflow.setCheckTime(new Date());
if (StringUtils.isNotBlank(checkFundVO.getFlowcontent())) {
serviceFundflow.setFlowcontent(checkFundVO.getFlowcontent());
} else {
@@ -512,24 +603,37 @@
Boolean aBoolean = serviceFundflowService.saveData(serviceFundflow);
log.info("sserviceFund淇濆瓨鐨勭殑鍊兼槸-------- :{}", aBoolean);
- //053瀹℃壒閫氳繃涔嬪悗锛屽氨闇�瑕佹妸鈥滃姙鍏涓讳换鈥濈殑鍚嶅瓧濉笂
- if (checkFundVO.getFlowconclusion() == 1 && user.getUserName().equals("053")) {
- serviceFund.setOfficedirector("瀹℃壒浜猴細" + user.getNickName() + " & 瀹℃壒鏃堕棿" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " & 瀹℃壒缁撴灉锛氶�氳繃");
+ //鍔炲叕瀹ゅ鎵归�氳繃涔嬪悗锛屽氨闇�瑕佹妸鈥滃姙鍏涓讳换鈥濈殑鍚嶅瓧濉笂
+ SysUser sysUsers = null;
+ if (StringUtils.isNotEmpty(user.getUserName())) {
+ sysUsers = sysUserMapper.selectUserByUserName(user.getUserName());
+ log.info("璐圭敤sysUsers杩斿洖鐨勫�间负:{}", sysUsers);
+ }
+ // 2026-10-09锛氭帹閫佹潯浠剁敱"褰撳墠瀹℃牳浜烘湁 officedirector 瑙掕壊"鏀逛负"鏈瀹℃壒鍚庡埌杈炬渶鍚庝竴绾�"銆�
+ // 鍘熷啓娉曞湪"鏈�鍚庝竴绾у鏍镐汉娌℃湁璇ヨ鑹�"鏃舵案杩滀笉浼氭帹閫侊紝鑰�"闈炴渶鍚庝竴绾х殑 officedirector"浼氭彁鍓嶆帹閫併��
+ boolean uploadAtLastLevel = checkFundVO.getFlowconclusion() == 1
+ && TotalLevel != null && TotalLevel != 0 && TotalLevel == OriginalFlowLevel + 1;
+ if (uploadAtLastLevel) {
+ // 浠嶅彧鍦ㄨ瑙掕壊瀹℃壒鏃惰褰曞姙鍏涓讳换锛屼繚鎸佸瓧娈佃涔変笉鍙�
+ if (sysUsers != null && sysUsers.getRoles() != null
+ && sysUsers.getRoles().stream().anyMatch(role -> "officedirector".equals(role.getRoleKey()))) {
+ serviceFund.setOfficedirector(user.getNickName());
+ }
serviceFund.setUploadStates(1);
//鏁版嵁鍙戦��
Boolean aBoolean1 = null;
if (newSwitch == 1) {
+ log.info("璐圭敤newSwitch杩斿洖鐨勫�间负:{}", newSwitch);
//鎼炰竴涓紑鍏筹紝鍒奖鍝嶈�佹祦绋�
aBoolean1 = sendData(serviceFund);
if (!aBoolean1) {
- map.put("500", "鍙戦�佸け璐�");
- return map;
+ // 鎺ㄩ�佸尰闄㈠崗鍙嬬郴缁熷け璐ワ細鏁翠釜瀹℃壒涓嶇敓鏁堬紙浜嬪姟鍥炴粴锛夛紝鍏佽涓嬫閲嶆柊瀹℃壒
+ log.error("璐圭敤瀹℃壒鍗曚笂浼犲尰闄㈠崗鍙嬬郴缁熷け璐ワ紝瀹℃壒涓嶇敓鏁堬紝fundId={}锛岃閲嶆柊瀹℃壒", serviceFund.getId());
+ throw new ServiceException("鍖婚櫌鍗忓弸绯荤粺鎺ユ敹澶辫触锛屾湰娆″鎵规湭鐢熸晥锛岃绋嶅悗閲嶆柊瀹℃壒");
}
}
}
System.out.println("serviceFund鐨勫�兼槸--------:" + serviceFund);
- log.info("寮�濮嬫洿鏂扮殑鐨勫�兼槸--------");
-
Boolean aBoolean1 = updateById(serviceFund);
log.info("integer鏇存柊鐨勭殑鍊兼槸-------- :{}", aBoolean1);
ServiceSystemmessage serviceSystemmessage = new ServiceSystemmessage();
@@ -589,9 +693,36 @@
}
+ /**
+ * 瀹℃壒鍗曚笂浼犲尰闄㈠崗鍙嬶紙鑷磋繙锛夌郴缁熴��
+ *
+ * <p>2026-10-09锛氬灞傚寘涓�灞傚厹搴曪紝淇濊瘉**浠讳綍寮傚父閮戒笉浼氬悜澶栨姏**锛堝師鏉� strRes 涓� null 鏃�
+ * 浼氬湪 parseObject 鍚庡彇 code 瑙﹀彂 NPE锛屾妸鏁翠釜瀹℃壒璇锋眰鎵撴垚 500锛夈��
+ * 杩斿洖 false 琛ㄧず鎺ㄩ�佸け璐ワ紝璋冪敤鏂规寜"瀹℃壒涓嶇敓鏁堛�佸厑璁镐笅娆¢噸鏂板鎵�"澶勭悊銆�
+ */
public Boolean sendData(ServiceFund serviceFund) {
- // fund鍜宖unddetail鐨勬暟鎹幏鍙�
- addFundSharedInfo(serviceFund.getId());
+ if (!isUploadOaEnabled()) {
+ // 涓婁紶寮�鍏冲叧闂紙濡傛祴璇曠幆澧冿級锛氳烦杩囦笂浼犲苟瑙嗕负鎴愬姛锛岀粷涓嶈兘鍥犳闃绘柇瀹℃壒
+ log.info("瀹℃壒鍗曚笂浼犲尰闄㈠崗鍙嬬郴缁熷凡鍏抽棴锛坰ys.approval.upload.oa != 1锛夛紝璺宠繃涓婁紶骞惰涓烘垚鍔燂紝fundId={}",
+ serviceFund == null ? null : serviceFund.getId());
+ return true;
+ }
+ try {
+ return doSendData(serviceFund);
+ } catch (Throwable t) {
+ log.error("璐圭敤瀹℃壒鍗曚笂浼犲尰闄㈠崗鍙嬬郴缁熷紓甯革紝瀹℃壒涓嶇敓鏁堬紝fundId={}",
+ serviceFund == null ? null : serviceFund.getId(), t);
+ return false;
+ }
+ }
+
+ private Boolean doSendData(ServiceFund serviceFund) {
+ // 2026-10-09锛氭帴浣� addFundSharedInfo 鐨勫け璐ヤ俊鍙凤紙闄勪欢涓婁紶澶辫触鏃跺畠浼氬洖婊氬垎浜〃骞惰繑鍥� false锛�
+ Boolean sharedOk = addFundSharedInfo(serviceFund.getId());
+ if (sharedOk == null || !sharedOk) {
+ log.error("璐圭敤鎶ラ攢鍗曚笂浼犲け璐ワ細鍒嗕韩琛�/闄勪欢鐜妭澶辫触锛屽鎵逛笉鐢熸晥锛宖undId={}", serviceFund.getId());
+ return false;
+ }
List<ServiceFundShared> fundShareInfos = serviceFundSharedMapper.getFundShareInfoById(serviceFund.getId());
if (CollectionUtils.isEmpty(fundShareInfos)) return false;
@@ -630,7 +761,7 @@
map.put("data", data);
String strRes = null;
- if (!active.equals("druid")) {
+ if (isUploadOaEnabled()) {
//濡傛灉鏄湰鍦扮幆澧冿紝灏变笉璋冭繖涓簡
String token = getToken();
JSONObject json1 = JSONObject.parseObject(token);
@@ -670,16 +801,33 @@
}
}
log.error("------------------strRes鐨勫�间负锛歿}", strRes);
- JSONObject jsonObject = JSONObject.parseObject(strRes);
+ if (strRes == null || strRes.trim().isEmpty()) {
+ // 鍖婚櫌鍗忓弸绯荤粺鏃犺繑鍥烇紙瓒呮椂/寮傚父/鏈厤缃級锛氭帹閫佸け璐ワ紝鐢辫皟鐢ㄦ柟鍥炴粴鏁翠釜瀹℃壒
+ log.error("璐圭敤瀹℃壒鍗曚笂浼犲尰闄㈠崗鍙嬬郴缁熷け璐ワ細鎺ュ彛鏃犺繑鍥炲唴瀹癸紝fundId={}", serviceFund.getId());
+ return false;
+ }
+ JSONObject jsonObject = null;
+ try {
+ jsonObject = JSONObject.parseObject(strRes);
+ } catch (Exception e) {
+ log.error("璐圭敤瀹℃壒鍗曚笂浼犲尰闄㈠崗鍙嬬郴缁熷け璐ワ細杩斿洖鍐呭鏃犳硶瑙f瀽锛宖undId={}锛宻trRes={}",
+ serviceFund.getId(), strRes, e);
+ return false;
+ }
+ if (jsonObject == null) {
+ log.error("璐圭敤瀹℃壒鍗曚笂浼犲尰闄㈠崗鍙嬬郴缁熷け璐ワ細杩斿洖鍐呭涓虹┖锛宖undId={}锛宻trRes={}",
+ serviceFund.getId(), strRes);
+ return false;
+ }
String code = jsonObject.getString("code");
- if (!code.equals("0")) {
+ if (code == null || !"0".equals(code)) {
+ log.error("璐圭敤瀹℃壒鍗曚笂浼犲尰闄㈠崗鍙嬬郴缁熷け璐ワ細code={}锛宖undId={}锛宻trRes={}",
+ code, serviceFund.getId(), strRes);
return false;
}
return true;
}
-
- private static final AtomicLong COUNTER = new AtomicLong(System.currentTimeMillis());
private Map<String, List<Map<String, Object>>> formson_0832(List<ServiceFunddetailShared> serviceFunddetailSharedList) {
Map<String, List<Map<String, Object>>> allMap = new HashMap<>();
@@ -687,6 +835,10 @@
List<Map<String, Object>> list = new ArrayList<>();
List<Map<String, Object>> annexfilesList = new ArrayList<>();
for (ServiceFunddetailShared serviceFunddetailShared : serviceFunddetailSharedList) {
+ //闄勪欢澶勭悊
+ String annexfiles = serviceFunddetailShared.getAnnexfiles();
+ String invoicefiles = serviceFunddetailShared.getInvoicefiles();
+
Map<String, Object> map = new HashMap<>();
map.put("搴忓彿1", serviceFunddetailShared.getOrderno());
map.put("璐圭敤椤圭洰", serviceFunddetailShared.getItemname());
@@ -694,15 +846,21 @@
map.put("寮�鎴烽摱琛�", serviceFunddetailShared.getDepositbank());
map.put("鍗″彿", serviceFunddetailShared.getBankcardno());
map.put("鏀剁泭浜哄灞炴垨涓撳", serviceFunddetailShared.getBeneficiaryname());
- map.put("绋庡悗閲戦", serviceFunddetailShared.getTaxamount());
+ map.put("绋庡悗閲戦", serviceFunddetailShared.getTaxedamount());
map.put("浣滃簾鏈�缁堥噾棰�", null);
- Long fpuuid = COUNTER.incrementAndGet();
- map.put("鍙戠エ闄勪欢", fpuuid);
+ Long fpuuid = IdGeneratorUtils.nextId();
+ map.put("鍙戠エ闄勪欢", "");
+ if (StringUtils.isNotEmpty(invoicefiles)) {
+ map.put("鍙戠エ闄勪欢", fpuuid);
+ }
map.put("鍙戠エ璇嗗埆", null);
map.put("璇嗗埆浜�", null);
- map.put("绋庨", null);
- long qtuuid = COUNTER.incrementAndGet();
- map.put("鍏朵粬闄勪欢", qtuuid);
+ map.put("绋庨", serviceFunddetailShared.getTaxamount());
+ long qtuuid = IdGeneratorUtils.nextId();
+ map.put("鍏朵粬闄勪欢", "");
+ if (StringUtils.isNotEmpty(annexfiles)) {
+ map.put("鍏朵粬闄勪欢", qtuuid);
+ }
map.put("椤圭洰缂栫爜", serviceFunddetailShared.getItemcode());
map.put("棰勭畻椤圭洰", null);
map.put("璐锋柟绉戠洰", null);
@@ -712,9 +870,6 @@
map.put("璐圭敤璇存槑", null);
list.add(map);
- //闄勪欢澶勭悊
- String annexfiles = serviceFunddetailShared.getAnnexfiles();
- String invoicefiles = serviceFunddetailShared.getInvoicefiles();
int i = 0;
if (StringUtils.isNotEmpty(annexfiles)) {
@@ -747,6 +902,11 @@
private Map<String, Object> getformmain_0831(ServiceFund serviceFund) {
+ ServiceFundflow serviceFundflow = new ServiceFundflow();
+ serviceFundflow.setFundid(serviceFund.getId());
+ serviceFundflow.setFundtype(2);
+ List<ServiceFundflow> serviceFundflows = serviceFundflowService.queryList(serviceFundflow);
+
Map<String, Object> formmain_0831 = new HashMap<>();
formmain_0831.put("鎹愮尞鑰呭鍚�", serviceFund.getDonorname());
formmain_0831.put("鎶ラ攢浜哄憳", serviceFund.getUsername());
@@ -757,19 +917,25 @@
formmain_0831.put("涓婁紶闄勪欢", null);
formmain_0831.put("澶囨敞", null);
formmain_0831.put("璐㈠姟瀹℃壒", null);
- formmain_0831.put("璐㈠姟閮ㄨ礋璐d汉瀹℃壒", serviceFund.getFinancedirector());
- formmain_0831.put("鍔炲叕瀹や富浠诲鎵�", serviceFund.getOfficedirector());
+ formmain_0831.put("璐㈠姟閮ㄨ礋璐d汉瀹℃壒", getLastApprovalInfo(serviceFundflows, serviceFund.getFinancedirector()));
+
+// formmain_0831.put("鍔炲叕瀹や富浠诲鎵�", "鍔炲叕瀹や富浠诲鎵�", "瀹℃壒浜猴細鍚村織寮� & 瀹℃壒鏃堕棿锛�" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " & 瀹℃壒缁撴灉锛氶�氳繃");
+ if (serviceFund.getBackflowlevel() == 3)
+ formmain_0831.put("鍔炲叕瀹や富浠诲鎵�", "瀹℃壒浜猴細鍚村織寮� & 瀹℃壒鏃堕棿锛�" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " & 瀹℃壒缁撴灉锛氶�氳繃");
+ else formmain_0831.put("鍔炲叕瀹や富浠诲鎵�", getLastApprovalInfo(serviceFundflows, "鍚村織寮�"));
+
formmain_0831.put("涓氬姟鍓櫌闀垮鎵�", serviceFund.getBusvicepresident());
formmain_0831.put("璐㈠姟鍓櫌闀垮鎵�", serviceFund.getFinvicepresident());
formmain_0831.put("涓績璐熻矗浜哄鎵�", serviceFund.getOpochecker());
formmain_0831.put("鏀粯鏂瑰紡", serviceFund.getZffs());
- formmain_0831.put("缁勯暱", serviceFund.getManagername());
- formmain_0831.put("瀹℃壒浜哄憳", serviceFund.getFinancechecher());
+ String lastApprovalInfo = getLastApprovalInfo(serviceFundflows, serviceFund.getManagername());
+ formmain_0831.put("缁勯暱", lastApprovalInfo.contains("鍚村織寮�") ? null : lastApprovalInfo);
+ formmain_0831.put("瀹℃壒浜哄憳", StringUtils.isEmpty(getLastApprovalInfo(serviceFundflows, serviceFund.getFinancechecher())) ? "闄堟厱鍗�" : getLastApprovalInfo(serviceFundflows, serviceFund.getFinancechecher()));
formmain_0831.put("鏀粯鏃ユ湡", serviceFund.getRiqi());
formmain_0831.put("璇嗗埆浜�-浣滃簾", null);
formmain_0831.put("璐㈠姟瀹℃壒绛惧瓧", serviceFund.getFinancedirector());
formmain_0831.put("璐㈠姟閮ㄨ礋璐d汉绛惧瓧", serviceFund.getFinancedirector());
- formmain_0831.put("琛ㄨ揪绫诲瀷", null);
+ formmain_0831.put("琛ㄨ揪绫诲瀷", StringUtils.isEmpty(serviceFund.getApplytype()) ? null : ApplyTypeEnum.getDescByCode(serviceFund.getApplytype()));
formmain_0831.put("绋庡墠閲戦鍚堣", serviceFund.getPretaxcost());
formmain_0831.put("绋庨鍚堣", serviceFund.getPretaxcost() - serviceFund.getTaxedcost());
formmain_0831.put("琛ㄥ崟缂栧彿1", null);
@@ -788,6 +954,33 @@
formmain_0831.put("琛ㄥ崟缂栧彿", serviceFund.getId());
formmain_0831.put("鍘嗗彶瀹℃壒鍗曟煡璇�", null);
return formmain_0831;
+ }
+
+
+ public String getLastApprovalInfo(List<ServiceFundflow> serviceFundflows, String managerName) {
+ log.info("---------------serviceFundflows鐨勫叆鍙備负锛歿},managerName鐨勫�间负锛歿}", serviceFundflows, managerName);
+ if (StringUtils.isEmpty(managerName)) return "";
+ if (CollectionUtils.isEmpty(serviceFundflows)) {
+ //濡傛灉鏄渶鍚庝竴涓汉瀹℃壒锛岃繖涓椂鍊欏彲鑳絝low閲岃繕娌℃湁鐢熸垚杩涘幓
+ SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ return "瀹℃壒浜猴細" + managerName + " & 瀹℃壒鏃堕棿锛�" + sd.format(new Date()) + " & 瀹℃壒缁撴灉锛氶�氳繃";
+ }
+ //鍘讳竴涓嬬┖鏍�
+ String mn = managerName.trim();
+ Optional<ServiceFundflow> lastApproval = serviceFundflows.stream().filter(flow -> mn.trim().contains(flow.getCheckusername())).max(Comparator.comparing(ServiceFundflow::getCreateTime));
+
+ if (lastApproval.isPresent()) {
+ ServiceFundflow flow = lastApproval.get();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ if (flow.getCheckTime() == null) {
+ flow.setCheckTime(new Date());
+ }
+ String formattedTime = sdf.format(flow.getCheckTime());
+
+ return "瀹℃壒浜猴細" + managerName + " & 瀹℃壒鏃堕棿锛�" + formattedTime + " & 瀹℃壒缁撴灉锛氶�氳繃";
+ }
+
+ return "";
}
@Override
@@ -828,13 +1021,12 @@
serviceFunddetailShareds.get(i).setId(null);
//鏁版嵁鍙戦�佺粰璐㈠姟
try {
- if (!active.equals("druid")) uploadOAFileAndUpdateDb(serviceFunddetailShareds.get(i));
+ if (isUploadOaEnabled()) uploadOAFileAndUpdateDb(serviceFunddetailShareds.get(i));
} catch (Exception e) {
- e.printStackTrace();
- log.error("Exception涓叆鍙傜殑ID涓猴細{},寮傚父淇℃伅涓� 锛� {}", id, e.getMessage());
+ log.error("璐圭敤闄勪欢涓婁紶鍖婚櫌鍗忓弸绯荤粺澶辫触锛氬崟鎹甶d={}锛堟湰娆℃姤閿�鍗曚笂浼犳暣浣撳け璐ワ紝瀹℃壒涓嶇敓鏁堬級", id, e);
if (id != null) {
Boolean aBoolean = sharedService.delfundsharedInfoById(null, id);
- log.error("fund2鍒嗕韩琛ㄩ噷鐨勬暟鎹槸鍚﹀垹闄ゆ垚鍔燂細{}", aBoolean);
+ log.error("宸插洖婊氬垎浜〃鏁版嵁锛歿}", aBoolean);
}
return false;
}
@@ -1364,8 +1556,23 @@
}
@Override
+ public ExpertFeeCheckResult validateExpertFee(ServiceFundVO serviceFundVO) {
+ return expertFeeValidateService.validateBeforeSave(serviceFundVO);
+ }
+
+ @Override
@Transactional(rollbackFor = Exception.class)
public Long addOrUpdateNew(ServiceFundVO serviceFundVO) {
+ // 涓撳鍔冲姟璐癸細淇濆瓨鍓嶆牎楠� 9 鏉¤垂鐢ㄦ帶鍒惰鍒欙紙鍚屼竴妗堜緥绱锛�
+ ExpertFeeCheckResult expertFeeResult = expertFeeValidateService.validateBeforeSave(serviceFundVO);
+ if (expertFeeResult.hasError()) {
+ throw new BaseException(expertFeeResult.errorMessage());
+ }
+ if (expertFeeResult.hasWarning()) {
+ // 瑙勫垯 5銆�6 浠呮彁绀猴紝涓嶉樆鏂繚瀛橈紱鍓嶇鍗曠嫭鍙栫敤鎻愮ず鏂囨
+ log.warn("涓撳鍔冲姟璐逛繚瀛樻牎楠屾彁绀猴細{}", expertFeeResult.warningMessage());
+ }
+
Long id = null;
//灏嗘暟鎹繚瀛樺埌fund琛�
serviceFundVO.setUploadStates(0);
@@ -1427,10 +1634,9 @@
return null;
}
- //鎬荤◣鍓�
- Double pretaxcosts = 0.00;
- //鎬荤◣鍚�
- Double taxedcosts = 0.00;
+ //鎬荤◣鍓嶃�佹�荤◣鍚庯紙閲戦绱姞鐢� BigDecimal锛岄伩鍏嶆诞鐐瑰熬宸級
+ BigDecimal pretaxcosts = BigDecimal.ZERO;
+ BigDecimal taxedcosts = BigDecimal.ZERO;
for (ServiceFunddetailVO serviceFunddetailVO : serviceFunddetails) {
serviceFunddetailVO.setFundid(id);
@@ -1439,13 +1645,18 @@
if (!performance.isEmpty()) {
Double amount = performance.get("amount");
Double taxedamount = performance.get("taxedamount");
- pretaxcosts = pretaxcosts + amount;
- taxedcosts = taxedcosts + taxedamount;
+ if (amount != null) {
+ pretaxcosts = pretaxcosts.add(BigDecimal.valueOf(amount));
+ }
+ if (taxedamount != null) {
+ taxedcosts = taxedcosts.add(BigDecimal.valueOf(taxedamount));
+ }
}
- serviceFundVO.setPretaxcost(pretaxcosts);
- serviceFundVO.setTaxedcost(taxedcosts);
- updateById(serviceFundVO);
}
+ // 鍚堣鍦ㄥ惊鐜粨鏉熷悗缁熶竴鍥炲啓锛屽師鏉ュ啓鍦ㄥ惊鐜唴浼氭瘡琛岄兘 UPDATE 涓�娆★紝涓斾腑闂村�艰鍙嶅瑕嗙洊
+ serviceFundVO.setPretaxcost(pretaxcosts.doubleValue());
+ serviceFundVO.setTaxedcost(taxedcosts.doubleValue());
+ updateById(serviceFundVO);
Map map = new HashMap();
map.put("fundId", id);
return map;
@@ -1660,10 +1871,18 @@
log.info("filePath鐨勪慨鏀�:{}", filePath);
String url = rbDetailFile.getUrl();
//file鐢ㄧ殑鏄粷瀵逛綅缃�
- String substring = 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 substring = url.substring(profileIdx + "/profile/upload".length());
// String strFile = rbDetailFile.getUrl().replace(filePath, "/profile/upload");
System.out.println("fund鏈嶅姟鐨刦ilePath + substring: " + filePath + substring);
File filetest = new File(filePath + substring);
+ if (!filetest.exists()) {
+ throw new ServiceException("闄勪欢鏂囦欢鍦ㄦ湇鍔″櫒涓婁笉瀛樺湪锛屾棤娉曚笂浼犲崗鍙嬶細" + filetest.getAbsolutePath());
+ }
String struploadResult = HttpClientKit.sendPostWithFile(filetest, strFUrl);
log.info("绗笁鏂逛紶鍥炵殑鏁版嵁: {}", struploadResult);
@@ -1762,7 +1981,8 @@
}
- public void sendMeg(ServiceProcessVO serviceProcessVO, String phone) {
+ public void sendMeg(ServiceProcessVO serviceProcessVO, String phone,
+ List<ConcurrentHashMap<String, Object>> contentList) {
//璁板綍鎿嶄綔璁板綍
ServiceFundflow serviceFundflow = new ServiceFundflow();
@@ -1770,6 +1990,7 @@
serviceFundflow.setUpdateBy(serviceProcessVO.getCheckusername());
serviceFundflow.setCheckusername(serviceProcessVO.getCheckusername());
serviceFundflow.setCreateTime(new Date());
+ serviceFundflow.setCheckTime(new Date());
serviceFundflow.setUpdateTime(new Date());
serviceFundflow.setFlowcontent(serviceProcessVO.getFlowcontent());
serviceFundflow.setFlowconclusion(StringUtils.isNotEmpty(serviceProcessVO.getFlowconclusion()) ? Integer.valueOf(serviceProcessVO.getFlowconclusion()) : null);
@@ -1779,18 +2000,15 @@
serviceFundflow.setApplytype(serviceProcessVO.getApplytype());
serviceFundflow.setFundid(StringUtils.isNotEmpty(serviceProcessVO.getBackCode()) ? Long.valueOf(serviceProcessVO.getBackCode()) : null);
fundflowService.save(serviceFundflow);
-
- ArrayList<ConcurrentHashMap<String, Object>> contentList = new ArrayList<>();
- ConcurrentHashMap map = new ConcurrentHashMap();
- map.put("瀹℃壒浜猴細", serviceProcessVO.getCheckusername());
- map.put("瀹℃壒鏃堕棿锛�", serviceProcessVO.getCheckTime());
- map.put("鎰忚锛�", serviceProcessVO.getFlowcontent());
- contentList.add(map);
- DingTalkReqVo dingTalkReqVo = new DingTalkReqVo();
- dingTalkReqVo.setTitle("璐㈠姟绯荤粺淇℃伅");
- dingTalkReqVo.setNumber(phone);
- dingTalkReqVo.setContents(contentList);
- log.info("閽夐拤鍙戦�佹秷鎭�:{}", dingTalkReqVo);
- dingTalkService.sendNotification(dingTalkReqVo);
+ try {
+ DingTalkReqVo dingTalkReqVo = new DingTalkReqVo();
+ dingTalkReqVo.setTitle(FundNotifyMessageBuilder.TITLE);
+ dingTalkReqVo.setNumber(phone);
+ dingTalkReqVo.setContents(contentList);
+ log.info("閽夐拤鍙戦�佹秷鎭�:{}", dingTalkReqVo);
+ dingTalkService.sendNotification(dingTalkReqVo);
+ } catch (Exception e) {
+ log.error("鎶ラ攢瀹℃壒閽夐拤娑堟伅鍙戦�佸け璐ワ紝涓嶅奖鍝嶄富娴佺▼", e);
+ }
}
}
--
Gitblit v1.9.3