82 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Java
		
	
	
	
| package shjh.jhzj7.fi.fi.plugin.task;
 | ||
| 
 | ||
| import kd.bos.context.RequestContext;
 | ||
| import kd.bos.dataentity.OperateOption;
 | ||
| import kd.bos.dataentity.entity.DynamicObject;
 | ||
| import kd.bos.entity.operate.OperateOptionConst;
 | ||
| import kd.bos.entity.operate.result.OperationResult;
 | ||
| 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.bos.servicehelper.operation.OperationServiceHelper;
 | ||
| import kd.sdk.plugin.Plugin;
 | ||
| 
 | ||
| import java.math.BigDecimal;
 | ||
| import java.time.LocalDate;
 | ||
| import java.util.ArrayList;
 | ||
| import java.util.Map;
 | ||
| 
 | ||
| /**
 | ||
|  * 定时任务 收款单自动下推生成清账单
 | ||
|  * @author LiGuiQiang
 | ||
|  */
 | ||
| public class RecBillToClearBillTask extends AbstractTask implements Plugin {
 | ||
| 
 | ||
|     private static final Log logger = LogFactory.getLog(RecBillToClearBillTask.class);
 | ||
|     private static final String srcEntityName = "cas_recbill";//源单 收款单
 | ||
|     private static final String KEY_STATUS = "billstatus";//单据状态
 | ||
|     private static final String KEY_ACT_RECT_AMOUNT = "actrecamt";//收款金额
 | ||
|     private static final String KEY_VOUCHER_NUM = "shjh_vouchernum";//SAP凭证号
 | ||
|     private static final String KEY_AUDIT_DATE = "auditdate";//审核日期
 | ||
| 
 | ||
| 
 | ||
|     @Override
 | ||
|     public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
 | ||
|         QFilter qFilter = new QFilter(KEY_STATUS, QCP.equals, "D");//【单据状态】=已收款 and
 | ||
|         qFilter.and(KEY_VOUCHER_NUM, QCP.not_equals, "");//【SAP凭证号】≠空 and
 | ||
|         qFilter.and(KEY_ACT_RECT_AMOUNT, QCP.large_than, BigDecimal.ZERO);//【收款金额】>0 and
 | ||
|         //获取昨天的日期字符串
 | ||
|         LocalDate yesterday = LocalDate.now().minusDays(1);
 | ||
| //        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
 | ||
| //        String yesterdayStr = yesterday.format(formatter);
 | ||
| 
 | ||
|         qFilter.and(KEY_AUDIT_DATE, QCP.less_equals, yesterday);//TODO 【审核日期】T+1日下推T及T之前收款单
 | ||
| 
 | ||
|         DynamicObject[] collection = BusinessDataServiceHelper.load(srcEntityName, "id", qFilter.toArray());
 | ||
|         if (collection.length != 0){
 | ||
|             ArrayList<Long> ids = new ArrayList<>(collection.length);
 | ||
|             for (DynamicObject dynamicObject : collection) {
 | ||
|                 ids.add(dynamicObject.getLong("id"));
 | ||
|             }
 | ||
|             Map<Object, DynamicObject> recBillMap = BusinessDataServiceHelper.loadFromCache(ids.toArray(), srcEntityName);
 | ||
|             OperateOption operateOption = OperateOption.create();
 | ||
|             // 不执行警告级别校验器
 | ||
|             operateOption.setVariableValue(OperateOptionConst.IGNOREWARN, String.valueOf(true));
 | ||
|             // 不显示交互提示,自动执行到底
 | ||
|             operateOption.setVariableValue(OperateOptionConst.IGNOREINTERACTION, String.valueOf(true));
 | ||
|             // 全部校验通过才保存
 | ||
|             operateOption.setVariableValue(OperateOptionConst.STRICTVALIDATION, String.valueOf(true));
 | ||
|             //同一个用户在多个界面操作同一张,也不允许操作
 | ||
|             operateOption.setVariableValue(OperateOptionConst.MUTEX_ISSTRICT, String.valueOf(true));
 | ||
|             // 注意:executeOperate 需要一个数组形式的 DynamicObject[]
 | ||
|             DynamicObject[] billArray = new DynamicObject[recBillMap.values().size()];
 | ||
|             int index = 0;
 | ||
|             for (DynamicObject dynamicObject : recBillMap.values()) {
 | ||
|                 billArray[index] = dynamicObject;
 | ||
|                 index++;
 | ||
|             }
 | ||
|             OperationResult operationResult = OperationServiceHelper.executeOperate("pushclear", srcEntityName, billArray, operateOption);
 | ||
|             // 可以根据需要处理 operationResult,例如检查是否成功、获取返回值等
 | ||
|             if (operationResult.isSuccess()) {
 | ||
|                 logger.info("执行pushclear成功,本次处理收款单个数:" + billArray.length);
 | ||
|             } else {
 | ||
|                 logger.error(operationResult.getMessage());
 | ||
|             }
 | ||
|         }
 | ||
|     }
 | ||
| }
 |