Bläddra i källkod

商旅对账:
1.修复商旅对账测试问题

lisheng 1 vecka sedan
förälder
incheckning
4202632263

+ 7 - 3
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/common/constant/travelcheck/BusTravelCheckBillConstant.java

@@ -30,6 +30,10 @@ public interface BusTravelCheckBillConstant extends BillConstant {
     interface NCKD_BZ_SUPDATA{
 
         String ENTITYID = "nckd_bz_supdata";
+        /**
+         * 来源商旅对账ID
+         */
+        String NCKD_SRCCHECKID = "nckd_srccheckid";
         /**
          * 出差申请单号
          */
@@ -122,7 +126,7 @@ public interface BusTravelCheckBillConstant extends BillConstant {
     interface NCKD_BZ_ENTRY{
 
         String ENTITYID = "nckd_bz_entry";
-        String NCKD_BZ_INFO = "nckd_bz_info"; //补助信息
+        //String NCKD_BZ_INFO = "nckd_bz_info"; //补助信息
         String NCKD_BZ_TRAVELER = "nckd_bz_traveler"; // 出差人
         String NCKD_BZ_SUMDAYS = "nckd_bz_sumdays"; // 出差天数合计
         String NCKD_BZ_CHECKAMT = "nckd_bz_checkamt"; // 核定金额
@@ -145,7 +149,7 @@ public interface BusTravelCheckBillConstant extends BillConstant {
     interface NCKD_SL_ENTRY {
 
         String ENTITYID = "nckd_sl_entry";
-        String NCKD_SL_INFO = "nckd_sl_info"; //商旅费用信息
+        //String NCKD_SL_INFO = "nckd_sl_info"; //商旅费用信息
         String NCKD_SL_DESCRIBE = "nckd_sl_describe"; // 部门反馈
 
     }
@@ -155,7 +159,7 @@ public interface BusTravelCheckBillConstant extends BillConstant {
      */
     interface NCKD_YC_ENTRY {
         String ENTITYID = "nckd_yc";
-        String NCKD_YC_INFO = "nckd_yc_info"; //用车信息
+        //String NCKD_YC_INFO = "nckd_yc_info"; //用车信息
         String NCKD_YC_DESCRIBE = "nckd_yc_describe"; // 部门反馈
     }
 

+ 4 - 2
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/common/constant/travelcheck/FinanceBillConfirmConstant.java

@@ -19,8 +19,10 @@ public interface FinanceBillConfirmConstant extends BillConstant {
     List<String> YC_EDITFIELD = Arrays.asList(BusTravelCheckBillConstant.NCKD_YC_ENTRY.NCKD_YC_DESCRIBE);
 
 
-
-
+    /**
+     * 币别
+     */
+    String NCKD_CURRENCY = "nckd_currency";
 
     /**
      * 对账期间

+ 39 - 8
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/common/util/CommonUtils.java

@@ -16,6 +16,7 @@ import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.QueryServiceHelper;
 import kd.bos.servicehelper.org.OrgUnitServiceHelper;
 import kd.bos.servicehelper.org.OrgViewType;
+import nckd.jimin.jyyy.fi.common.constant.BillTypeConstants;
 
 
 import java.math.BigDecimal;
@@ -217,16 +218,46 @@ public class CommonUtils {
         return 0;
     }
 
-    public static BigDecimal getBzAmount(){
-        DynamicObject tripExpenseItem = QueryServiceHelper.queryOne("er_tripexpenseitem", "nckd_travelbzstd", new QFilter("longnumber", QCP.equals, "004").toArray());
-        if(tripExpenseItem == null){
-            throw new KDBizException("没有配置补助的差旅标准。");
+    public static BigDecimal getBzAmount(DynamicObject applier){
+        String userNumber = applier.getString("number");
+        // 查询职级
+        DynamicObject jobLeverInfo = QueryServiceHelper.queryOne(BillTypeConstants.HRPI_EMPJOBREL, "joblevel.id", new QFilter[]{
+                new QFilter("businessstatus", QCP.equals, "1"),
+                new QFilter("datastatus", QCP.equals, "1"),
+                new QFilter("iscurrentversion", QCP.equals, "1"),
+                new QFilter("person.number", QCP.equals, userNumber)
+        });
+        if(jobLeverInfo != null){
+            DynamicObject jobLeverStandard = QueryServiceHelper.queryOne("nckd_checkstandard", "nckd_amount", new QFilter[]{
+                    new QFilter("nckd_type", QCP.equals, "002"),
+                    new QFilter("nckd_classify", QCP.equals, "001"),
+                    new QFilter("nckd_multi_joblever.fbasedataid", QCP.equals, jobLeverInfo.getLong("joblevel.id"))
+            });
+            if(jobLeverStandard != null){
+                return jobLeverStandard.getBigDecimal("nckd_amount");
+            }
         }
-        BigDecimal bzAmount = tripExpenseItem.getBigDecimal("nckd_travelbzstd");
-        if(bzAmount == null || bzAmount.compareTo(BigDecimal.ZERO) <= 0){
-            throw new KDBizException("差旅补助金额不能为0。");
+
+        // 查询人员职级
+        DynamicObject positionInfo = QueryServiceHelper.queryOne(BillTypeConstants.HRPI_EMPPOSORGREL, "position.id", new QFilter[]{
+                new QFilter("businessstatus", QCP.equals, "1"),
+                new QFilter("iscurrentversion", QCP.equals, "1"),
+                new QFilter("datastatus", QCP.equals, "1"),
+                new QFilter("isprimary", QCP.equals, "1"),
+                new QFilter("person.number", QCP.equals, userNumber)
+        });
+        if(positionInfo != null){
+            DynamicObject positionStandard = QueryServiceHelper.queryOne("nckd_checkstandard", "nckd_amount", new QFilter[]{
+                    new QFilter("nckd_type", QCP.equals, "002"),
+                    new QFilter("nckd_classify", QCP.equals, "002"),
+                    new QFilter("nckd_multi_position.fbasedataid", QCP.equals, positionInfo.getLong("position.id"))
+            });
+            if(positionStandard != null){
+                return positionStandard.getBigDecimal("nckd_amount");
+            }
         }
-        return bzAmount;
+
+        return BigDecimal.ZERO;
     }
 
     public static DynamicObject getWorkCalandar(Long orgId){

+ 3 - 2
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/travelcheck/BusTravelCheckBillEdit.java

@@ -58,8 +58,9 @@ public class BusTravelCheckBillEdit extends AbstractBillPlugIn implements BusTra
         // 财务核定出差天数
         if (NCKD_BZ_SUPDATA.NCKD_CHECKSUPDAYS.equals(name)) {
             // 计算补助金额
-            Integer checkSupDay = (Integer) getModel().getValue(NCKD_BZ_SUPDATA.NCKD_CHECKSUPDAYS);
-            BigDecimal bzAmount = CommonUtils.getBzAmount();
+            Integer checkSupDay = (Integer) getModel().getValue(NCKD_BZ_SUPDATA.NCKD_CHECKSUPDAYS, rowIndex);
+            DynamicObject tripReqBill = (DynamicObject)getModel().getValue(NCKD_BZ_SUPDATA.NCKD_TRIPREQBILL, rowIndex);
+            BigDecimal bzAmount = CommonUtils.getBzAmount(tripReqBill.getDynamicObject(TripReqBillConstant.APPLIER));
             getModel().setValue(NCKD_BZ_SUPDATA.NCKD_SUAPMT, bzAmount.multiply(new BigDecimal(checkSupDay)), rowIndex);
             updateBzEntryFromUnCoveredData(rowIndex);
         }

+ 2 - 1
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/travelcheck/BusTravelCheckBillList.java

@@ -26,8 +26,9 @@ public class BusTravelCheckBillList extends AbstractListPlugin implements Plugin
         String fieldName = args.getFieldName();
         BillList billList = (BillList) args.getHyperLinkClickEvent().getSource();
         ListSelectedRow selectedRow = billList.getCurrentSelectedRowInfo();
-        if("curapprovenode".equals(fieldName)){
+        if("nckd_curapprovenode".equals(fieldName)){
             if(selectedRow != null){
+                args.setCancel(true);
                 // 打开单据
                 WorkflowServiceHelper.viewFlowchart(getView().getPageId(), selectedRow.getPrimaryKeyValue());
             }

+ 3 - 6
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/plugin/form/travelcheck/BusTravelCommonEdit.java

@@ -48,8 +48,7 @@ public class BusTravelCommonEdit extends AbstractFormPlugin implements FinanceBi
         if (NCKD_BZ_ENTRY.NCKD_BZ_TRAVELER.equals(fieldName)) {
             DynamicObject entryInfo = getModel().getEntryRowEntity(NCKD_BZ_ENTRY.ENTITYID, rowIndex);
 
-            DynamicObject traveler = ENTITYID.equals(name) ? entryInfo.getDynamicObject(NCKD_BZ_ENTRY.NCKD_BZ_TRAVELER)
-                    : entryInfo.getDynamicObject(BusTravelCheckBillConstant.NCKD_BZ_ENTRY.NCKD_BZ_INFO).getDynamicObject(NCKD_BZ_ENTRY.NCKD_BZ_TRAVELER);
+            DynamicObject traveler = entryInfo.getDynamicObject(NCKD_BZ_ENTRY.NCKD_BZ_TRAVELER);
 
             ListShowParameter showParameter = new ListShowParameter();
             showParameter.setBillFormId(TravelFinanDraftConstant.ENTITYID);
@@ -68,8 +67,7 @@ public class BusTravelCommonEdit extends AbstractFormPlugin implements FinanceBi
         if (NCKD_SL_ENTRY.NCKD_SL_TRAVELER.equals(fieldName)) {
             DynamicObject entryInfo = getModel().getEntryRowEntity(NCKD_SL_ENTRY.ENTITYID, rowIndex);
 
-            DynamicObject traveler = ENTITYID.equals(name) ? entryInfo.getDynamicObject(NCKD_SL_ENTRY.NCKD_SL_TRAVELER)
-                    : entryInfo.getDynamicObject(BusTravelCheckBillConstant.NCKD_SL_ENTRY.NCKD_SL_INFO).getDynamicObject(NCKD_SL_ENTRY.NCKD_SL_TRAVELER);
+            DynamicObject traveler = entryInfo.getDynamicObject(NCKD_SL_ENTRY.NCKD_SL_TRAVELER);
 
             ListShowParameter showParameter = new ListShowParameter();
             showParameter.setBillFormId("er_allcheckingbill");
@@ -87,8 +85,7 @@ public class BusTravelCommonEdit extends AbstractFormPlugin implements FinanceBi
         if (NCKD_YC_ENTRY.NCKD_YC_TRAVELER.equals(fieldName)) {
             DynamicObject entryInfo = getModel().getEntryRowEntity(NCKD_YC_ENTRY.ENTITYID, rowIndex);
 
-            DynamicObject traveler = ENTITYID.equals(name) ? entryInfo.getDynamicObject(NCKD_YC_ENTRY.NCKD_YC_TRAVELER)
-                    : entryInfo.getDynamicObject(BusTravelCheckBillConstant.NCKD_YC_ENTRY.NCKD_YC_INFO).getDynamicObject(NCKD_YC_ENTRY.NCKD_YC_TRAVELER);
+            DynamicObject traveler = entryInfo.getDynamicObject(NCKD_YC_ENTRY.NCKD_YC_TRAVELER);
 
             ListShowParameter showParameter = new ListShowParameter();
             showParameter.setBillFormId("er_vehiclecheckingbill");

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

@@ -32,6 +32,7 @@ public class BusTravelCheckBillOp extends AbstractOperationServicePlugIn {
 
     protected void writeBackConfirmBill(DynamicObject dataEntity){
 
+        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(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.ENTITYID);
@@ -45,6 +46,18 @@ public class BusTravelCheckBillOp extends AbstractOperationServicePlugIn {
             }
         }
 
+        // 补助未涵盖反写确认单
+        DynamicObjectCollection supEntryCol = dataEntity.getDynamicObjectCollection(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.ENTITYID);
+
+        DynamicObjectCollection confirmSupEntryCol = confirmBillInfo.getDynamicObjectCollection(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.ENTITYID);
+        // 删除来源确认单的数据
+        confirmSupEntryCol.removeIf(confirmSupEntry -> confirmSupEntry.getLong(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SRCCHECKID) == checkBillId);
+        for(DynamicObject supEntry : supEntryCol){
+            DynamicObject confirmSupEntry = confirmSupEntryCol.addNew();
+            DynamicObjectUtils.copy(supEntry, confirmSupEntry,BusTravelCheckBillConstant.COPY_IGNOREFILED);
+            confirmSupEntry.set(BusTravelCheckBillConstant.NCKD_BZ_SUPDATA.NCKD_SRCCHECKID, checkBillId);
+        }
+
         DynamicObjectCollection slSrcEntryCol = dataEntity.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_SL_ENTRY.ENTITYID);
         Map<Long, DynamicObject> slSrcEntryMap = slSrcEntryCol.stream().collect(Collectors.toMap(slEntry -> slEntry.getLong(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_SRCENTRYID), slEntry -> slEntry));
         DynamicObjectCollection confirmSlEntryCol = confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_SL_ENTRY.ENTITYID);

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

@@ -173,6 +173,8 @@ public class FinanceBillConfirmOp extends AbstractOperationServicePlugIn {
         busCheckBill.set(BusTravelCheckBillConstant.NCKD_CHECKMONTH, checkMonth);
         busCheckBill.set(BusTravelCheckBillConstant.NCKD_NCKD_SOURCEBILLID, confirmBillId);
         busCheckBill.set(BusTravelCheckBillConstant.KEY_BILLSTATUS,"A");
+        DynamicObject currency = BusinessDataServiceHelper.loadSingle("bd_currency", new QFilter("number", QCP.equals, "CNY").toArray());
+        busCheckBill.set(FinanceBillConfirmConstant.NCKD_CURRENCY, currency);
 
         DynamicObjectCollection checkBzEntryCol = busCheckBill.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.ENTITYID);
         DynamicObjectCollection confirmBzEntryCol = confirmBillInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.ENTITYID);

+ 16 - 11
code/jyyy/nckd-jimin-jyyy-fi/src/main/java/nckd/jimin/jyyy/fi/task/TravelFinanConfirmCreateTask.java

@@ -72,6 +72,10 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
             financeConfirmInfo.set(FinanceBillConfirmConstant.ID, financeConfirmId);
             financeConfirmInfo.set(FinanceBillConfirmConstant.NCKD_CHECKMONTH, period);
             financeConfirmInfo.set(FinanceBillConfirmConstant.KEY_BILLSTATUS, "A");
+
+            DynamicObject currency = BusinessDataServiceHelper.loadSingle("bd_currency", new QFilter("number", QCP.equals, "CNY").toArray());
+            financeConfirmInfo.set(FinanceBillConfirmConstant.NCKD_CURRENCY, currency);
+
         }
         try(TXHandle tx = TX.requiresNew(this.getClass().getName())){
             try {
@@ -615,7 +619,7 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
             tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TRIPREQBILLNO, trainTgEntry.getString("oabillnum"));
             tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_ORDERBILLNO, trainTgEntry.getString("ordernum"));
             tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_ORDERAMT, orderPrice);
-            tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TYPE, "train");
+            tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TYPE, "taxi");
             tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_STANDARD, BigDecimal.ZERO);
 
         }
@@ -697,13 +701,15 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
             List<String> trainNoList = dataList.stream()
                     .filter(r -> "6".equals(r.getString("operationtype")))
                     .map(r -> r.getString("ordernum")).collect(Collectors.toList());
-            BigDecimal trainServiceAmount = QueryServiceHelper.query("er_traincheckingbill", "id,servicefee", new QFilter[]{
+            DynamicObjectCollection trainCheckingCol = QueryServiceHelper.query("er_traincheckingbill", "id,servicefee,ticketprice", new QFilter[]{
                     new QFilter("ordernum", QCP.in, trainNoList)
-            }).stream().map(r -> r.getBigDecimal("servicefee")).reduce(BigDecimal.ZERO, BigDecimal::add);
+            });
+            BigDecimal trainServiceAmount = trainCheckingCol
+                    .stream().map(r -> r.getBigDecimal("servicefee")).reduce(BigDecimal.ZERO, BigDecimal::add);
             slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_TRAINSERVICEFEE, trainServiceAmount);
-            BigDecimal trainTotalAmount = dataList.stream()
-                    .filter(r -> "6".equals(r.getString("operationtype")))
-                    .map(r -> r.getBigDecimal("totalamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+            BigDecimal trainTotalAmount = trainCheckingCol
+                    .stream().map(r -> r.getBigDecimal("ticketprice")).reduce(BigDecimal.ZERO, BigDecimal::add);
             slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_TRAINPAYAMT, trainTotalAmount);
             // 对机票订单金额合计
             List<String> planNoList = dataList.stream()
@@ -717,7 +723,7 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
             BigDecimal planeTotalAmount = dataList.stream()
                     .filter(r -> "2".equals(r.getString("operationtype")) || "4".equals(r.getString("operationtype")))
                     .map(r -> r.getBigDecimal("totalamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
-            slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_PLANSERVICEFEE, planeTotalAmount);
+            slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_PLANPAYAMT, planeTotalAmount);
             // 对酒店订单金额合计
             List<String> hotelNoList = dataList.stream()
                     .filter(r ->"1".equals(r.getString("operationtype")) || "5".equals(r.getString("operationtype")))
@@ -768,7 +774,6 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
 
     protected void createBzEntry(DynamicObject financeConfirmInfo){
         long confirmBillId = financeConfirmInfo.getLong(FinanceBillConfirmConstant.ID);
-        BigDecimal bzAmount = CommonUtils.getBzAmount();
         // 查询出差申请单
         DynamicObjectCollection tripReqBillCol = QueryServiceHelper.query(TripReqBillConstant.ENTITYID, String.join(",",TripReqBillConstant.ID,TripReqBillConstant.BILLNO), new QFilter[]{
                 // 状态为审核通过、已付款、关闭
@@ -782,7 +787,7 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
         }
         List<Object> tripReqBillIdList = tripReqBillCol.stream().map(r -> r.get(TripReqBillConstant.ID)).collect(Collectors.toList());
         // 创建财务对账底稿
-        createTravelFinanDraft(financeConfirmInfo,tripReqBillIdList,bzAmount);
+        createTravelFinanDraft(financeConfirmInfo,tripReqBillIdList);
         DynamicObjectCollection bzEntryCol = financeConfirmInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.ENTITYID);
         // 查询关联的商旅补助底稿数据
         List<Long> draftBillIdList = QueryServiceHelper.query(TravelFinanDraftConstant.ENTITYID, TravelFinanDraftConstant.ID,
@@ -886,9 +891,8 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
      * 创建财务对账底稿单据
      * @param financeConfirmInfo 来源商旅对账确认单ID
      * @param tripReqBillIdList 出差申请单ID
-     * @param bzAmount 补助金额
      */
-    protected void createTravelFinanDraft(DynamicObject financeConfirmInfo, List<Object> tripReqBillIdList ,BigDecimal bzAmount) {
+    protected void createTravelFinanDraft(DynamicObject financeConfirmInfo, List<Object> tripReqBillIdList) {
         long confirmBillId = financeConfirmInfo.getLong(FinanceBillConfirmConstant.ID);
         // 创建商旅财务对账底稿
         DynamicObject[] tripReqBillArray = BusinessDataServiceHelper.load(tripReqBillIdList.toArray(), EntityMetadataCache.getDataEntityType(TripReqBillConstant.ENTITYID_F7));
@@ -918,6 +922,7 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
             travelFinanDraftInfo.set(TravelFinanDraftConstant.NCKD_CONFIRMSTATUS, "10");
             travelFinanDraftInfo.set(TravelFinanDraftConstant.KEY_BILLNO,tripReqBill.getString(TripReqBillConstant.BILLNO));
 
+            BigDecimal bzAmount = CommonUtils.getBzAmount(tripReqBill.getDynamicObject(TripReqBillConstant.APPLIER));
             DynamicObjectCollection draftEntryCol = travelFinanDraftInfo.getDynamicObjectCollection(TravelFinanDraftConstant.NCKD_DETAILENTITY.ENTITYID);
             if(trainBillMap.containsKey(billno) && trainBillMap.get(billno) != null){
                 List<DynamicObject> trainBillList = trainBillMap.get(billno);