From db5240c1ad2a2926297c9febb6383384abea1082 Mon Sep 17 00:00:00 2001
From: czt <czt18638530771@163.com>
Date: 星期三, 28 一月 2026 19:08:32 +0800
Subject: [PATCH] 质押合同还款金额提醒功能
---
fzzy-igdss-core/src/main/java/com/fzzy/igds/timer/JobWarnService.java | 134 +++++++++++++++++++
fzzy-igdss-core/src/main/java/com/fzzy/work/data/WorkBizType.java | 1
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/PledgeContractService.java | 17 ++
fzzy-igdss-core/src/main/java/com/fzzy/igds/timer/SystemScheduled.java | 2
fzzy-igdss-view/src/main/java/com/fzzy/igds/PledgeContractPR.java | 12 +
fzzy-igdss-view/src/main/java/com/fzzy/igds/PledgeContract-Detail.view.xml | 142 ++++++++++++++++++++
fzzy-igdss-core/src/main/java/com/fzzy/work/service/BizWorkService.java | 47 ++++++
fzzy-igdss-core/src/main/java/com/fzzy/igds/service/FoodPriceService.java | 20 ++
8 files changed, 372 insertions(+), 3 deletions(-)
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/FoodPriceService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/FoodPriceService.java
index d4e02e3..3497ad2 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/FoodPriceService.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/FoodPriceService.java
@@ -44,6 +44,26 @@
}
/**
+ * 鏍规嵁閾惰鍙婂搧绉嶏紝鏌ヨ鍗曚环淇℃伅
+ * @param bankId
+ * @param foodVariety
+ * @return
+ */
+ public FoodPrice getDataByBankAndFood(String bankId, String foodVariety) {
+ SysUser user = ContextUtil.getLoginUser();
+
+ QueryWrapper<FoodPrice> queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("bank_id", bankId);
+ queryWrapper.eq("food_variety", foodVariety);
+
+ List<FoodPrice> foodPrices = foodPriceMapper.selectList(queryWrapper);
+ if(null == foodPrices){
+ return null;
+ }
+ return foodPrices.get(0);
+ }
+
+ /**
* 鏇存柊鎴栦繚瀛樹俊鎭�
* @param data
* @return
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/PledgeContractService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/PledgeContractService.java
index b69c986..5ee2e2d 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/PledgeContractService.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/service/PledgeContractService.java
@@ -4,6 +4,7 @@
import com.fzzy.igds.constant.Constant;
import com.fzzy.igds.data.BaseResp;
import com.fzzy.igds.data.IgdsBaseParam;
+import com.fzzy.igds.domain.InoutNoticeIn;
import com.fzzy.igds.domain.PledgeContract;
import com.fzzy.igds.mapper.PledgeContractMapper;
import com.fzzy.igds.utils.ContextUtil;
@@ -50,6 +51,18 @@
queryWrapper.orderByDesc("update_time");
return pledgeContractMapper.selectList(queryWrapper);
+ }
+
+ /**
+ * 鏍规嵁鏉′欢鏌ヨ
+ * @param id
+ * @return
+ */
+ public PledgeContract getOne(String id) {
+
+ QueryWrapper<PledgeContract> queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq("id", id);
+ return pledgeContractMapper.selectOne(queryWrapper);
}
@@ -104,8 +117,8 @@
queryWrapper.like("status", Constant.YN_N);
//璐ㄦ娂鏈熼棿
- queryWrapper.ge("pledge_start", curTime);
- queryWrapper.le("pledge_end", curTime);
+ queryWrapper.le("pledge_start", curTime);
+ queryWrapper.ge("pledge_end", curTime);
queryWrapper.orderByDesc("update_time");
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/timer/JobWarnService.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/timer/JobWarnService.java
new file mode 100644
index 0000000..4b94471
--- /dev/null
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/timer/JobWarnService.java
@@ -0,0 +1,134 @@
+package com.fzzy.igds.timer;
+
+import com.fzzy.igds.constant.Constant;
+import com.fzzy.igds.data.BaseResp;
+import com.fzzy.igds.domain.Depot;
+import com.fzzy.igds.domain.FoodPrice;
+import com.fzzy.igds.domain.PledgeContract;
+import com.fzzy.igds.service.DepotService;
+import com.fzzy.igds.service.FoodPriceService;
+import com.fzzy.igds.service.PledgeContractService;
+import com.fzzy.work.data.WorkBizType;
+import com.fzzy.work.domain.WorkOrderConf;
+import com.fzzy.work.service.BizWorkService;
+import com.ruoyi.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description 璀﹀憡淇℃伅瀹氭椂缁熻锛氳繕娆炬彁閱�
+ * @Author CZT
+ * @Date 2026/1/23 9:14
+ */
+@Slf4j
+
+@Service
+public class JobWarnService {
+
+ @Resource
+ private PledgeContractService contractService;
+ @Resource
+ private DepotService depotService;
+ @Resource
+ private FoodPriceService foodPriceService;
+ @Resource
+ private BizWorkService workService;
+
+ /**
+ * 姣忓ぉ涓ょ偣鎵ц锛氳繕娆炬彁閱�
+ */
+// @Scheduled(cron = "0 0 2 * * ?")
+ @Scheduled(cron = "0 7 19 * * ?")
+ public void timer() {
+ doExe();
+ }
+
+ /**
+ * 寮�濮嬭川鎶煎悎鍚屾牳绠�
+ */
+ public void doExe() {
+
+ List<PledgeContract> contractList = contractService.getContractByPledge(new Date());
+ if(null == contractList || contractList.isEmpty()){
+ log.error("-----褰撳墠娌℃湁鏈夋晥鏈熺殑璐ㄦ娂鍚堝悓锛屼笉鎵ц鎻愰啋鏍哥畻-----");
+ return;
+ }
+
+ Depot depot;
+ FoodPrice foodPrice;
+ WorkOrderConf conf;
+ double sumMoney = 0.0;
+ double per = 0.0;
+ double backMoney = 0.0;
+ for (PledgeContract pledgeContract : contractList) {
+ log.info("-----寮�濮嬪鐞嗚川鎶煎悎鍚岋細{}-----", pledgeContract.getContractName());
+
+ //璁$畻寰呰繕娆鹃噾棰�
+ backMoney = pledgeContract.getContractAmount() - pledgeContract.getRepaidAmount();
+ if(backMoney <= 0.0){
+ //鑻ュ緟杩橀噾棰濅负0锛屽垯涓嶇粺璁℃鍚堝悓
+ log.error("-----褰撳墠鍚堝悓={}娌℃湁寰呰繕閲戦涓簕}锛屼笉鎵ц鎻愰啋鏍哥畻-----", pledgeContract.getContractName(), backMoney);
+ continue;
+ }
+
+ if(StringUtils.isBlank(pledgeContract.getPledgeBank())){
+ //鑻ヨ川鎶奸摱琛屾湭绌猴紝鍒欒烦杩囧綋鍓嶅悎鍚�
+ log.error("-----褰撳墠鍚堝悓={}娌℃湁璁剧疆璐ㄦ娂閾惰锛屼笉鎵ц鎻愰啋鏍哥畻-----", pledgeContract.getContractName());
+ continue;
+ }
+
+ if(StringUtils.isBlank(pledgeContract.getDepotIds())){
+ //鑻ヨ川鎶间粨搴撲负绌猴紝鍒欒烦杩囧綋鍓嶅悎鍚�
+ log.error("-----褰撳墠鍚堝悓={}娌℃湁璁剧疆璐ㄦ娂浠撳簱锛屼笉鎵ц鎻愰啋鏍哥畻-----", pledgeContract.getContractName());
+ continue;
+ }
+
+ String[] depotIds = pledgeContract.getDepotIds().split(",");
+ if(depotIds.length < 1){
+ //鑻ヨ川鎶间粨搴撲负绌猴紝鍒欒烦杩囧綋鍓嶅悎鍚�
+ log.error("-----褰撳墠鍚堝悓={}娌℃湁璁剧疆璐ㄦ娂浠撳簱锛屼笉鎵ц鎻愰啋鏍哥畻-----", pledgeContract.getContractName());
+ continue;
+ }
+ sumMoney = 0.0;
+ for (String depotId : depotIds) {
+ //鏌ヨ浠撳簱淇℃伅
+ depot = depotService.getCacheDepot(pledgeContract.getCompanyId(), depotId);
+ if(null == depot){
+ log.error("-----褰撳墠鍚堝悓={}涓嬩粨搴�={}涓嶅瓨鍦紝涓嶇粺璁℃浠撳簱-----", pledgeContract.getContractName(), depotId);
+ continue;
+ }
+ if(null == depot.getStorageReal()){
+ depot.setStorageReal(0.0);
+ }
+
+ foodPrice = foodPriceService.getDataByBankAndFood(pledgeContract.getPledgeBank(), depot.getFoodVariety());
+ if(null == foodPrice || null == foodPrice.getPrice()){
+ log.error("-----褰撳墠鍚堝悓={}涓嬩粨搴�={}瀵瑰簲鐨勫搧绉�={}鏈厤缃环鏍硷紝涓嶇粺璁℃浠撳簱-----", pledgeContract.getContractName(),depot.getName(), depot.getFoodVariety());
+ continue;
+ }
+
+ sumMoney += depot.getStorageReal() * foodPrice.getPrice();
+ }
+
+ per = sumMoney/backMoney;
+
+ if(per <= 1.2){
+ //鎵ц娴佺▼
+ conf = workService.getConfByDeptId(pledgeContract.getPledgeDept(), WorkBizType.TYPE_50);
+ //娴佺▼涓嶅惎鐢�
+ if (null == conf || Constant.YN_N.equals(conf.getValTag())) {
+ log.error("-----褰撳墠鍚堝悓={}璐ㄦ娂搴撳尯={}鏈厤缃繕娆炬彁閱掑鎵规祦绋嬶紝鏃犳硶鐢熸垚宸ュ崟鎻愰啋-----", pledgeContract.getContractName(),pledgeContract.getPledgeDept());
+ continue;
+ }
+
+ BaseResp resp = workService.startByBackMoney(pledgeContract, conf);
+ log.info("---------褰撳墠鍚堝悓={}鍚姩杩樻鎻愰啋宸ュ崟娴佺▼------{}",pledgeContract.getContractName(), resp);
+ }
+ }
+ }
+
+}
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/igds/timer/SystemScheduled.java b/fzzy-igdss-core/src/main/java/com/fzzy/igds/timer/SystemScheduled.java
index dac4b06..928c3fe 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/igds/timer/SystemScheduled.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/igds/timer/SystemScheduled.java
@@ -70,7 +70,7 @@
//璁剧疆鍒犻櫎鍙傛暟
SysOperLog deleteOperLog = new SysOperLog();
//璁剧疆鍒犻櫎鎴鏃堕棿
- String endTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtil.getNewByDay(new Date(), -30));
+ String endTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtil.getNewByDay(new Date(), -90));
Map<String, Object> params = new HashMap<>();
params.put("endTime", endTime);
deleteOperLog.setParams(params);
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/work/data/WorkBizType.java b/fzzy-igdss-core/src/main/java/com/fzzy/work/data/WorkBizType.java
index bd43fd1..c739507 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/work/data/WorkBizType.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/work/data/WorkBizType.java
@@ -11,6 +11,7 @@
TYPE_20("20", "鍑哄簱閫氱煡鍗曟祦绋�"),
TYPE_30("30", "AI浜嬩欢"),
TYPE_40("40", "棰勮/璀﹀憡"),
+ TYPE_50("50", "杩樻鎻愰啋"),
TYPE_99("99", "鍏朵粬");
private String code;
diff --git a/fzzy-igdss-core/src/main/java/com/fzzy/work/service/BizWorkService.java b/fzzy-igdss-core/src/main/java/com/fzzy/work/service/BizWorkService.java
index cd9dea8..6cc150e 100644
--- a/fzzy-igdss-core/src/main/java/com/fzzy/work/service/BizWorkService.java
+++ b/fzzy-igdss-core/src/main/java/com/fzzy/work/service/BizWorkService.java
@@ -4,6 +4,7 @@
import com.fzzy.igds.data.BaseResp;
import com.fzzy.igds.domain.InoutNoticeIn;
import com.fzzy.igds.domain.InoutNoticeOut;
+import com.fzzy.igds.domain.PledgeContract;
import com.fzzy.igds.utils.ContextUtil;
import com.fzzy.work.data.WorkStatus;
import com.fzzy.work.data.WorkBizType;
@@ -165,6 +166,52 @@
}
/**
+ *
+ * 鏍规嵁鍑哄叆搴撻�氱煡鍗曞惎鍔ㄥ鎵瑰伐鍗�
+ * @param data 鍑哄叆搴撳伐鍗曟暟鎹�
+ * @return 鍝嶅簲缁撴灉
+ */
+ public BaseResp startByBackMoney(PledgeContract data, WorkOrderConf conf) {
+
+ if (null == conf) conf = confService.getByDeptId(data.getPledgeDept(), WorkBizType.TYPE_10);
+
+ if (Constant.YN_N.equals(conf.getValTag())) return BaseResp.error("娴佺▼鏈惎鐢�");
+
+ //鍒涘缓宸ュ崟
+ WorkOrder work = new WorkOrder();
+ work.setId(ContextUtil.generateOrderId("WARN"));
+ work.setBizType(WorkBizType.TYPE_50.getCode());
+ work.setBusinessId(data.getId());
+ work.setBankId(data.getPledgeBank());
+ work.setBusinessUrl("com.fzzy.igds.PledgeContract-Detail.d");
+ work.setCreateTime(new Date());
+ work.setDeptId(data.getPledgeDept());
+ work.setCompanyId(data.getCompanyId());
+ work.setUpdateTime(new Date());
+ work.setTitle("璐ㄦ娂鍚堝悓杩樻鎻愰啋");
+ work.setConfId(conf.getId());
+ work.setStatus(WorkStatus.STATUS_30.getCode());
+ work.setReceiveTime(new Date());
+
+ String nextNode = this.getNextNode(WorkNode.NODE_START.getCode(), conf).getCode();
+ work.setNode(nextNode);
+ orderService.addData(work);
+
+ //娣诲姞璁板綍
+ WorkOrderProcess process = new WorkOrderProcess();
+ process.setId(ContextUtil.UUID());
+ process.setAction("鎻愪氦");
+ process.setCreateTime(new Date());
+ process.setOrderId(work.getId());
+ process.setAssigneeName(work.getCreateBy());
+ process.setAssigneeId(work.getCreateById());
+ process.setNode(WorkNode.NODE_START.getCode());
+ orderProcessService.addData(process, false);
+
+ return BaseResp.success();
+ }
+
+ /**
* 鑾峰彇寰呭鐞嗗伐鍗�
* @return 澶勭悊缁撴灉
*/
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/PledgeContract-Detail.view.xml b/fzzy-igdss-view/src/main/java/com/fzzy/igds/PledgeContract-Detail.view.xml
new file mode 100644
index 0000000..c7fd8f7
--- /dev/null
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/PledgeContract-Detail.view.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ViewConfig>
+ <Arguments/>
+ <Context/>
+ <Model/>
+ <View layout="padding:10">
+ <Property name="packages">font-awesome,css-common</Property>
+ <DataSet id="dsMain">
+ <Property name="dataType">dtMain</Property>
+ <Property name="dataProvider">pledgeContractPR#getOne</Property>
+ <Property name="loadMode">lazy</Property>
+ <Property name="parameter">${request.getParameter('businessId')}</Property>
+ <Property name="readOnly">true</Property>
+ </DataSet>
+ <Container>
+ <Property name="className">c-data</Property>
+ <AutoForm layoutConstraint="top ">
+ <Property name="dataSet">dsMain</Property>
+ <Property name="showHint">false</Property>
+ <Property name="cols">210,*,210</Property>
+ <Control/>
+ <AutoFormElement>
+ <Property name="name">name</Property>
+ <Property name="property">name</Property>
+ <Property name="editorType">Label</Property>
+ <Property name="showLabel">false</Property>
+ <Property name="showHint">false</Property>
+ <Property name="className">f-title</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">id</Property>
+ <Property name="property">id</Property>
+ <Property name="editorType">Label</Property>
+ <Property name="showHint">false</Property>
+ <Property name="labelAlign">right</Property>
+ <Property name="showLabel">false</Property>
+ <Editor/>
+ </AutoFormElement>
+ </AutoForm>
+ <AutoForm>
+ <Property name="dataSet">dsMain</Property>
+ <Property name="cols">*,*,*</Property>
+ <Property name="labelAlign">right</Property>
+ <Property name="labelSeparator">锛�</Property>
+ <Property name="labelWidth">120</Property>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">name</Property>
+ <Property name="property">name</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">pledgeBank</Property>
+ <Property name="property">pledgeBank</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">pledgeCompany</Property>
+ <Property name="property">pledgeCompany</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">pledgeDept</Property>
+ <Property name="property">pledgeDept</Property>
+ <Property name="trigger">dsDeptDropDown</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">depotNames</Property>
+ <Property name="property">depotNames</Property>
+ <Property name="trigger">CDDDept</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">signTime</Property>
+ <Property name="property">signTime</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">pledgeStart</Property>
+ <Property name="property">pledgeStart</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">pledgeEnd</Property>
+ <Property name="property">pledgeEnd</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:2">
+ <Property name="name">contractName</Property>
+ <Property name="property">contractName</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">contractNo</Property>
+ <Property name="property">contractNo</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">contractAmount</Property>
+ <Property name="property">contractAmount</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">repaidAmount</Property>
+ <Property name="property">repaidAmount</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">status</Property>
+ <Property name="property">status</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement layoutConstraint="colSpan:3">
+ <Property name="name">remark</Property>
+ <Property name="property">remark</Property>
+ <Property name="editorType">TextArea</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">createBy</Property>
+ <Property name="property">createBy</Property>
+ <Property name="readOnly">true</Property>
+ <Editor/>
+ </AutoFormElement>
+ <AutoFormElement>
+ <Property name="name">createTime</Property>
+ <Property name="property">createTime</Property>
+ <Property name="readOnly">true</Property>
+ <Editor/>
+ </AutoFormElement>
+ <HtmlContainer layoutConstraint="colSpan:3">
+ <Property name="content">1.褰撳墠鍗曟嵁浠呬綔涓哄綋鍓嶇郴缁熶笟鍔′俊鎭櫥璁颁娇鐢紝涓嶄綔涓哄疄闄呭弻鏂瑰悎绾︾害鏉熴��<br>
+ 2.褰撳墠鍗曟嵁榛樿鏀寔涓�1涓悎绾﹀搴�1涓簱鍖猴紝濡傛灉鍚屾椂瀵瑰簲澶氫釜搴撳尯璇锋暟鎹櫥璁般��<br>
+ 3.璐ㄦ娂鐘舵�佸鏋�=瑙f娂锛岀郴缁熷搴斿偓鍔炴彁閱掔瓑鍔熻兘鑷姩瀹屾垚銆�<br></Property>
+ <Property name="exClassName">h-tip</Property>
+ <Property name="contentOverflow">hidden</Property>
+ </HtmlContainer>
+ </AutoForm>
+ </Container>
+ </View>
+</ViewConfig>
diff --git a/fzzy-igdss-view/src/main/java/com/fzzy/igds/PledgeContractPR.java b/fzzy-igdss-view/src/main/java/com/fzzy/igds/PledgeContractPR.java
index 35f46ea..4f3f36a 100644
--- a/fzzy-igdss-view/src/main/java/com/fzzy/igds/PledgeContractPR.java
+++ b/fzzy-igdss-view/src/main/java/com/fzzy/igds/PledgeContractPR.java
@@ -7,6 +7,7 @@
import com.fzzy.igds.constant.Constant;
import com.fzzy.igds.data.BaseResp;
import com.fzzy.igds.data.IgdsBaseParam;
+import com.fzzy.igds.domain.InoutNoticeIn;
import com.fzzy.igds.domain.PledgeContract;
import com.fzzy.igds.service.PledgeContractService;
import com.fzzy.igds.utils.ContextUtil;
@@ -53,6 +54,17 @@
}
/**
+ * pledgeContractPR#getOne
+ *
+ * @param businessId
+ * @return
+ */
+ @DataProvider
+ public PledgeContract getOne(String businessId) {
+ return pledgeContractService.getOne(businessId);
+ }
+
+ /**
* 淇濆瓨/鏇存柊
*
* @param pledgeContract
--
Gitblit v1.9.3