From 5a16032353faae10768575ea8565684f3f43987d Mon Sep 17 00:00:00 2001 From: yuxueliang0813 <407010292@qq.com> Date: Thu, 13 Mar 2025 18:36:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E6=94=B6=E6=AC=BE=E8=AE=A4?= =?UTF-8?q?=E9=A2=86=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/task/FundPlanCollectionTask.java | 2 +- .../fi/plugin/task/NotCreditedNoticeTask.java | 1 + .../plugin/task/ReceBillToClearBillTask.java | 6 +- .../fi/plugin/task/UnclaimedNoticeTask.java | 88 +++++++++++++++++++ .../shjh/jhzj7/fi/fi/utils/JhzjUtils.java | 63 +++++++++++++ .../jhzj7/fi/fi/webapi/PersonControler.java | 16 +++- 6 files changed, 168 insertions(+), 8 deletions(-) create mode 100644 main/java/shjh/jhzj7/fi/fi/plugin/task/UnclaimedNoticeTask.java diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanCollectionTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanCollectionTask.java index 5c83af9..7933c78 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanCollectionTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/FundPlanCollectionTask.java @@ -25,7 +25,7 @@ public class FundPlanCollectionTask extends AbstractTask implements Plugin { @Override public void execute(RequestContext requestContext, Map map) throws KDException { - //查询当月已审核收款类资金计划(收款不区分公司,当月应只有一个) + //TODO 查询当月已审核收款类资金计划(收款不区分公司,当月应只有一个) QFilter qFilter = new QFilter("receredtype", QCP.equals, "0"); qFilter.and("creditamount", QCP.not_equals, BigDecimal.ZERO); qFilter.and("claimnoticebillno", QCP.equals, ""); diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/NotCreditedNoticeTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/NotCreditedNoticeTask.java index 3ac397b..46997b8 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/NotCreditedNoticeTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/NotCreditedNoticeTask.java @@ -21,6 +21,7 @@ import java.util.*; /** * 定时任务 未入账收付款流水通知 + * 流水单实体 bei_transdetail * @author yuxueliang */ public class NotCreditedNoticeTask extends AbstractTask implements Plugin { diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/ReceBillToClearBillTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/ReceBillToClearBillTask.java index bd89df3..b3346cb 100644 --- a/main/java/shjh/jhzj7/fi/fi/plugin/task/ReceBillToClearBillTask.java +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/ReceBillToClearBillTask.java @@ -17,8 +17,8 @@ import java.math.BigDecimal; import java.util.Map; /** - * 定时任务收款单自动下推生成清账单 - * @author yuxueliang + * 定时任务 收款单自动下推生成清账单 + * @author LiGuiQiang */ public class ReceBillToClearBillTask extends AbstractTask implements Plugin { private static final String srcEntityName = "cas_recbill";//源单 收款单 @@ -28,7 +28,7 @@ public class ReceBillToClearBillTask extends AbstractTask implements Plugin { @Override public void execute(RequestContext requestContext, Map map) throws KDException { - //设置定时任务,按时下推清账单,T+1日下推T及T之前收款单,生成清账单 + //TODO 设置定时任务,按时下推清账单,T+1日下推T及T之前收款单,生成清账单 QFilter qFilter = new QFilter("receredtype", QCP.equals, "0"); qFilter.and("creditamount", QCP.not_equals, BigDecimal.ZERO); qFilter.and("claimnoticebillno", QCP.equals, ""); diff --git a/main/java/shjh/jhzj7/fi/fi/plugin/task/UnclaimedNoticeTask.java b/main/java/shjh/jhzj7/fi/fi/plugin/task/UnclaimedNoticeTask.java new file mode 100644 index 0000000..8127668 --- /dev/null +++ b/main/java/shjh/jhzj7/fi/fi/plugin/task/UnclaimedNoticeTask.java @@ -0,0 +1,88 @@ +package shjh.jhzj7.fi.fi.plugin.task; + +import kd.bos.context.RequestContext; +import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.exception.KDException; +import kd.bos.logging.Log; +import kd.bos.logging.LogFactory; +import kd.bos.orm.query.QCP; +import kd.bos.orm.query.QFilter; +import kd.bos.schedule.executor.AbstractTask; +import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.sdk.plugin.Plugin; +import shjh.jhzj7.fi.fi.utils.JhzjUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 定时任务 业务收款认领通知 仅发送N-1及之前的未认领单据 + * @author yuxueliang + */ +public class UnclaimedNoticeTask extends AbstractTask implements Plugin { + + private static final String entityName = "cas_claimannounce";//认领中心-公告 + + private static final Log logger = LogFactory.getLog(UnclaimedNoticeTask.class); + + @Override + public void execute(RequestContext requestContext, Map map) throws KDException { + //获取昨天的日期字符串 + LocalDate yesterday = LocalDate.now().minusDays(1); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String yesterdayStr = yesterday.format(formatter); + logger.info("昨天"+yesterdayStr); + QFilter qFilter = new QFilter("businesstype", QCP.equals, "rec");//业务类型-收款 + qFilter.and("claimstatus", QCP.equals, "0");//认领通知单状态-待认领 + try { + qFilter.and("createtime", QCP.less_than, new SimpleDateFormat("yyyy-MM-dd").parse(yesterdayStr));//截至到昨天之前的 + } catch (ParseException e) { + logger.info("日期格式化异常"+e.getMessage()); + throw new RuntimeException(e); + } + DynamicObject[] colls = BusinessDataServiceHelper.load(entityName, "id", qFilter.toArray()); + DynamicObjectCollection usercolls; + Map> userBills = new HashMap<>();//缓存用户和认领单的关系 + String userid; + List billlist; + for(DynamicObject dio : colls){ + dio = BusinessDataServiceHelper.loadSingle(dio.getLong("id"),entityName); + usercolls = dio.getDynamicObjectCollection("entryentity1");//认领人集合 + for(DynamicObject userinfo : usercolls){ + if("1".equals(userinfo.getString("claimtype"))){ + //认领类别 是用户 + userid = userinfo.getString("claimtypeid"); + billlist = userBills.get(userid); + if(billlist == null){ + billlist = new ArrayList<>(); + userBills.put(userid,billlist); + } + billlist.add(dio); + } + } + } + + //遍历map发送消息 + List receivers = new ArrayList<>(1);//消息接收人 + String title; + String content; + for (Map.Entry> entry : userBills.entrySet()) { + userid = entry.getKey(); + billlist = entry.getValue(); + receivers.clear(); + receivers.add(Long.parseLong(userid)); + title = "业务认领通知"; + content = "请登录资金系统处理认领公告 共"+billlist.size()+"笔\n"; + JhzjUtils.sendEmail(title,content+JhzjUtils.getTableHtml(billlist),receivers); + JhzjUtils.sendWEIXINQY(title,content,receivers); + } + } + +} diff --git a/main/java/shjh/jhzj7/fi/fi/utils/JhzjUtils.java b/main/java/shjh/jhzj7/fi/fi/utils/JhzjUtils.java index 6d16ef6..043fe02 100644 --- a/main/java/shjh/jhzj7/fi/fi/utils/JhzjUtils.java +++ b/main/java/shjh/jhzj7/fi/fi/utils/JhzjUtils.java @@ -76,6 +76,69 @@ public class JhzjUtils { SaveServiceHelper.save(new DynamicObject[]{billinfo}); } + /** + * 将认领公告列表组装成html语句中的table + * @param billlist 认领公告的列表 + */ + public static String getTableHtml(List billlist){ + + StringBuffer tabstr = new StringBuffer(); + tabstr.append(" "); + //设置表头-10列 + tabstr.append(" "); + tabstr.append(" "); + //设置表体 + tabstr.append(" "); + //设置每一行数据 + for (DynamicObject doinfo : billlist){ + tabstr.append(" ");//行-开始 + + tabstr.append(" ");//单元格-结束 + + tabstr.append(" "); + + tabstr.append(" "); + + tabstr.append(" "); + + tabstr.append(" "); + + tabstr.append(" "); + + tabstr.append(" "); + + tabstr.append(" "); + + tabstr.append(" "); + + tabstr.append(" "); + + tabstr.append(" ");//行-结束 + } + tabstr.append("
认领通知单 银行账号 对方账号 对方户名 币种 收款金额交易日期 摘要 票据号/明细编号 承兑人名称/明细流水号
");//单元格-开始 + tabstr.append(doinfo.getString("billno"));//认领通知单 + tabstr.append(""); + tabstr.append(doinfo.getDynamicObject("accountbank").getString("bankaccountnumber"));//银行账号 + tabstr.append(""); + tabstr.append(doinfo.getString("oppbanknumber"));//对方账号 + tabstr.append(""); + tabstr.append(doinfo.getString("oppunit"));//对方户名 + tabstr.append(""); + tabstr.append(doinfo.getDynamicObject("currency").getString("name"));//币种 + tabstr.append(""); + tabstr.append(doinfo.getString("reamount"));//收款金额 + tabstr.append(""); + tabstr.append(doinfo.getString("tradetime"));//交易日期 + tabstr.append(""); + tabstr.append(doinfo.getString("description"));//摘要 + tabstr.append(""); + tabstr.append(doinfo.getString("tradedetailno"));//票据号/明细编号 + tabstr.append(""); + tabstr.append(doinfo.getString("detailid"));//承兑人名称/明细流水号 + tabstr.append("
"); + return tabstr.toString(); + } + /** * 组装入参,给指定单个人员发邮件 * @param email 邮箱地址 diff --git a/main/java/shjh/jhzj7/fi/fi/webapi/PersonControler.java b/main/java/shjh/jhzj7/fi/fi/webapi/PersonControler.java index e3c26e3..91d1b09 100644 --- a/main/java/shjh/jhzj7/fi/fi/webapi/PersonControler.java +++ b/main/java/shjh/jhzj7/fi/fi/webapi/PersonControler.java @@ -45,6 +45,7 @@ public class PersonControler implements Serializable { private static final Log log = LogFactory.getLog(PersonControler.class); private static final String apimenthod = "/person_sync"; private static final String insertMmapping = "insert into t_bas_immapping(FID,FOPENID,FUSERID,FIMTYPEID) values (?,?,?,3);"; + private static final String updateMmapping = "update t_bas_immapping set FOPENID=? where FUSERID=?;"; /** * @param bizParam 入参json格式数据 @@ -218,8 +219,8 @@ public class PersonControler implements Serializable { // itemInfo.put("message",""); //更新人员对应客户的银行信息 handlePersonForCustomer(result); - //处理人员金蝶id和企微id的对应关系 - handlePersonImmapping(result); + //新增人员金蝶id和企微id的对应关系 + insertPersonImmapping(result); } } } @@ -240,6 +241,8 @@ public class PersonControler implements Serializable { // itemInfo.put("message",""); //更新人员对应客户的银行信息 handlePersonForCustomer(result); + //修改人员金蝶id和企微id的对应关系 + updatePersonImmapping(result); } } } @@ -256,17 +259,22 @@ public class PersonControler implements Serializable { } } - private void handlePersonImmapping(UserParam ups){ + private void insertPersonImmapping(UserParam ups){ /* * 这里可以使用企业微信同步用户,也可以直接在系统库中t_bas_immapping表插入数据,需要苍穹中用户的主键和微信中用户的openId,可以在苍穹的系统库使用sql: insert into t_bas_immapping (fid, FIMTYPEID, FOPENID) value (主键, 类型(3), '微信公众号用户的openId'); update t_bas_immapping SET FUSERID = (select fid from t_sec_user where fphone = '用户手机号') where fid = '用户手机号'; 如果没有同步用户,即t_bas_immapping表中查不到数据,则会跳转到苍穹登陆界面;用户输入信息之后苍穹会自动在t_bas_immapping中获取openid并存储; */ - //insert into t_bas_immapping(fid,FIMTYPEID,FOPENID,FUSERID) values (1992929292121,3,'690',2116742421407602688) DB.update(DBRoute.of("sys"), insertMmapping, new Object[]{ID.genLongId(),ups.getDataMap().get("shjh_oaid"),ups.getId()}); } + private void updatePersonImmapping(UserParam ups){ + if(!EsbUtils.isEmpty((String) ups.getDataMap().get("shjh_oaid"))){ + DB.update(DBRoute.of("sys"), updateMmapping, new Object[]{ups.getDataMap().get("shjh_oaid"),ups.getId()}); + } + } + private void handlePersonForCustomer(UserParam ups){ String cusnumber = (String) ups.getDataMap().get("number");//客户编号-即是 人员的编号 DynamicObject currentCus = BusinessDataServiceHelper.loadSingle(cusEntityName,new QFilter[]{new QFilter("number","=",cusnumber)});