3 İşlemeler 8a5d0076af ... 76e5c3ac75

Yazar SHA1 Mesaj Tarih
  lisheng 76e5c3ac75 商旅对账单: 3 hafta önce
  lisheng 02dae939ef 商旅确认单: 3 hafta önce
  lisheng 5da9b50ef0 创建商旅对账确认单调度任务: 3 hafta önce

+ 21 - 16
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/travelcheck/BusTravelCheckApproveEdit.java

@@ -11,6 +11,7 @@ import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.operation.SaveServiceHelper;
 import nckd.jimin.jyyy.fi.common.constant.travelcheck.BusTravelCheckBillConstant;
 import nckd.jimin.jyyy.fi.common.constant.travelcheck.FinanceBillConfirmConstant;
+import nckd.jimin.jyyy.fi.common.constant.travelcheck.TripReqBillConstant;
 
 import java.util.EventObject;
 import java.util.List;
@@ -35,6 +36,11 @@ public class BusTravelCheckApproveEdit extends AbstractBillPlugIn implements Fin
         DynamicObjectCollection bzEntryCol = dataEntity.getDynamicObjectCollection(NCKD_BZ_ENTRY.ENTITYID);
         bzEntryCol.removeIf(bzEntry -> bzEntry.getDynamicObject(NCKD_BZ_ENTRY.NCKD_BZ_TRAVELER).getLong(ID) != currUserId);
 
+        DynamicObjectCollection supEntryCol = dataEntity.getDynamicObjectCollection(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.ENTITYID);
+        supEntryCol.removeIf(supEntry -> supEntry.getDynamicObject(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL) != null
+                && supEntry.getDynamicObject(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL).getDynamicObject(TripReqBillConstant.APPLIER) != null
+                && supEntry.getDynamicObject(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL).getDynamicObject(TripReqBillConstant.APPLIER).getLong( ID) != currUserId);
+
         DynamicObjectCollection slEntryCol = dataEntity.getDynamicObjectCollection(NCKD_SL_ENTRY.ENTITYID);
         slEntryCol.removeIf(slEntry -> slEntry.getDynamicObject(NCKD_SL_ENTRY.NCKD_SL_TRAVELER).getLong( ID) != currUserId);
 
@@ -70,7 +76,7 @@ public class BusTravelCheckApproveEdit extends AbstractBillPlugIn implements Fin
         Object billId = dataEntity.getPkValue();
         DynamicObject checkBillInfo = BusinessDataServiceHelper.loadSingle(billId, BusTravelCheckBillConstant.ENTITYID);
         DynamicObjectCollection bzEntryCol = dataEntity.getDynamicObjectCollection(NCKD_BZ_ENTRY.ENTITYID);
-
+        long currUserId = RequestContext.get().getCurrUserId();
         Map<Long, DynamicObject> bzSrcEntryMap = bzEntryCol.stream().collect(Collectors.toMap(bzEntry -> bzEntry.getLong(ID), bzEntry -> bzEntry));
         DynamicObjectCollection checkBzEntryCol = checkBillInfo.getDynamicObjectCollection(NCKD_BZ_ENTRY.ENTITYID);
         for(DynamicObject checkBzEntry : checkBzEntryCol){
@@ -80,17 +86,16 @@ public class BusTravelCheckApproveEdit extends AbstractBillPlugIn implements Fin
             }
         }
 
+        // 通过出差人 来创建
         DynamicObjectCollection supEntryCol = dataEntity.getDynamicObjectCollection(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.ENTITYID);
-        List<Long> supEntryIdList = supEntryCol.stream().map(confirmSupEntry -> confirmSupEntry.getLong(BusTravelCheckBillConstant.ID)).collect(Collectors.toList());
-
         DynamicObjectCollection checkSupEntryCol = checkBillInfo.getDynamicObjectCollection(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.ENTITYID);
-        checkSupEntryCol.removeIf(confirmSupEntry -> supEntryIdList.contains(confirmSupEntry.getLong(BusTravelCheckBillConstant.ID)));
-        checkSupEntryCol.removeIf(confirmSupEntry -> confirmSupEntry.getDynamicObject(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL) == null);
 
-        Map<Long, DynamicObject> checkSupEntryMap = checkSupEntryCol.stream().collect(Collectors.toMap(supEntry -> supEntry.getLong(ID), supEntry -> supEntry));
+        checkSupEntryCol.removeIf(checkSupEntry -> checkSupEntry.getDynamicObject(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL) != null
+            && checkSupEntry.getDynamicObject(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL).getDynamicObject(TripReqBillConstant.APPLIER) != null
+            && checkSupEntry.getDynamicObject(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL).getDynamicObject(TripReqBillConstant.APPLIER).getLong(ID) == currUserId);
+
         for(DynamicObject supEntry : supEntryCol){
-            Long supEntryId = supEntry.getLong(BusTravelCheckBillConstant.ID);
-            DynamicObject checkSupEntry = checkSupEntryMap.getOrDefault(supEntryId, checkSupEntryCol.addNew());
+            DynamicObject checkSupEntry = checkSupEntryCol.addNew();
             DynamicObjectUtils.copy(supEntry, checkSupEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
         }
 
@@ -149,11 +154,11 @@ public class BusTravelCheckApproveEdit extends AbstractBillPlugIn implements Fin
     }
     protected void writeBackConfirmBill(){
         DynamicObject dataEntity = getModel().getDataEntity(true);
-
+        long checkBillId = dataEntity.getLong(BusTravelCheckBillConstant.ID);
         long confirmBillId = dataEntity.getLong(BusTravelCheckBillConstant.NCKD_NCKD_SOURCEBILLID);
         DynamicObject confirmBillInfo = BusinessDataServiceHelper.loadSingle(confirmBillId, FinanceBillConfirmConstant.ENTITYID);
         DynamicObjectCollection bzEntryCol = dataEntity.getDynamicObjectCollection(NCKD_BZ_ENTRY.ENTITYID);
-
+        long currUserId = RequestContext.get().getCurrUserId();
         Map<Long, DynamicObject> bzSrcEntryMap = bzEntryCol.stream().collect(Collectors.toMap(bzEntry -> bzEntry.getLong(NCKD_BZ_ENTRY.NCKD_BZ_SRCENTRYID), bzEntry -> bzEntry));
         DynamicObjectCollection confirmBzEntryCol = confirmBillInfo.getDynamicObjectCollection(NCKD_BZ_ENTRY.ENTITYID);
         for(DynamicObject confirmBzEntry : confirmBzEntryCol){
@@ -162,20 +167,20 @@ public class BusTravelCheckApproveEdit extends AbstractBillPlugIn implements Fin
                 DynamicObjectUtils.copy(bzEntryInfo, confirmBzEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
             }
         }
-        // 补助未涵盖反写确认单
+        // 通过商旅对账ID反写
         DynamicObjectCollection supEntryCol = dataEntity.getDynamicObjectCollection(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.ENTITYID);
 
         DynamicObjectCollection confirmSupEntryCol = confirmBillInfo.getDynamicObjectCollection(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.ENTITYID);
 
-        List<Long> supEntryIdList = supEntryCol.stream().map(confirmSupEntry -> confirmSupEntry.getLong(BusTravelCheckBillConstant.ID)).collect(Collectors.toList());
-        confirmSupEntryCol.removeIf(confirmSupEntry -> supEntryIdList.contains(confirmSupEntry.getLong(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SRCCHECKID)));
-        confirmSupEntryCol.removeIf(confirmSupEntry -> confirmSupEntry.getLong(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SRCCHECKID) == 0L);
+        confirmSupEntryCol.removeIf(confirmSupEntry -> confirmSupEntry.getLong(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SRCCHECKID) == checkBillId
+                && confirmSupEntry.getDynamicObject(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL) != null
+                && confirmSupEntry.getDynamicObject(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL).getDynamicObject(TripReqBillConstant.APPLIER) != null
+                && confirmSupEntry.getDynamicObject(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL).getDynamicObject(TripReqBillConstant.APPLIER).getLong(ID) == currUserId);
         // 删除来源确认单的数据
         for(DynamicObject supEntry : supEntryCol){
-            Long supEntryId = supEntry.getLong(BusTravelCheckBillConstant.ID);
             DynamicObject confirmSupEntry = confirmSupEntryCol.addNew();
             DynamicObjectUtils.copy(supEntry, confirmSupEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
-            confirmSupEntry.set(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SRCCHECKID, supEntryId);
+            confirmSupEntry.set(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SRCCHECKID, checkBillId);
         }
 
         DynamicObjectCollection slSrcEntryCol = dataEntity.getDynamicObjectCollection(NCKD_SL_ENTRY.ENTITYID);

+ 4 - 4
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/operate/travelcheck/BusTravelCheckBillOp.java

@@ -90,15 +90,15 @@ public class BusTravelCheckBillOp extends AbstractOperationServicePlugIn {
 
         // 补助未涵盖反写确认单
         DynamicObjectCollection supEntryCol = dataEntity.getDynamicObjectCollection(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.ENTITYID);
+        // 通过商旅对账ID反写
 
         DynamicObjectCollection confirmSupEntryCol = confirmBillInfo.getDynamicObjectCollection(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.ENTITYID);
         // 删除来源确认单的数据
-        Map<Long, DynamicObject> confirmSupEntryMap = confirmSupEntryCol.stream().collect(Collectors.toMap(confirmSupEntry -> confirmSupEntry.getLong(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SRCCHECKID), confirmSupEntry -> confirmSupEntry));
+        confirmSupEntryCol.removeIf(r -> r.getLong(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SRCCHECKID) == checkBillId);
         for(DynamicObject supEntry : supEntryCol){
-            Long supEntryId = supEntry.getLong(BusTravelCheckBillConstant.ID);
-            DynamicObject confirmSupEntry = confirmSupEntryMap.getOrDefault(supEntryId, confirmSupEntryCol.addNew());
+            DynamicObject confirmSupEntry = confirmSupEntryCol.addNew();
             DynamicObjectUtils.copy(supEntry, confirmSupEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
-            confirmSupEntry.set(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SRCCHECKID, supEntryId);
+            confirmSupEntry.set(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SRCCHECKID, checkBillId);
         }
 
         DynamicObjectCollection slSrcEntryCol = dataEntity.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_SL_ENTRY.ENTITYID);

+ 8 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/operate/travelcheck/FinanceBillConfirmOp.java

@@ -3,6 +3,7 @@ package nckd.jimin.jyyy.fi.plugin.operate.travelcheck;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
 import kd.bos.entity.plugin.AbstractOperationServicePlugIn;
+import kd.bos.entity.plugin.AddValidatorsEventArgs;
 import kd.bos.entity.plugin.args.BeginOperationTransactionArgs;
 import kd.bos.logging.Log;
 import kd.bos.logging.LogFactory;
@@ -18,6 +19,7 @@ import nckd.jimin.jyyy.fi.common.constant.travelcheck.BusTravelCheckBillConstant
 import nckd.jimin.jyyy.fi.common.constant.travelcheck.FinanceBillConfirmConstant;
 import nckd.jimin.jyyy.fi.common.constant.travelcheck.TravelFinanDraftConstant;
 import nckd.jimin.jyyy.fi.common.constant.travelcheck.TripReqBillConstant;
+import nckd.jimin.jyyy.fi.plugin.operate.validator.FinanceBillConfirmValidator;
 
 import java.util.Arrays;
 import java.util.HashSet;
@@ -27,6 +29,12 @@ public class FinanceBillConfirmOp extends AbstractOperationServicePlugIn {
 
     private static final Log logger = LogFactory.getLog(FinanceBillConfirmOp.class);
 
+    @Override
+    public void onAddValidators(AddValidatorsEventArgs e) {
+        super.onAddValidators(e);
+        e.getValidators().add(new FinanceBillConfirmValidator());
+    }
+
     @Override
     public void beginOperationTransaction(BeginOperationTransactionArgs e) {
         super.beginOperationTransaction(e);

+ 31 - 0
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/operate/validator/FinanceBillConfirmValidator.java

@@ -0,0 +1,31 @@
+package nckd.jimin.jyyy.fi.plugin.operate.validator;
+
+import kd.bos.dataentity.entity.DynamicObject;
+import kd.bos.entity.ExtendedDataEntity;
+import kd.bos.entity.validate.AbstractValidator;
+import kd.bos.orm.ORM;
+import kd.bos.orm.query.QFilter;
+import nckd.jimin.jyyy.fi.common.constant.travelcheck.BusTravelCheckBillConstant;
+
+import java.util.Arrays;
+
+public class FinanceBillConfirmValidator extends AbstractValidator {
+    @Override
+    public void validate() {
+        String operateKey = this.getOperateKey();
+        ExtendedDataEntity[] dataEntities = getDataEntities();
+        if("unaudit".equals(operateKey)){
+            Arrays.stream(dataEntities).forEach(r -> checkCreateCheckBill(r));
+        }
+    }
+
+    protected void checkCreateCheckBill(ExtendedDataEntity dataEntity) {
+        DynamicObject billInfo = dataEntity.getDataEntity();
+        Object billId = billInfo.getPkValue();
+        QFilter hasCreateCheckFilter = new QFilter(BusTravelCheckBillConstant.NCKD_NCKD_SOURCEBILLID, QFilter.equals, billId);
+        if(ORM.create().exists(BusTravelCheckBillConstant.ENTITYID, hasCreateCheckFilter.toArray())){
+            this.addErrorMessage(dataEntity, "已生成商旅对账单,不允许反审核单据。");
+            return;
+        }
+    }
+}

+ 7 - 6
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/task/TravelFinanConfirmCreateTask.java

@@ -53,7 +53,7 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
         logger.info("TravelFinanConfirmCreateTask begin");
         periodEndDate = new Date();
         // 创建当月的财务底稿确认单
-       if(map.containsKey("startDate")){
+       if(map.containsKey("startDate") && map.get("startDate") != null && StringUtils.isNotEmpty(map.get("startDate").toString())){
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
            try {
                periodEndDate = sdf.parse((String)map.get("startDate"));
@@ -129,7 +129,7 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
                 "id,org.id,oabillnum,sourcebookedid.id applierId,sourcebookedid.gender applierGender,totalamount,cityname,checkindate,checkoutdate," +
                         "hotelname,roomstylename,ordernum", new QFilter[]{
                 QFilter.isNotNull("sourcebookedid"),
-                        new QFilter("ordernum", QCP.in, billNumList),
+                        new QFilter("checkingbillnum", QCP.in, billNumList),
                 new QFilter("ordertype", QCP.in, Arrays.asList("O","G")),
                 new QFilter("orderstatus", QCP.not_in, Arrays.asList("14","10")),
         });
@@ -289,7 +289,7 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
         DynamicObjectCollection trainTgEntryCol = QueryServiceHelper.query("er_traincheckingbill",
                 "id,oabillnum,sourcebookedid.id applierId,totalamount,orderstatus,ordertype,ordernum,happenddate,departtime,arrivecity,departcity" +
                         ",refundamount", new QFilter[]{
-                        new QFilter("ordernum", QCP.in, billNumList),
+                        new QFilter("checkingbillnum", QCP.in, billNumList),
                         new QFilter("orderstatus", QFilter.in, Arrays.asList("2","3")),
                         new QFilter("ordertype", QFilter.in, Arrays.asList("G","T"))
                 });
@@ -335,7 +335,7 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
         DynamicObjectCollection trainTgEntryCol = QueryServiceHelper.query("er_planecheckingbill",
                 "id,oabillnum,sourcebookedid.id applierId,totalamount,orderstatus,ordertype,ordernum,happenddate,takeofftime,fromcityname,tocityname," +
                         "refundamount,endorsementamount", new QFilter[]{
-                        new QFilter("ordernum", QCP.in, billNumList),
+                        new QFilter("checkingbillnum", QCP.in, billNumList),
                         new QFilter("orderstatus", QFilter.in, Arrays.asList("50202","50302")),
                         new QFilter("ordertype", QFilter.in, Arrays.asList("G","T"))
                 });
@@ -381,7 +381,7 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
         DynamicObjectCollection hotelTgEntryCol = QueryServiceHelper.query("er_hotelcheckingbill",
                 "id,oabillnum,server,sourcebookedid.id applierId,totalamount,orderstatus,ordertype,ordernum,happenddate," +
                         "unbookfee,checkindate", new QFilter[]{
-                        new QFilter("ordernum", QCP.in, billNumList),
+                        new QFilter("checkingbillnum", QCP.in, billNumList),
                         new QFilter("orderstatus", QFilter.equals, "10"),
                         new QFilter("ordertype", QFilter.in, Arrays.asList("G","T"))
                 });
@@ -893,7 +893,8 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
                 new QFilter(TripReqBillConstant.KEY_BILLSTATUS, QFilter.in, Arrays.asList("E", "G", "I")),
                 new QFilter(FinanceBillConfirmConstant.NCKD_BZ_CONFRMID, QFilter.equals, 0L)
                         .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_BZ_CONFRMID)),
-                QFilter.isNotNull(FinanceBillConfirmConstant.NCKD_SUP_CHECKID),
+                new QFilter(FinanceBillConfirmConstant.NCKD_SUP_CHECKID, QFilter.equals, 0L)
+                        .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_SUP_CHECKID)),
                 new QFilter(TripReqBillConstant.RENDDATE, QFilter.less_than, periodEndDate),
         },"createtime desc" );
         if(tripReqBillCol == null || tripReqBillCol.size() == 0){