123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- package kd.cosmic.jkjt.tmc.bei.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.BizLog;
- import kd.bos.orm.ORM;
- import kd.bos.orm.query.QCP;
- import kd.bos.orm.query.QFilter;
- import kd.bos.schedule.api.StopTask;
- import kd.bos.schedule.executor.AbstractTask;
- import kd.bos.servicehelper.BusinessDataServiceHelper;
- import kd.bos.servicehelper.QueryServiceHelper;
- import kd.bos.util.StringUtils;
- import kd.bos.workflow.engine.msg.info.MessageInfo;
- import kd.cosmic.jkjt.tmc.bei.common.DateUtils;
- import kd.cosmic.jkjt.tmc.bei.common.FeishuSendMessageUtils;
- import kd.cosmic.jkjt.tmc.bei.common.constant.BeiBeTransDetailConstant;
- import kd.cosmic.jkjt.tmc.bei.common.constant.LargeTransConfigConstant;
- import kd.cosmic.jkjt.tmc.bei.common.constant.MsgWarnTemplateConstant;
- import kd.cosmic.jkjt.tmc.bei.common.entity.MsgWarnMessageInfo;
- import kd.cosmic.jkjt.tmc.bei.common.enums.MsgWarnTypeEnum;
- import java.math.BigDecimal;
- import java.util.*;
- import java.util.stream.Collectors;
- /**
- * 动账提醒任务
- */
- public class AccChangeMsgWarnTask extends AbstractTask implements StopTask {
- // 预警执行时间间隔,默认查询1个小时内的数据
- private int changeMinute = 1*60 ;
- private static final MsgWarnTypeEnum WARTYPE = MsgWarnTypeEnum.ACCCHANGE;
- @Override
- public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
- Set<Long> largeTransIdConfig = getAccChangeRange();
- if(map.containsKey("minute") && StringUtils.isNotEmpty((String) map.get("minute"))){
- changeMinute = Integer.parseInt((String) map.get("minute"));
- }
- largeTransIdConfig.forEach(rangeId -> accChangeSendMessage(rangeId));
- }
- private void accChangeSendMessage(Long rangeId) {
- DynamicObject accChangeRangeInfo = BusinessDataServiceHelper.loadSingle(rangeId, "nckd_accchangerange");
- DynamicObject company = accChangeRangeInfo.getDynamicObject("nckd_company");
- DynamicObjectCollection receiverCol = accChangeRangeInfo.getDynamicObjectCollection("nckd_receiver");
- if(receiverCol == null || receiverCol.isEmpty()){
- BizLog.log("消息接收人为空,不进行消息发送。");
- return;
- }
- List<Long> receiverIdList = receiverCol.stream().map(receiver -> (Long) receiver.getDynamicObject("fbasedataid").getPkValue()).collect(Collectors.toList());
- DynamicObjectCollection transDetailData = getTransDetailData(company);
- if(transDetailData == null || transDetailData.isEmpty()){
- BizLog.log("没有符合条件的数据,不进行消息发送。");
- return;
- }
- BizLog.log("transDetailData size " + transDetailData.size());
- for(DynamicObject transDetail : transDetailData){
- String uniqueKey = String.join("-", MsgWarnTypeEnum.ACCCHANGE.getValue(),transDetail.getString("billno"));
- if(ORM.create().exists("nckd_msgwarnlog",new QFilter("nckd_unique_key", QCP.equals,uniqueKey).toArray())){
- // 消息如果已发送,就不在执行
- continue;
- }
- String messageContent = getMcCenterMessage(transDetail);
- MessageInfo messageInfo = new MessageInfo();
- messageInfo.setTitle(String.join("-",MsgWarnTypeEnum.ACCCHANGE.getName()));
- messageInfo.setUserIds(receiverIdList);
- messageInfo.setContent(messageContent);
- messageInfo.setTag(WARTYPE.getName());
- messageInfo.setSenderId(RequestContext.get().getCurrUserId());
- messageInfo.setEntityNumber(BeiBeTransDetailConstant.ENTITYID);
- messageInfo.setBizDataId(transDetail.getLong("id"));
- String feishuMessage = MsgWarnTemplateConstant.getFeishuTemplate(WARTYPE.getName(),messageContent);
- MsgWarnMessageInfo warnMessageInfo = new MsgWarnMessageInfo(WARTYPE.getValue(),
- company.getString("name"),
- uniqueKey,
- feishuMessage,
- messageInfo);
- FeishuSendMessageUtils.sendFeishuMessage(warnMessageInfo);
- }
- }
- protected String getMcCenterMessage(DynamicObject transDetail) {
- BigDecimal debitAmount = transDetail.getBigDecimal(BeiBeTransDetailConstant.KEY_DEBITAMOUNT);
- BigDecimal creditAmount = transDetail.getBigDecimal(BeiBeTransDetailConstant.KEY_CREDITAMOUNT);
- // 付款
- if(debitAmount != null && debitAmount.compareTo(BigDecimal.ZERO) > 0){
- return MsgWarnTemplateConstant.formatAccChangeDebitMessage(
- debitAmount.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString(),
- transDetail.getString("company.name"),
- transDetail.getString("accountbank.bankaccountnumber"),
- transDetail.getString("bank.name"),
- transDetail.getString(BeiBeTransDetailConstant.KEY_OPPUNIT),
- transDetail.getString(BeiBeTransDetailConstant.KEY_DESCRIPTION),
- DateUtils.formatDate(transDetail.getDate(BeiBeTransDetailConstant.KEY_BIZTIME)));
- }else{
- return MsgWarnTemplateConstant.formatAccChangeCreditMessage(
- creditAmount.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString(),
- transDetail.getString("oppunit"),
- transDetail.getString("accountbank.bankaccountnumber"),
- transDetail.getString("bank.name"),
- transDetail.getString(BeiBeTransDetailConstant.KEY_DESCRIPTION),
- DateUtils.formatDate(transDetail.getDate(BeiBeTransDetailConstant.KEY_BIZTIME)));
- }
- }
- protected DynamicObjectCollection getTransDetailData(DynamicObject company) {
- List<QFilter> filterList = new ArrayList<>();
- filterList.add(new QFilter(BeiBeTransDetailConstant.KEY_COMPANY, QFilter.equals, company.getPkValue()));
- Date beginDate = DateUtils.getMinutesBefore(changeMinute);
- filterList.add(new QFilter(BeiBeTransDetailConstant.KEY_BIZTIME, QFilter.large_equals, beginDate));
- filterList.add(new QFilter(BeiBeTransDetailConstant.KEY_BIZTIME, QFilter.less_than, new Date()));
- // 从银企同步的流水
- filterList.add(new QFilter("accountbank.issetbankinterface", QFilter.equals, true));
- return QueryServiceHelper.query(this.getClass().getName() ,BeiBeTransDetailConstant.ENTITYID,
- "id,billno,company.name,accountbank.name,accountbank.bankaccountnumber,bank.name,debitamount,creditamount,oppunit,oppbanknumber,oppbank,description,bizdate,biztime",
- filterList.toArray(new QFilter[0]),"bizdate desc");
- }
- //TODO
- protected Set<Long> getAccChangeRange() {
- DynamicObjectCollection configCol = QueryServiceHelper.query("nckd_accchangerange", "id,nckd_company.id", new QFilter[]{
- new QFilter(LargeTransConfigConstant.KEY_STATUS, QFilter.equals, "C"),
- new QFilter(LargeTransConfigConstant.KEY_ENABLE, QFilter.equals, "1")
- });
- Map<Long, Long> companyIdMap = configCol.stream()
- .collect(Collectors.toMap(r -> r.getLong("nckd_company.id"), r -> r.getLong("id"), (a, b) -> a));
- return companyIdMap.values().stream().collect(Collectors.toSet());
- }
- }
|