业务收款认领通知

This commit is contained in:
yuxueliang0813 2025-03-13 18:36:02 +08:00
parent 84d6803603
commit 5a16032353
6 changed files with 168 additions and 8 deletions

View File

@ -25,7 +25,7 @@ public class FundPlanCollectionTask extends AbstractTask implements Plugin {
@Override
public void execute(RequestContext requestContext, Map<String, Object> 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, "");

View File

@ -21,6 +21,7 @@ import java.util.*;
/**
* 定时任务 未入账收付款流水通知
* 流水单实体 bei_transdetail
* @author yuxueliang
*/
public class NotCreditedNoticeTask extends AbstractTask implements Plugin {

View File

@ -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<String, Object> 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, "");

View File

@ -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<String, Object> 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<String, List<DynamicObject>> userBills = new HashMap<>();//缓存用户和认领单的关系
String userid;
List<DynamicObject> 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<Long> receivers = new ArrayList<>(1);//消息接收人
String title;
String content;
for (Map.Entry<String, List<DynamicObject>> 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);
}
}
}

View File

@ -76,6 +76,69 @@ public class JhzjUtils {
SaveServiceHelper.save(new DynamicObject[]{billinfo});
}
/**
* 将认领公告列表组装成html语句中的table
* @param billlist 认领公告的列表
*/
public static String getTableHtml(List<DynamicObject> billlist){
StringBuffer tabstr = new StringBuffer();
tabstr.append("<table border='1'> ");
//设置表头-10列
tabstr.append("<thead> <tr> <th>认领通知单</th> <th>银行账号</th> <th>对方账号</th> <th>对方户名</th> <th>币种</th> <th>收款金额</th> ");
tabstr.append("<th>交易日期</th> <th>摘要</th> <th>票据号/明细编号</th> <th>承兑人名称/明细流水号</th></tr></thead> ");
//设置表体
tabstr.append("<tbody> ");
//设置每一行数据
for (DynamicObject doinfo : billlist){
tabstr.append("<tr> ");//-开始
tabstr.append("<td>");//单元格-开始
tabstr.append(doinfo.getString("billno"));//认领通知单
tabstr.append("</td> ");//单元格-结束
tabstr.append("<td>");
tabstr.append(doinfo.getDynamicObject("accountbank").getString("bankaccountnumber"));//银行账号
tabstr.append("</td> ");
tabstr.append("<td>");
tabstr.append(doinfo.getString("oppbanknumber"));//对方账号
tabstr.append("</td> ");
tabstr.append("<td>");
tabstr.append(doinfo.getString("oppunit"));//对方户名
tabstr.append("</td> ");
tabstr.append("<td>");
tabstr.append(doinfo.getDynamicObject("currency").getString("name"));//币种
tabstr.append("</td> ");
tabstr.append("<td>");
tabstr.append(doinfo.getString("reamount"));//收款金额
tabstr.append("</td> ");
tabstr.append("<td>");
tabstr.append(doinfo.getString("tradetime"));//交易日期
tabstr.append("</td> ");
tabstr.append("<td>");
tabstr.append(doinfo.getString("description"));//摘要
tabstr.append("</td> ");
tabstr.append("<td>");
tabstr.append(doinfo.getString("tradedetailno"));//票据号/明细编号
tabstr.append("</td> ");
tabstr.append("<td>");
tabstr.append(doinfo.getString("detailid"));//承兑人名称/明细流水号
tabstr.append("</td> ");
tabstr.append("</tr> ");//-结束
}
tabstr.append("</tbody> </table>");
return tabstr.toString();
}
/**
* 组装入参给指定单个人员发邮件
* @param email 邮箱地址

View File

@ -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)});