Prechádzať zdrojové kódy

业务招待制度、业务招待清单、业务招待申请单推送国资委

dingsixi 2 týždňov pred
rodič
commit
4da1f69ec6

+ 6 - 4
base/nckd-base-common/src/main/java/nckd/base/common/utils/GzwCommonUtils.java

@@ -82,14 +82,14 @@ public class GzwCommonUtils {
      */
     public static File createXMLFile(String orgCode, String resCode, String ver, String cusDateStr,
                                      List<LinkedHashMap<String, Object>> dataList) {
-        //生成基础信息XML文件名称
+        //生成XML文件名称
         String xmlFileName = GzwCommonUtils.generateFileName(orgCode, resCode, ver, cusDateStr, GzwXmlUtils.XML);
-        //生成生成基础信息XML文件
+        //生成XML文件
         return GzwCommonUtils.saveXmlToFile(GzwXmlUtils.generateXml(dataList), xmlFileName);
     }
 
     /**
-     * 设置资源代号XML参数
+     * 设置资源代号对应的单据XML参数
      *
      * @param config      资源代号配置信息
      * @param xmlMap      当前组织下所有的xml文件
@@ -107,6 +107,8 @@ public class GzwCommonUtils {
     }
 
     /**
+     *
+     * 将单据审批记录转换成XML参数
      *
      * @param bill 单据
      * @param auditResMap 业务审批记录资源代号信息
@@ -394,7 +396,7 @@ public class GzwCommonUtils {
      * @param resCode    接口代号/资源代号
      * @param ver        版本号
      * @param cusDateStr 当前时间
-     * @return
+     * @return 生长文件名称
      */
     public static String generateFileName(String orgCode, String resCode, String ver, String cusDateStr, String fileType) {
         return String.format(GzwCommonUtils.FILEPATH + "%s_%s_%s_%s_%s.%s", orgCode, resCode, ver, cusDateStr, GzwCommonUtils.generatePacketId(), fileType);

+ 281 - 23
base/nckd-base-common/src/main/java/nckd/base/common/utils/GzwSyncBillUtils.java

@@ -5,9 +5,8 @@ import kd.bos.dataentity.entity.DynamicObjectCollection;
 import nckd.base.common.constant.BaseFieldConst;
 
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.LinkedHashMap;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @description:国资委_单据数据转换工具类
@@ -86,6 +85,10 @@ public class GzwSyncBillUtils {
         return dynamicData;
     }
 
+    /**
+     * @param dailyApply 业务招待申请单
+     * @return 将单据数据转换成XML动态参数内容
+     */
     public static LinkedHashMap<String, Object> getDailyApplyData(DynamicObject dailyApply) {
         //费用承担公司
         DynamicObject costCompany = dailyApply.getDynamicObject("costcompany");
@@ -138,27 +141,282 @@ public class GzwSyncBillUtils {
 
 
         LinkedHashMap<String, Object> dynamicData = new LinkedHashMap<>();
-        dynamicData.put("uuid",dailyApply.getString(BaseFieldConst.ID));
-        dynamicData.put("enterprise_name",orgName);
-        dynamicData.put("credit_code",orgCode);
-        dynamicData.put("handler",applier.getString(BaseFieldConst.NAME));
-        dynamicData.put("dept",costDept.getString(BaseFieldConst.NAME));
-        dynamicData.put("apply_time",DateUtil.date2str(bizDate,DateUtil.DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS));
-        dynamicData.put("reception_type",treatType);
-        dynamicData.put("reception_reason",description);
-        dynamicData.put("visit_organization",visitingUnit);
-        dynamicData.put("visit_contact",visitingContact);
-        dynamicData.put("visit_contact_phone",visitingPhone);
-        dynamicData.put("expect_visit_time",DateUtil.date2str(expectedVisitTime,DateUtil.DATE_FORMAT_YYYY_MM_DD));
-        dynamicData.put("expect_visitors",expectedVisitorCount);
-        dynamicData.put("visitor_main_name",chiefGuestName);
-        dynamicData.put("visitor_main_post",chiefGuestTitle);
-        dynamicData.put("entertain_per_standard",yqPerAvgStd);
-        dynamicData.put("meal_per_standard",rcycPerAvgStd);
-        dynamicData.put("stay_per_standard",zsPerAvgStd);
-        dynamicData.put("souvenir_per_standard",jnpPerAvgStd);
-        dynamicData.put("use_cars",ycQty);
+        dynamicData.put("uuid", dailyApply.getString(BaseFieldConst.ID));
+        dynamicData.put("enterprise_name", orgName);
+        dynamicData.put("credit_code", orgCode);
+        dynamicData.put("handler", applier.getString(BaseFieldConst.NAME));
+        dynamicData.put("dept", costDept.getString(BaseFieldConst.NAME));
+        dynamicData.put("apply_time", DateUtil.date2str(bizDate, DateUtil.DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS));
+        dynamicData.put("reception_type", treatType);
+        dynamicData.put("reception_reason", description);
+        dynamicData.put("visit_organization", visitingUnit);
+        dynamicData.put("visit_contact", visitingContact);
+        dynamicData.put("visit_contact_phone", visitingPhone);
+        dynamicData.put("expect_visit_time", DateUtil.date2str(expectedVisitTime, DateUtil.DATE_FORMAT_YYYY_MM_DD));
+        dynamicData.put("expect_visitors", expectedVisitorCount);
+        dynamicData.put("visitor_main_name", chiefGuestName);
+        dynamicData.put("visitor_main_post", chiefGuestTitle);
+        dynamicData.put("entertain_per_standard", yqPerAvgStd);
+        dynamicData.put("meal_per_standard", rcycPerAvgStd);
+        dynamicData.put("stay_per_standard", zsPerAvgStd);
+        dynamicData.put("souvenir_per_standard", jnpPerAvgStd);
+        dynamicData.put("use_cars", ycQty);
 
         return dynamicData;
     }
+
+    /**
+     * @param entertainment 业务招待清单
+     * @return 将单据表头数据转换成XML动态参数内容
+     */
+    public static LinkedHashMap<String, Object> getEntertainmentData(DynamicObject entertainment) {
+        //业务招待清单uuid
+        String id = entertainment.getString(BaseFieldConst.ID);
+        //申请单据标识
+        String appId = entertainment.getString("nckd_appid");
+        //企业名称
+        DynamicObject company = entertainment.getDynamicObject("costcompany");
+        String companyName = company.getString(BaseFieldConst.NAME);
+        //统一社会信用代码
+        String orgCode = company.getString("uniformsocialcreditcode");
+        //填报时间
+        Date createTime = entertainment.getDate(BaseFieldConst.CREATE_TIME);
+        //经办人
+        DynamicObject applier = entertainment.getDynamicObject("applier");
+        //经办部门
+        DynamicObject dept = entertainment.getDynamicObject("costdept");
+        //招待事由
+        String description = entertainment.getString("description");
+        //来访单位
+        String visitingUnit = entertainment.getString("nckd_visiting_org");
+        //来访联系人
+        String contact = entertainment.getString("nckd_contact");
+        //来访联系电话
+        String contactPhone = entertainment.getString("nckd_contact_number");
+        //招待类型
+        String receptionType = entertainment.getString("nckd_reception_type");
+        //招待时间
+        Date receptionTime = entertainment.getDate("nckd_reception_time");
+        //实际招待人数
+        int actualQty = entertainment.getInt("nckd_actual_number");
+        //招待主宾姓名
+        String guestHonor = entertainment.getString("nckd_guesthonor");
+        //来访主宾职务
+        String position = entertainment.getString("nckd_position");
+        //车辆安排数量
+        int vchQty = entertainment.getInt("nckd_integerfield");
+        //实际费用合计
+        BigDecimal amount = entertainment.getBigDecimal("nckd_amountfield");
+
+        LinkedHashMap<String, Object> dynamicData = new LinkedHashMap<>();
+
+        dynamicData.put("uuid", id);
+        dynamicData.put("apply_uuid", appId);
+        dynamicData.put("enterprise_name", companyName);
+        dynamicData.put("credit_code", orgCode);
+        dynamicData.put("fill_time", DateUtil.date2str(createTime, DateUtil.DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS));
+        dynamicData.put("handler", applier.getString(BaseFieldConst.NAME));
+        dynamicData.put("dept", dept.getString(BaseFieldConst.NAME));
+        dynamicData.put("reception_type", receptionType);
+        dynamicData.put("reception_reason", description);
+        dynamicData.put("visit_organization", visitingUnit);
+        dynamicData.put("visit_contact", contact);
+        dynamicData.put("visit_contact_phone", contactPhone);
+        dynamicData.put("reception_time", DateUtil.date2str(receptionTime, DateUtil.DATE_FORMAT_YYYY_MM_DD));
+        dynamicData.put("reception_num", actualQty);
+        dynamicData.put("visitor_main_name", guestHonor);
+        dynamicData.put("visitor_main_post", position);
+        dynamicData.put("use_cars", vchQty);
+        dynamicData.put("cost_total", amount);
+
+        return dynamicData;
+    }
+
+    /**
+     * @param entertainment 业务招待清单
+     * @return 将单据出席人员数据转换成XML动态参数内容
+     */
+    public static List<LinkedHashMap<String, Object>> getEntertainmentAttendeesData(DynamicObject entertainment) {
+        String id = entertainment.getString(BaseFieldConst.ID);
+        //出席人员明细
+        DynamicObjectCollection entryEntity = entertainment.getDynamicObjectCollection("nckd_attendeesentity");
+        List<LinkedHashMap<String, Object>> dataList = new ArrayList<>();
+        for (DynamicObject entry : entryEntity) {
+            String entryId = entry.getString(BaseFieldConst.ID);
+            String name = entry.getString("nckd_attendeesname");
+            String position = entry.getString("nckd_attendeesposition");
+
+            LinkedHashMap<String, Object> data = new LinkedHashMap<>();
+            data.put("uuid", entryId);
+            data.put("reception_uuid", id);
+            data.put("attendance", name);
+            data.put("attendance_post", position);
+            data.put("sort", "");
+            dataList.add(data);
+        }
+        return dataList;
+    }
+
+    /**
+     * @param entertainment 业务招待清单
+     * @param type          用餐类型 1宴请 2日常用餐
+     * @return 将单据招待明细.用餐安排数据转换成XML动态参数内容
+     */
+    public static List<LinkedHashMap<String, Object>> getEntertainmentYcData(DynamicObject entertainment, String type) {
+        String id = entertainment.getString(BaseFieldConst.ID);
+        //招待时间
+        Date receptionTime = entertainment.getDate("nckd_reception_time");
+        //招待明细
+        DynamicObjectCollection entryEntity = entertainment.getDynamicObjectCollection("nckd_entryentity");
+        //过滤招待项目=用餐安排、用餐类型
+        List<DynamicObject> entryList = entryEntity.stream()
+                .filter(it -> it.getString("nckd_program").equals("1")
+                        && it.getString("nckd_mealtype").equals(type))
+                .collect(Collectors.toList());
+
+        List<LinkedHashMap<String, Object>> dataList = new ArrayList<>();
+        for (DynamicObject entry : entryList) {
+            String entryId = entry.getString(BaseFieldConst.ID);
+            //招待地点
+            String location = entry.getString("nckd_location");
+            //宴请人数
+            int personNum = entry.getInt("nckd_personnum");
+            //是否含酒水
+            boolean isHJS = entry.getBoolean("nckd_checkboxfield");
+            //酒水名称
+            String beveragesName = entry.getString("nckd_beveragesname");
+            //酒水数量
+            int beveragesNum = entry.getInt("nckd_beveragesnum");
+            //单价
+            BigDecimal price = entry.getBigDecimal("nckd_beveragesamount");
+            //是否在单位领用
+            boolean isUnit = entry.getBoolean("nckd_isunit");
+            //实际费用总额
+            BigDecimal totalAmount = entry.getBigDecimal("nckd_totalamount");
+            //实际人均费用
+            BigDecimal aveAmount = entry.getBigDecimal("nckd_aveamount");
+            //开始时间
+            Date startDate = entry.getDate("nckd_startdate");
+            //结束时间
+            Date endDate = entry.getDate("nckd_enddate");
+            //天数
+            int day = DateUtil.daysBetweenIfBlankReturnZero(startDate, endDate)+1;
+            //是否在食堂用餐
+            boolean isCafeteria = entry.getBoolean("nckd_iscafeteria");
+
+            LinkedHashMap<String, Object> data = new LinkedHashMap<>();
+            data.put("uuid", entryId);
+            data.put("reception_uuid", id);
+            //宴请
+            if (type.equals("1")) {
+                data.put("entertain_time", DateUtil.date2str(receptionTime, DateUtil.DATE_FORMAT_YYYY_MM_DD));
+                data.put("entertain_addr", location);
+                data.put("has_drinks", isHJS ? "1" : "0");
+                data.put("drinks_name", beveragesName);
+                data.put("drinks_num", beveragesNum);
+                data.put("price", price);
+                data.put("use_from_org", isUnit ? "1" : "0");
+            } else {
+                //日常用餐
+                data.put("start_time", DateUtil.date2str(startDate, DateUtil.DATE_FORMAT_YYYY_MM_DD));
+                data.put("end_time", DateUtil.date2str(endDate, DateUtil.DATE_FORMAT_YYYY_MM_DD));
+                data.put("days", day);
+                data.put("meal_in_canteen", isCafeteria ? "1" : "0");
+            }
+            data.put("banquet_count", personNum);
+            data.put("cost_total", totalAmount);
+            data.put("per_cost", aveAmount);
+            dataList.add(data);
+        }
+        return dataList;
+    }
+
+    /**
+     * @param entertainment 业务招待清单
+     * @return 将单据招待明细.住宿安排数据转换成XML动态参数内容
+     */
+    public static List<LinkedHashMap<String, Object>> getEntertainmentZsData(DynamicObject entertainment) {
+        String id = entertainment.getString(BaseFieldConst.ID);
+        //招待时间
+        Date receptionTime = entertainment.getDate("nckd_reception_time");
+        //招待明细
+        DynamicObjectCollection entryEntity = entertainment.getDynamicObjectCollection("nckd_entryentity");
+        //过滤招待项目=住宿安排
+        List<DynamicObject> entryList = entryEntity.stream()
+                .filter(it -> it.getString("nckd_program").equals("2"))
+                .collect(Collectors.toList());
+
+        List<LinkedHashMap<String, Object>> dataList = new ArrayList<>();
+        for (DynamicObject entry : entryList) {
+            String entryId = entry.getString(BaseFieldConst.ID);
+
+            //招待地点
+            String location = entry.getString("nckd_location");
+            //宴请人数
+            int personNum = entry.getInt("nckd_personnum");
+            //实际费用总额
+            BigDecimal totalAmount = entry.getBigDecimal("nckd_totalamount");
+            //实际人均费用
+            BigDecimal aveAmount = entry.getBigDecimal("nckd_aveamount");
+            //开始时间
+            Date startDate = entry.getDate("nckd_startdate");
+            //结束时间
+            Date endDate = entry.getDate("nckd_enddate");
+            //天数
+            int day = DateUtil.daysBetweenIfBlankReturnZero(startDate, endDate)+1;
+
+            LinkedHashMap<String, Object> data = new LinkedHashMap<>();
+            data.put("uuid", entryId);
+            data.put("reception_uuid", id);
+            data.put("stay_time", DateUtil.date2str(receptionTime, DateUtil.DATE_FORMAT_YYYY_MM_DD));
+            data.put("stay_addr", location);
+            data.put("stay_num", personNum);
+            data.put("stay_day", day);
+            data.put("cost_total", totalAmount);
+            data.put("per_cost", aveAmount);
+            dataList.add(data);
+        }
+        return dataList;
+    }
+
+    /**
+     * @param entertainment 业务招待清单
+     * @return 将单据招待明细.纪念品数据转换成XML动态参数内容
+     */
+    public static List<LinkedHashMap<String, Object>> getEntertainmentJnpData(DynamicObject entertainment) {
+        String id = entertainment.getString(BaseFieldConst.ID);
+        //招待明细
+        DynamicObjectCollection entryEntity = entertainment.getDynamicObjectCollection("nckd_entryentity");
+        //过滤招待项目=纪念品
+        List<DynamicObject> entryList = entryEntity.stream()
+                .filter(it -> it.getString("nckd_program").equals("4"))
+                .collect(Collectors.toList());
+
+        List<LinkedHashMap<String, Object>> dataList = new ArrayList<>();
+        for (DynamicObject entry : entryList) {
+            String entryId = entry.getString(BaseFieldConst.ID);
+            //纪念品名称
+            String name = entry.getString("nckd_souvenirname");
+            //数量
+            int qty = entry.getInt("nckd_souvenirnum");
+            //单价
+            BigDecimal price = entry.getBigDecimal("nckd_souveniramount");
+            //实际费用总额
+            BigDecimal totalAmount = entry.getBigDecimal("nckd_totalamount");
+            //实际人均费用
+            BigDecimal aveAmount = entry.getBigDecimal("nckd_aveamount");
+
+
+            LinkedHashMap<String, Object> data = new LinkedHashMap<>();
+            data.put("uuid", entryId);
+            data.put("reception_uuid", id);
+            data.put("souvenir_name", name);
+            data.put("souvenir_num", qty);
+            data.put("price", price);
+            data.put("cost_total", totalAmount);
+            data.put("per_cost", aveAmount);
+            dataList.add(data);
+        }
+        return dataList;
+    }
 }

+ 10 - 13
nckd-fi/src/main/java/nckd/fi/er/opplugin/EntertainmentPushOpPlugin.java

@@ -37,34 +37,31 @@ public class EntertainmentPushOpPlugin extends GzwPushOpPlugin {
 
     @Override
     protected LinkedHashMap<String, Object> convertMainBillData(DynamicObject bill) {
-        // 转换基础信息XML动态参数 TODO
-        return null;
+        // 转换基础信息XML动态参数
+        return GzwSyncBillUtils.getEntertainmentData(bill);
     }
 
     @Override
     protected List<LinkedHashMap<String, Object>> convertSubDatasetData(String resourceType, DynamicObject bill) {
-        List<LinkedHashMap<String, Object>> result = new ArrayList<>();
         switch (resourceType) {
             case GzwSyncBillUtils.BIZ_ATTEND:
                 // 业务招待清单子表-出席人列表
-                break;
+                return GzwSyncBillUtils.getEntertainmentAttendeesData(bill);
             case GzwSyncBillUtils.BIZ_ENTERTAIN:
                 // 业务招待清单-用餐安排-宴请
-                break;
+                return GzwSyncBillUtils.getEntertainmentYcData(bill, "1");
             case GzwSyncBillUtils.BIZ_MEAL:
                 // 业务招待清单-用餐安排- 日常用餐
-                break;
+                return GzwSyncBillUtils.getEntertainmentYcData(bill, "2");
             case GzwSyncBillUtils.BIZ_STAY:
                 // 业务招待清单-住宿安排
-                break;
+                return GzwSyncBillUtils.getEntertainmentZsData(bill);
             case GzwSyncBillUtils.BIZ_SOUVENIR:
                 // 业务招待清单-纪念品
-                break;
+                return GzwSyncBillUtils.getEntertainmentJnpData(bill);
             default:
-                break;
+                return new ArrayList<>();
         }
-
-        return result;
     }
 
     @Override
@@ -76,14 +73,14 @@ public class EntertainmentPushOpPlugin extends GzwPushOpPlugin {
     @Override
     protected String getOrgCode(DynamicObject bill) {
         //公司.社会统一信用代码
-        return bill.getString("company.uniformsocialcreditcode");
+        return bill.getString("costcompany.uniformsocialcreditcode");
     }
 
 
     @Override
     protected DynamicObject getBillOrg(DynamicObject bill) {
         //公司
-        return bill.getDynamicObject("company");
+        return bill.getDynamicObject("costcompany");
     }
 
     @Override