From 2af46aaa00d0948d1d47a1b3f7afc5d610b224c1 Mon Sep 17 00:00:00 2001 From: "15989082884@163.com" <15989082884@163.com> Date: Wed, 25 Oct 2023 14:44:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/demo/Application.java | 10 +- src/main/java/com/demo/Application5.java | 27 + .../demo/cost/SyncCheckTbsServiceImpl.java | 1720 +++++++++++++++++ .../com/demo/cost/SyncVerificationMain.java | 40 +- src/main/java/com/demo/cost/TbsMapper.java | 29 +- .../com/demo/cost/TbsPay2ServiceImpl.java | 248 +++ .../com/demo/cost/TbsPay3ServiceImpl.java | 177 ++ .../java/com/demo/cost/TbsPayServiceImpl.java | 194 ++ .../java/com/demo/cost/TbsServiceImpl.java | 2 +- .../java/com/demo/cost/entity/JslCmsPay.java | 106 + .../com/demo/cost/entity/JslErpPayZYD.java | 72 + .../java/com/demo/cost/entity/PayPayment.java | 100 + .../com/demo/cost/entity/PayPaymentBo.java | 60 + .../jsl/entity/costapply/JslCostApply.java | 2 +- .../jsl/entity/costapply/XltCostItem.java | 2 + 15 files changed, 2756 insertions(+), 33 deletions(-) create mode 100644 src/main/java/com/demo/Application5.java create mode 100644 src/main/java/com/demo/cost/SyncCheckTbsServiceImpl.java create mode 100644 src/main/java/com/demo/cost/TbsPay2ServiceImpl.java create mode 100644 src/main/java/com/demo/cost/TbsPay3ServiceImpl.java create mode 100644 src/main/java/com/demo/cost/TbsPayServiceImpl.java create mode 100644 src/main/java/com/demo/cost/entity/JslCmsPay.java create mode 100644 src/main/java/com/demo/cost/entity/JslErpPayZYD.java create mode 100644 src/main/java/com/demo/cost/entity/PayPayment.java create mode 100644 src/main/java/com/demo/cost/entity/PayPaymentBo.java diff --git a/src/main/java/com/demo/Application.java b/src/main/java/com/demo/Application.java index a4eadb1..f11d6cf 100644 --- a/src/main/java/com/demo/Application.java +++ b/src/main/java/com/demo/Application.java @@ -30,9 +30,9 @@ public class Application { // service.removeYiDong(); //移除异动 // // //费用申请 -// for (int i = 1; i < 13; i++) { -// service.syncCost(y,i); -// } + for (int i = 1; i < 13; i++) { + service.syncCost(y,i); + } //// //// //特殊的命中修改成本中心 // SyncMatchActCenter matchActCenter = new SyncMatchActCenter(); @@ -44,8 +44,8 @@ public class Application { // new TbsMatchServiceImpl().matchBudget(); // // //费用核销 - SyncVerificationMain verificationMain = new SyncVerificationMain(); - verificationMain.formain(); +// SyncVerificationMain verificationMain = new SyncVerificationMain(); +// verificationMain.formain(); //// //// //更新核销中的预算费用占用 // new SyncDiscountBudget().sync(); diff --git a/src/main/java/com/demo/Application5.java b/src/main/java/com/demo/Application5.java new file mode 100644 index 0000000..ca043fd --- /dev/null +++ b/src/main/java/com/demo/Application5.java @@ -0,0 +1,27 @@ +package com.demo; + +import com.demo.cost.*; +import lombok.extern.slf4j.Slf4j; + +/** + * @author YenHex + * @since 2023/3/22 + */ +@Slf4j +public class Application5 { + + public static void main(String[] args) { + + +// SyncCheckTbsServiceImpl service = new SyncCheckTbsServiceImpl(); +// service.checkVtb(); +// service.matchBudget(); +// service.test(); + + + TbsPay3ServiceImpl service = new TbsPay3ServiceImpl(); + service.comparePay(); + } + + +} diff --git a/src/main/java/com/demo/cost/SyncCheckTbsServiceImpl.java b/src/main/java/com/demo/cost/SyncCheckTbsServiceImpl.java new file mode 100644 index 0000000..c70ee68 --- /dev/null +++ b/src/main/java/com/demo/cost/SyncCheckTbsServiceImpl.java @@ -0,0 +1,1720 @@ +package com.demo.cost; + +import com.demo.cost.entity.*; +import com.demo.jsl.entity.cate.JslGoodsCategory; +import com.demo.jsl.entity.costapply.*; +import com.demo.jsl.entity.goods.JslGoodSpu; +import com.demo.jsl.entity.subject.JslSubject; +import com.demo.jsl.entity.supplier.JslSupplier; +import com.demo.jsl.entity.user.JslUser; +import com.demo.jsl.entity.verifi.VtbVerification; +import com.demo.jsl.entity.verifi.VtbVerificationSubject; +import com.demo.t202307042.CenterUserNameXlt; +import com.demo.util.CollectionUtil; +import com.demo.util.FileUtil; +import com.demo.util.SetData; +import com.demo.util.SqlCreateUtil; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.junit.Test; +import org.noear.wood.DbContext; + +import java.math.BigDecimal; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author YenHex + * @since 2023/3/16 + */ +@Slf4j +public class SyncCheckTbsServiceImpl { + private final String vtb_fund_flow = "vtb_fund_flow"; + private final String tbs_budget_log = "tbs_budget_log"; + private final String vtb_verification = "vtb_verification"; + private final String vtb_verification_subject = "vtb_verification_subject"; + private final String tbs_activity = "tbs_activity"; + + String insert2022Sql = "INSERT INTO tbs_budget_cost_item ( " + + " center_goods_code, " + + " cost_apply_id, " + + " activity_id, " + + " activity_code, " + + " subject_id, " + + " subject_code, " + + " subject_name, " + + " center_type, " + + " center_id, " + + " center_code, " + + " center_name, " + + " center_amount, " + + " center_rate, " + + " center_goods_amount, " + + " center_goods_rate, " + + " target_type, " + + " target_id, " + + " target_code, " + + " target_name, " + + " target_level_path_ids, " + + " target_level_path_names, " + + " remark, " + + " create_time, " + + " update_time, " + + " tenant_id, " + + " create_by, " + + " update_by, " + + " del_flag, " + + " act_start_date, " + + " act_end_date, " + + " pre_start_date, " + + " pre_end_date, " + + " pre_check_date, " + + " schedule_id, " + + " schedule_item_id, " + + " schedule_item_name, " + + " schedule_item_amount, " + + " schedule_item_amount_used, " + + " schedule_item_amount_apply, " + + " budget_id, " + + " schedule_item_budget_id, " + + " center_good_item_id, " + + " invalid_flag, " + + " supplier_id, " + + " supplier_code, " + + " supplier_name " + + ") " + + "SELECT " + + " g.center_goods_code, " + + " g.cost_apply_id, " + + " g.activity_id, " + + " g.activity_code, " + + " g.subject_id, " + + " g.subject_code, " + + " g.subject_name, " + + " g.center_type, " + + " g.center_id, " + + " g.center_code, " + + " g.center_name, " + + " g.center_amount, " + + " g.center_rate, " + + " g.center_goods_amount, " + + " g.center_goods_rate, " + + " g.target_type, " + + " g.target_id, " + + " g.target_code, " + + " g.target_name, " + + " g.target_level_path_ids, " + + " g.target_level_path_names, " + + " g.remark, " + + " g.create_time, " + + " g.update_time, " + + " g.tenant_id, " + + " g.create_by, " + + " g.update_by, " + + " g.del_flag, " + + " g.act_start_date, " + + " g.act_end_date, " + + " g.pre_start_date, " + + " g.pre_end_date, " + + " g.pre_check_date, " + + " i.schedule_id, " + + " i.schedule_item_id, " + + " i.item_name as schedule_item_name, " + + " i.budget_amount as schedule_item_amount, " + + " 0 as schedule_item_amount_used, " + + " g.center_amount as schedule_item_amount_apply, " + + " i.budget_id, " + + " i.id AS schedule_item_budget_id, " + + " g.id AS center_good_item_id, " + + " 0 as invalid_flag, " + + " g.supplier_id, " + + " g.supplier_code, " + + " g.supplier_name " + + "FROM " + + " tbs_activity_center_goods g " + + " LEFT JOIN tbs_budget b ON g.center_id = b.center_id " + + " LEFT JOIN tbs_schedule_item_budget i ON b.id = i.budget_id AND g.act_start_date BETWEEN i.start_date AND i.end_date " + + " left join tbs_cost_apply a on a.id = g.cost_apply_id " + + "WHERE " + + " i.id IS NOT NULL " + + " and b.del_flag = 0 and b.create_by is null " + + " and g.cost_apply_id = ?"; + + + String insert2022Sql2 = "INSERT INTO tbs_budget_log ( " + + " budget_id, " + + " budget_code, " + + " rollback_flag, " + + " migrate_flag, " + + " opt_type, " + + " opt_user_id, " + + " opt_user_name, " + + " opt_user_code, " + + " amount, " + + " schedule_id, " + + " schedule_item_id, " + + " schedule_item_budget_id, " + + " schedule_org_id, " + + " schedule_item_org_id, " + + " schedule_item_budget_org_id, " + + " item_name, " + + " start_date, " + + " end_date, " + + " subject_id, " + + " subject_code, " + + " subject_name, " + + " center_type, " + + " center_id, " + + " center_code, " + + " center_name, " + + " center_org_id, " + + " center_org_code, " + + " center_org_name, " + + " supplier_id, " + + " supplier_code, " + + " supplier_name, " + + " activity_id, " + + " activity_code, " + + " activity_theme, " + + " cost_apply_id, " + + " cost_apply_code, " + + " cost_apply_theme, " + + " policy_id, " + + " policy_code, " + + " policy_title, " + + " policy_item_id, " + + " policy_item_code, " + + " remark, " + + " target_type, " + + " target_id, " + + " target_code, " + + " target_name, " + + " target_level_path_ids, " + + " target_level_path_names, " + + " tenant_id, " + + " del_flag, " + + " migrate_time " + + ") " + + "SELECT " + + " i.budget_id, " + + " b.budget_code, " + + " 0 as rollback_flag, " + + " 0 as migrate_flag, " + + " 1 as opt_type, " + + " 0 as opt_user_id, " + + " '系统管理员' as opt_user_name, " + + " 0 as opt_user_code, " + + " -g.center_amount as amount, " + + " i.schedule_id, " + + " i.schedule_item_id, " + + " i.id as schedule_item_budget_id, " + + " NULL, " + + " NULL, " + + " NULL, " + + " i.item_name, " + + " g.act_start_date, " + + " g.act_end_date, " + + " g.subject_id, " + + " g.subject_code, " + + " g.subject_name, " + + " g.center_type, " + + " g.center_id, " + + " g.center_code, " + + " g.center_name, " + + " NULL, " + + " NULL, " + + " NULL, " + + " g.supplier_id, " + + " g.supplier_code, " + + " g.supplier_name, " + + " g.activity_id, " + + " g.activity_code, " + + " act.act_title, " + + " g.cost_apply_id, " + + " a.`code`, " + + " a.charge_theme, " + + " NULL, " + + " NULL, " + + " NULL, " + + " NULL, " + + " NULL, " + + " NULL, " + + " g.target_type, " + + " g.target_id, " + + " g.target_code, " + + " g.target_name, " + + " g.target_level_path_ids, " + + " g.target_level_path_names, " + + " '001', " + + " '0', " + + " NULL " + + "FROM " + + " tbs_activity_center_goods g " + + " LEFT JOIN tbs_budget b ON g.center_id = b.center_id " + + " LEFT JOIN tbs_schedule_item_budget i ON b.id = i.budget_id AND g.act_start_date BETWEEN i.start_date AND i.end_date " + + " LEFT JOIN tbs_cost_apply a ON a.id = g.cost_apply_id " + + " LEFT JOIN tbs_activity act ON act.id = g.activity_id " + + "WHERE " + + " i.id IS NOT NULL " + + " and b.del_flag = 0 and b.create_by is null " + + " AND g.cost_apply_id = ?"; + + String insertSql = "INSERT INTO tbs_budget_cost_item ( " + + " center_goods_code, " + + " cost_apply_id, " + + " activity_id, " + + " activity_code, " + + " subject_id, " + + " subject_code, " + + " subject_name, " + + " center_type, " + + " center_id, " + + " center_code, " + + " center_name, " + + " center_amount, " + + " center_rate, " + + " center_goods_amount, " + + " center_goods_rate, " + + " target_type, " + + " target_id, " + + " target_code, " + + " target_name, " + + " target_level_path_ids, " + + " target_level_path_names, " + + " remark, " + + " create_time, " + + " update_time, " + + " tenant_id, " + + " create_by, " + + " update_by, " + + " del_flag, " + + " act_start_date, " + + " act_end_date, " + + " pre_start_date, " + + " pre_end_date, " + + " pre_check_date, " + + " schedule_id, " + + " schedule_item_id, " + + " schedule_item_name, " + + " schedule_item_amount, " + + " schedule_item_amount_used, " + + " schedule_item_amount_apply, " + + " budget_id, " + + " schedule_item_budget_id, " + + " center_good_item_id, " + + " invalid_flag, " + + " supplier_id, " + + " supplier_code, " + + " supplier_name " + + ") " + + "SELECT " + + " g.center_goods_code, " + + " g.cost_apply_id, " + + " g.activity_id, " + + " g.activity_code, " + + " g.subject_id, " + + " g.subject_code, " + + " g.subject_name, " + + " g.center_type, " + + " g.center_id, " + + " g.center_code, " + + " g.center_name, " + + " g.center_amount, " + + " g.center_rate, " + + " g.center_goods_amount, " + + " g.center_goods_rate, " + + " g.target_type, " + + " g.target_id, " + + " g.target_code, " + + " g.target_name, " + + " g.target_level_path_ids, " + + " g.target_level_path_names, " + + " g.remark, " + + " g.create_time, " + + " g.update_time, " + + " g.tenant_id, " + + " g.create_by, " + + " g.update_by, " + + " g.del_flag, " + + " g.act_start_date, " + + " g.act_end_date, " + + " g.pre_start_date, " + + " g.pre_end_date, " + + " g.pre_check_date, " + + " i.schedule_id, " + + " i.schedule_item_id, " + + " i.item_name as schedule_item_name, " + + " i.budget_amount as schedule_item_amount, " + + " 0 as schedule_item_amount_used, " + + " g.center_amount as schedule_item_amount_apply, " + + " i.budget_id, " + + " i.id AS schedule_item_budget_id, " + + " g.id AS center_good_item_id, " + + " 0 as invalid_flag, " + + " g.supplier_id, " + + " g.supplier_code, " + + " g.supplier_name " + + "FROM " + + " tbs_activity_center_goods g " + + " LEFT JOIN tbs_budget b ON g.center_id = b.center_id " + + " LEFT JOIN tbs_budget_condition c ON b.id = c.budget_id AND g.target_level_path_ids LIKE CONCAT(c.target_level_path_ids, '_%') " + + " LEFT JOIN tbs_schedule_item_budget i ON b.id = i.budget_id AND g.act_start_date BETWEEN i.start_date AND i.end_date " + + " left join tbs_cost_apply a on a.id = g.cost_apply_id " + + "WHERE " + + " i.id IS NOT NULL " + + " AND c.id IS NOT NULL and b.del_flag = 0 and b.create_by is null " + + " and g.cost_apply_id = ?"; + + + String insertSql2 = "INSERT INTO tbs_budget_log ( " + + " budget_id, " + + " budget_code, " + + " rollback_flag, " + + " migrate_flag, " + + " opt_type, " + + " opt_user_id, " + + " opt_user_name, " + + " opt_user_code, " + + " amount, " + + " schedule_id, " + + " schedule_item_id, " + + " schedule_item_budget_id, " + + " schedule_org_id, " + + " schedule_item_org_id, " + + " schedule_item_budget_org_id, " + + " item_name, " + + " start_date, " + + " end_date, " + + " subject_id, " + + " subject_code, " + + " subject_name, " + + " center_type, " + + " center_id, " + + " center_code, " + + " center_name, " + + " center_org_id, " + + " center_org_code, " + + " center_org_name, " + + " supplier_id, " + + " supplier_code, " + + " supplier_name, " + + " activity_id, " + + " activity_code, " + + " activity_theme, " + + " cost_apply_id, " + + " cost_apply_code, " + + " cost_apply_theme, " + + " policy_id, " + + " policy_code, " + + " policy_title, " + + " policy_item_id, " + + " policy_item_code, " + + " remark, " + + " target_type, " + + " target_id, " + + " target_code, " + + " target_name, " + + " target_level_path_ids, " + + " target_level_path_names, " + + " tenant_id, " + + " del_flag, " + + " migrate_time " + + ") " + + "SELECT " + + " i.budget_id, " + + " b.budget_code, " + + " 0 as rollback_flag, " + + " 0 as migrate_flag, " + + " 1 as opt_type, " + + " 0 as opt_user_id, " + + " '系统管理员' as opt_user_name, " + + " 0 as opt_user_code, " + + " -g.center_amount as amount, " + + " i.schedule_id, " + + " i.schedule_item_id, " + + " i.id as schedule_item_budget_id, " + + " NULL, " + + " NULL, " + + " NULL, " + + " i.item_name, " + + " g.act_start_date, " + + " g.act_end_date, " + + " g.subject_id, " + + " g.subject_code, " + + " g.subject_name, " + + " g.center_type, " + + " g.center_id, " + + " g.center_code, " + + " g.center_name, " + + " NULL, " + + " NULL, " + + " NULL, " + + " g.supplier_id, " + + " g.supplier_code, " + + " g.supplier_name, " + + " g.activity_id, " + + " g.activity_code, " + + " act.act_title, " + + " g.cost_apply_id, " + + " a.`code`, " + + " a.charge_theme, " + + " NULL, " + + " NULL, " + + " NULL, " + + " NULL, " + + " NULL, " + + " NULL, " + + " g.target_type, " + + " g.target_id, " + + " g.target_code, " + + " g.target_name, " + + " g.target_level_path_ids, " + + " g.target_level_path_names, " + + " '001', " + + " '0', " + + " NULL " + + "FROM " + + " tbs_activity_center_goods g " + + " LEFT JOIN tbs_budget b ON g.center_id = b.center_id " + + " LEFT JOIN tbs_budget_condition c ON b.id = c.budget_id AND g.target_level_path_ids LIKE CONCAT(c.target_level_path_ids, '_%') " + + " LEFT JOIN tbs_schedule_item_budget i ON b.id = i.budget_id AND g.act_start_date BETWEEN i.start_date AND i.end_date " + + " LEFT JOIN tbs_cost_apply a ON a.id = g.cost_apply_id " + + " LEFT JOIN tbs_activity act ON act.id = g.activity_id " + + "WHERE " + + " i.id IS NOT NULL " + + " AND c.id IS NOT NULL and b.del_flag = 0 and b.create_by is null " + + " AND g.cost_apply_id = ?"; + + String sqlCheck = "SELECT g.id FROM tbs_activity_center_goods g " + + "LEFT JOIN tbs_budget b ON g.center_id = b.center_id " + + "LEFT JOIN tbs_budget_condition c ON b.id = c.budget_id AND g.target_level_path_ids LIKE CONCAT(c.target_level_path_ids, '_%') " + + "LEFT JOIN tbs_schedule_item_budget i ON b.id = i.budget_id AND g.act_start_date BETWEEN i.start_date AND i.end_date " + + "WHERE c.id IS NOT NULL and b.del_flag = 0 and b.create_by is null " + + "AND i.id IS NOT NULL " + + "and g.cost_apply_id = ? "; + + String sql2022Check = "SELECT g.id FROM tbs_activity_center_goods g " + + "LEFT JOIN tbs_budget b ON g.center_id = b.center_id " + + "LEFT JOIN tbs_schedule_item_budget i ON b.id = i.budget_id AND g.act_start_date BETWEEN i.start_date AND i.end_date " + + "WHERE b.del_flag = 0 and b.create_by is null " + + "AND i.id IS NOT NULL " + + "and g.cost_apply_id = ? "; + + @SneakyThrows + public void matchBudget(){ + DbContext jsl11Context = TbsMapper.getjsl11Context(); + DbContext jslContext = TbsMapper.getJslDbContext(); + DbContext xltContext = TbsMapper.getXltDbContext(); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date date = sdf.parse("2023-01-01"); + + +// String sql = "SELECT * FROM `tbs_cost_apply` WHERE `xlt_sync` = '2' AND `del_flag` = '0' AND `update_time` >= '2023-10-11 10:22:25' "; + String sql = "SELECT * FROM `tbs_cost_apply` WHERE `xlt_sync` = '2' AND `del_flag` = '0' AND id = 256462 "; + List costApplyList = jslContext.sql(sql).getList(JslCostApply.class); + List costApplyIds = costApplyList.stream().map(a->a.getId().toString()).collect(Collectors.toList()); + + for(JslCostApply apply : costApplyList){ + + + List activityList = jslContext.sql("select * from tbs_activity where cost_apply_id = ? ",apply.getId() ).getList(JslActivity.class); + + if(activityList.stream().filter(a->a.getActStartDate().before(date)).collect(Collectors.toList()).size()>0 && + activityList.stream().filter(a->a.getActStartDate().after(date)).collect(Collectors.toList()).size()>0){ + log.info("多个活动时间冲突----"+apply.getId()); + continue; + } + + if(activityList.stream().filter(a->a.getActStartDate().after(date)).collect(Collectors.toList()).size()>0) { + List gIds = jslContext.sql(sqlCheck,apply.getId()).getArray("id"); + if(apply.getTotalActivity() != gIds.size()){ + log.info("------"+apply.getId()); + continue; + } + jslContext.sql(insertSql, apply.getId()).execute(); + jslContext.sql(insertSql2, apply.getId()).execute(); + }else{ + List gIds = jslContext.sql(sql2022Check,apply.getId()).getArray("id"); + if(apply.getTotalActivity() != gIds.size()){ + log.info("------"+apply.getId()); + continue; + } + jslContext.sql(insert2022Sql, apply.getId()).execute(); + jslContext.sql(insert2022Sql2, apply.getId()).execute(); + } + + String lastUpdateSql = "UPDATE tbs_cost_apply a SET a.budget_sync = 1 where a.id = ?"; + jslContext.sql(lastUpdateSql,apply.getId()).execute(); + + } + } + + @SneakyThrows + public void main(){ + DbContext jsl11Context = TbsMapper.getjsl11Context(); + DbContext jslContext = TbsMapper.getJslDbContext(); + DbContext xltContext = TbsMapper.getXltDbContext(); + + List activityCodeXLT11 = jsl11Context.sql("SELECT activityCode FROM temp_ApplyCostCheck WHERE errorMsg = '销路通独有或金额与CMS不一致'").getArray("activityCode"); + String activityCodeXLT11Str = "(" + activityCodeXLT11.stream().map(id -> "'" + id + "'").collect(Collectors.joining(",")) + ")"; + List activityCMS = jslContext.sql("select * from tbs_activity where activity_code in " + activityCodeXLT11Str ).getList(JslActivity.class); + List activityCMSCode = activityCMS.stream().map(a->a.getActivityCode()).collect(Collectors.toList()); + List activityCodeXLTonly = activityCodeXLT11.stream().filter(a->!activityCMSCode.contains(a)).collect(Collectors.toList()); + activityCodeXLTonly.forEach(a->log.info(a)); + + List activityCodeCMS11 = jsl11Context.sql("SELECT activityCode FROM temp_ApplyCostCheck WHERE errorMsg = 'CMS独有或金额与销路通不一致'").getArray("activityCode"); + String activityCodeCMS11Str = "(" + activityCodeCMS11.stream().map(id -> "'" + id + "'").collect(Collectors.joining(",")) + ")"; + List xltCostItemList = this.getXltCostItemList(null,activityCodeCMS11Str,xltContext); + List activityXLTCode = xltCostItemList.stream().map(a->a.getCostItemCode()).collect(Collectors.toList()); + List activityCodeCMSonly = activityCodeCMS11.stream().filter(a->!activityXLTCode.contains(a)).collect(Collectors.toList()); + activityCodeCMSonly.forEach(a->log.info(a)); + + List activityCodeCMSMoneyError = activityCodeCMS11.stream().filter(a->activityXLTCode.contains(a)).collect(Collectors.toList()); + List activityCodeXLTMoneyError = activityCodeXLT11.stream().filter(a->activityCMSCode.contains(a)).collect(Collectors.toList()); + List activityCodeMoneyError = new ArrayList<>(); + activityCodeMoneyError.addAll(activityCodeCMSMoneyError); + activityCodeMoneyError.addAll(activityCodeXLTMoneyError); + activityCodeMoneyError.addAll(activityCodeXLTonly); + + activityCodeMoneyError = activityCodeMoneyError.stream().distinct().collect(Collectors.toList()); + + String activityCodeMoneyErrorStr = "(" + activityCodeMoneyError.stream().map(id -> "'" + id + "'").collect(Collectors.joining(",")) + ")"; + List activityCMSDel = jslContext.sql("select * from tbs_activity where activity_code in " + activityCodeMoneyErrorStr ).getList(JslActivity.class); + List costApplyIds = activityCMSDel.stream().map(a->a.getCostApplyId().toString()).distinct().collect(Collectors.toList()); +// this.removeByCostIds(costApplyIds); + } + + @SneakyThrows + public void handleDelCms(){ + DbContext jsl11Context = TbsMapper.getjsl11Context(); + DbContext jslContext = TbsMapper.getJslDbContext(); + DbContext xltContext = TbsMapper.getXltDbContext(); + + String sql = "SELECT * FROM `tbs_cost_apply` WHERE `xlt_sync` = '2' AND `del_flag` = 1 "; + List costApplyList = jslContext.sql(sql).getList(JslCostApply.class); + List costApplyIds = costApplyList.stream().map(a->a.getId().toString()).distinct().collect(Collectors.toList()); + this.removeByCostIds(costApplyIds); + } + + @SneakyThrows + public void handleOnlyCms(){ + DbContext jsl11Context = TbsMapper.getjsl11Context(); + DbContext jslContext = TbsMapper.getJslDbContext(); + DbContext xltContext = TbsMapper.getXltDbContext(); + + List activityCodeCMS11 = jsl11Context.sql("SELECT activityCode FROM temp_ApplyCostCheck WHERE errorMsg = 'CMS独有或金额与销路通不一致'").getArray("activityCode"); + String activityCodeCMS11Str = "(" + activityCodeCMS11.stream().map(id -> "'" + id + "'").collect(Collectors.joining(",")) + ")"; + List xltCostItemList = this.getXltCostItemList(null,activityCodeCMS11Str,xltContext); + List activityXLTCode = xltCostItemList.stream().map(a->a.getCostItemCode()).collect(Collectors.toList()); + List activityCodeCMSonly = activityCodeCMS11.stream().filter(a->!activityXLTCode.contains(a)).collect(Collectors.toList()); + activityCodeCMSonly.forEach(a->log.info(a)); + + String activityCodeCMSonlyStr = "(" + activityCodeCMSonly.stream().map(id -> "'" + id + "'").collect(Collectors.joining(",")) + ")"; + List activityCMS = jslContext.sql("select * from tbs_activity where activity_code in " + activityCodeCMSonlyStr ).getList(JslActivity.class); + List costApplyIds = activityCMS.stream().map(a->a.getCostApplyId().toString()).distinct().collect(Collectors.toList()); + this.removeByCostIds(costApplyIds); + } + + @SneakyThrows + public void removeByCostIds(List rmIDs){ + DbContext jslContext = TbsMapper.getJslDbContext(); + String rmIdsString = "(" + rmIDs.stream().map(id -> "'" + id + "'").collect(Collectors.joining(",")) + ")"; + jslContext.sql("delete from tbs_activity where cost_apply_id in " + rmIdsString).execute(); + jslContext.sql("delete from tbs_activity_center where cost_apply_id in " + rmIdsString).execute(); + jslContext.sql("delete from tbs_activity_center_goods where cost_apply_id in " + rmIdsString).execute(); + jslContext.sql("delete from tbs_activity_goods where cost_apply_id in " + rmIdsString).execute(); + jslContext.sql("delete from tbs_activity_subject where cost_apply_id in " + rmIdsString).execute(); + jslContext.sql("delete from vtb_verification where cost_apply_id in " + rmIdsString).execute(); + jslContext.sql("delete from vtb_verification_subject where cost_apply_id in " + rmIdsString).execute(); + jslContext.sql("delete from pay_payment where cost_apply_id in " + rmIdsString).execute(); + jslContext.sql("delete from pay_payment_item where cost_apply_id in " + rmIdsString).execute(); + jslContext.sql("delete from tbs_cost_apply where id in " + rmIdsString).execute(); + jslContext.sql("delete from tbs_budget_log where cost_apply_id in " + rmIdsString).execute(); + jslContext.sql("delete from tbs_budget_cost_item where cost_apply_id in " + rmIdsString).execute(); + jslContext.sql("delete from vtb_fund_flow where cost_apply_id in " + rmIdsString).execute(); + + jslContext.sql("delete from bir_activity_center_goods where cost_apply_id in " + rmIdsString).execute(); + jslContext.sql("delete from bir_base_activity where cost_apply_id in " + rmIdsString).execute(); + + jslContext.sql("update pay_payment_item set del_flag=1 where cost_apply_id in " + rmIdsString).execute(); + jslContext.sql("update pay_payment set del_flag=1 where cost_apply_id in " + rmIdsString).execute(); + + } + + /** + * 同步费用主要方法 + * + * @param year + * @param month + */ + @SneakyThrows + public void syncCost(Integer year, Integer month) { + String title = "同步" + year + "年" + month + "月数据"; + DbContext xltContext = TbsMapper.getXltDbContext(); + DbContext jslContext = TbsMapper.getJslDbContext(); + List allCostList = getXltCostList(xltContext,null); + if (allCostList.size() < 1) { + log.info(year + "年" + month + "月无数据"); + return; + } + List centerUserNameList = jslContext.sql("select * from center_user_name_xlt ").getList(CenterUserNameXlt.class); + List> listList = CollectionUtil.createList(allCostList, 2000); + List costList = new ArrayList<>(); + for (List xltCostList : listList) { + String codes = "(" + xltCostList.stream().map(xltCost -> "'" + xltCost.getCode() + "'").collect(Collectors.joining(",")) + ")"; + List existCodes = jslContext.sql("select code,xlt_sync from tbs_cost_apply where code in " + codes).getList(JslCostApply.class); + List rmCodes = new ArrayList<>(); + for (XltCost xltCost : xltCostList) { + boolean exist = false; + for (JslCostApply existCode : existCodes) { + if (xltCost.getCode().trim().equals(existCode.getCode())) { + exist = true; + if (existCode.getXltSync().equals(1)) { + rmCodes.add(existCode.getCode()); + exist = false; + } + } + } + if (!exist) { + costList.add(xltCost); + } + } + //删除同步异常的数据 + } + log.info(year + "年" + month + "月 未完成数量:" + costList.size()); + String fileName = "D:\\logs\\" + year + "_" + month + "_err_codes.log"; + FileUtil.create(fileName); + if (costList.size() > 0) { + this.syncCostMain(xltContext, jslContext, costList, title,centerUserNameList); + } + xltContext.close(); + jslContext.close(); + } + + @SneakyThrows + private void syncCostMain(DbContext xltContext, DbContext jslContext, List costList, String title,List centerUserNameList ) { + List categoryList = jslContext.sql("select id,xlt_id,code,name from goods_category").getList(JslGoodsCategory.class); + String customerIds = costList.stream().map(a -> "'" + a.getCusCode() + "'").distinct().collect(Collectors.joining(",")); + if (customerIds.length() < 1) { + log.warn("customerIds.length() < 1"); + return; + } + List jslSuppliers = jslContext.sql("SELECT id,xlt_id,name,region_first,region_second,region_third,code FROM `bms_supplier` WHERE code in (" + customerIds + ")").getList(JslSupplier.class); + for (int i = 0; i < costList.size(); i++) { + XltCost xltCost = costList.get(i); + try { + buildCostItem(xltContext, jslContext, categoryList, jslSuppliers, xltCost,centerUserNameList); + System.out.println(title + " =>" + i + "/" + costList.size()); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + + private void buildCostItem(DbContext xltContext, DbContext jslContext, List categoryList, + List jslSuppliers, XltCost xltCost,List centerUserNameList) throws SQLException { + JslUser jslUser = jslContext.sql("select id,code from sys_user where code = ?", xltCost.getUserCode()).getItem(JslUser.class); + String userId = "0"; + if (jslUser != null&&jslUser.getId()!=null) { + userId = jslUser.getId(); + } + Long supplierId = null; + + JslSupplier currSupplier = null; + for (JslSupplier supplier : jslSuppliers) { + if (xltCost.getCusCode().equals(supplier.getCode())) { + supplierId = supplier.getId();; + currSupplier = supplier; + break; + } + } + if (currSupplier == null) { + SetData.supplierIds.add(xltCost.getCusId()); + SetData.xltSupplierIds2.add(xltCost.getCusId()); + log.warn("xltCost.getCusId()==null ==>{}",xltCost.getCusId()); + return; + } + + String saleRegionId = currSupplier.handleSaleRegionId(); + + if(saleRegionId.equals("0")){ + log.warn("客户无销售区域:{}【{}】费用编号:{}",currSupplier.getName(),currSupplier.getCode(),xltCost.getCode()); + SetData.supplierIds2.add(currSupplier.getName()+" — "+currSupplier.getCode()); + return; + } + + String sql_sale_region_list = "select id,code,name from bms_region where id = ?"; + JslBmsRegion saleRegion = jslContext.sql(sql_sale_region_list,saleRegionId).getItem(JslBmsRegion.class); + if(saleRegion == null||saleRegion.getId()==null){ + log.warn("客户的销售区域异常:{}【{}】,销售区域ID:{}",currSupplier.getName(),currSupplier.getCode(),saleRegionId); + return; + } + + if (xltCost.getRemark() == null) { + xltCost.setRemark("无备注"); + } + String remark = xltCost.getRemark().trim().replaceAll(" ", ""); + if (remark.length() > 580) { + log.error("备注过长:" + remark); + remark = remark.substring(0, 580) + "..."; + } + xltCost.setRemark(remark); + +// Date nowDate = xltCost.getCommitDate() == null ? xltCost.getPassDate() : xltCost.getCommitDate(); +// if (nowDate == null) { +// nowDate = xltCost.getCreateDate(); +// } + Date submitDate = xltCost.getCommitDate(); + Date passDate = xltCost.getPassDate(); + Date createDate = xltCost.getCreateDate(); + + + JslCostApply costApply = new JslCostApply(); + costApply.setCode(xltCost.getCode()); + costApply.setChargeTheme(xltCost.getTitle()); + costApply.setSupplierId(supplierId); + costApply.setSupplierCode(xltCost.getCusCode()); + costApply.setSupplierName(xltCost.getCusName()); + costApply.setUserId(userId); + costApply.setUserCode(xltCost.getUserCode()); + costApply.setUserName(xltCost.getUserName()); + costApply.setTenantId("001"); + costApply.setRemark(xltCost.getRemark()); + costApply.setSubmitTime(submitDate); + costApply.setCreateTime(createDate); + costApply.setPassTime(passDate); + List xltCostItemList = this.getXltCostItemList(costApply.getCode(),null, xltContext); + BigDecimal totalMoney = BigDecimal.ZERO; + BigDecimal totalCheckMoney = BigDecimal.ZERO; + for (XltCostItem costItem : xltCostItemList) { + if (costItem.getMoney() == null) { + costItem.setMoney(BigDecimal.ZERO); + } + totalMoney = totalMoney.add(costItem.getMoney()); + if (costItem.getCheckMoney() == null) { + costItem.setCheckMoney(BigDecimal.ZERO); + } + totalCheckMoney = totalCheckMoney.add(costItem.getCheckMoney()); + } + //待执行 + costApply.setChargeState(2); + if (totalMoney.compareTo(totalCheckMoney) == 0) { + //完成 + costApply.setChargeState(3); + } + costApply.setXltSync(1); + costApply.setTotalActivity(xltCostItemList.size()); + costApply.setTotalActivityAmount(totalMoney); + costApply.setTotalActivityUsedAmount(totalCheckMoney); + Long costApplyId = null; + try { + costApplyId = jslContext.table("tbs_cost_apply").setEntity(costApply).insert(); + } catch (SQLException e) { + System.out.println(costApply.getSupplierName()); + System.out.println(costApply.getRemark()); + e.printStackTrace(); + } + if(costApplyId==null){ + return; + } + for (XltCostItem costItem : xltCostItemList) { + String remark2 = costItem.getRemark().trim().replaceAll(" ", ""); + if (remark2.length() > 580) { + log.error("备注过长:" + remark2); + remark2 = remark2.substring(0, 590) + "..."; + } + costItem.setRemark(remark2); + JslActivity activity = new JslActivity(); + activity.setActivityCode(costItem.getCostItemCode()); + boolean finished = costItem.getMoney().compareTo(costItem.getCheckMoney()) == 0; + activity.setActivityState(finished ? 0 : 2); + activity.setCostApplyId(costApplyId); + activity.setCostPassTime(passDate); + activity.setCostPassFlag(1); + activity.setActTitle(costItem.getRemark()); + activity.setSupplierId(supplierId); + activity.setSupplierCode(xltCost.getCusCode()); + activity.setSupplierName(xltCost.getCusName()); + activity.setActStartDate(costItem.getActStartTime()); + activity.setActEndDate(costItem.getActEndTime()); + activity.setPreStartDate(costItem.getActStartTime()); + activity.setPreEndDate(costItem.getActEndTime()); + activity.setPreCheckDate(costItem.getPreCheckDate()); + activity.setRemark(costItem.getRemark()); + activity.setCreateTime(createDate); + activity.setTenantId("001"); + activity.setFinishedFlag(finished ? 1 : 0); + activity.setFinishedTime(finished ? passDate : null); + activity.setTotalAmount(costItem.getMoney()); + activity.setUsedAmount(costItem.getCheckMoney()); + activity.setXltId(costItem.getId()); + Long activityId = jslContext.table("tbs_activity").setEntity(activity).insert(); + JslSubject jslSubject = this.buildAndSaveSubject(jslContext, costApplyId, costItem, activityId); + + JslActivityGoods activityGoods = new JslActivityGoods(); + activityGoods.setCostApplyId(costApplyId); + activityGoods.setActivityId(activityId); + activityGoods.setTenantId("001"); + String targetType = ""; + String targetCode = ""; + String targetName = ""; + String levelIds = ""; + String levelNames = ""; + Long targetId = 0L; + if (costItem.getSpuId() != null) { + JslGoodSpu goodSpu = jslContext.sql("SELECT * FROM `goods_spu` where xlt_id = ?", costItem.getSpuId()).getItem(JslGoodSpu.class); + if (goodSpu.getXltId().equals(costItem.getId())) { + JslGoodsCategory category1 = null; + JslGoodsCategory category2 = null; + JslGoodsCategory category3 = null; + for (JslGoodsCategory category : categoryList) { + if (category.getXltId().equals(costItem.getCateLv1())) { + category1 = category; + } + if (category.getXltId().equals(costItem.getCateLv2())) { + category2 = category; + } + if (category.getXltId().equals(costItem.getCateLv3())) { + category3 = category; + } + } + targetType = "spu"; + targetCode = goodSpu.getSpuCode(); + targetName = goodSpu.getName(); + levelIds = goodSpu.getCategoryFirst() + "_" + goodSpu.getCategorySecond() + "_" + goodSpu.getCategoryLast(); + levelNames = category1.getName() + "_" + category2.getName() + "_" + category3.getName(); + targetId = goodSpu.getId(); + } + } else if (costItem.getCateLv3() != null) { + JslGoodsCategory category1 = null; + JslGoodsCategory category2 = null; + JslGoodsCategory category3 = null; + for (JslGoodsCategory category : categoryList) { + if (category.getXltId() == null) { + continue; + } + if (category.getXltId().equals(costItem.getCateLv1())) { + category1 = category; + } + if (category.getXltId().equals(costItem.getCateLv2())) { + category2 = category; + } + if (category.getXltId().equals(costItem.getCateLv3())) { + category3 = category; + } + } + if(category3==null){ + return; + } + targetType = "series"; + targetCode = category3.getCode(); + targetName = category3.getName(); + levelIds = category1.getId() + "_" + category2.getId() + "_" + category3.getId(); + levelNames = category1.getName() + "_" + category2.getName() + "_" + category3.getName(); + targetId = category3.getId(); + } else if (costItem.getCateLv2() != null) { + JslGoodsCategory category1 = null; + JslGoodsCategory category2 = null; + for (JslGoodsCategory category : categoryList) { + if (category.getXltId() == null) { + continue; + } + if (category.getXltId().equals(costItem.getCateLv1())) { + category1 = category; + } + if (category.getXltId().equals(costItem.getCateLv2())) { + category2 = category; + } + } + targetType = "category"; + targetCode = category2.getCode(); + targetName = category2.getName(); + levelIds = category1.getId() + "_" + category2.getId(); + levelNames = category1.getName() + "_" + category2.getName(); + targetId = category2.getId(); + } else if (costItem.getCateLv1() != null) { + JslGoodsCategory category1 = null; + for (JslGoodsCategory category : categoryList) { + if (category.getXltId() != null && category.getXltId().equals(costItem.getCateLv1())) { + category1 = category; + } + } + targetType = "brand"; + targetCode = category1.getCode(); + targetName = category1.getName(); + levelIds = category1.getId() + ""; + levelNames = category1.getName(); + targetId = category1.getId(); + } + activityGoods.setTargetType(targetType); + activityGoods.setTargetId(targetId); + activityGoods.setTargetCode(targetCode); + activityGoods.setTargetName(targetName); + activityGoods.setTargetLevelPathIds(levelIds); + activityGoods.setTargetLevelPathNames(levelNames); + activityGoods.setRemark(costItem.getProductRemark()); + jslContext.table("tbs_activity_goods").setEntity(activityGoods).insert(); + + + this.buildAndSaveCenterGoods(jslContext, supplierId,saleRegion, costApplyId, costItem, + activityId, jslSubject, targetType, targetCode, targetName, levelIds, levelNames, targetId,centerUserNameList); + this.buildAndSaveActivityCenter(jslContext, supplierId,saleRegion, costApplyId, costItem, activityId, jslSubject,centerUserNameList); + + //核销读取另外一个表 +// if (costItem.getCheckMoney().compareTo(BigDecimal.ZERO) > 0) { +// this.buildAndSaveCheckPayment(jslContext, xltCost, userId, supplierId, totalCheckMoney, passDate, costApplyId, costItem, activityId, jslSubject); +// } + } + String updCallBack = "update tbs_cost_apply set xlt_sync = 2 where code = '" + xltCost.getCode() + "'"; + jslContext.sql(updCallBack).execute(); + } + + + + private void buildAndSaveCenterGoods(DbContext jslContext, Long supplierId, JslBmsRegion saleRegion,Long costApplyId, + XltCostItem costItem, Long activityId, JslSubject jslSubject, String targetType, + String targetCode, String targetName, String levelIds, String levelNames, + Long targetId,List centerUserNameList) throws SQLException { + JslActivityCenterGoods centerGoods = new JslActivityCenterGoods(); + centerGoods.setCostApplyId(costApplyId); + centerGoods.setActivityId(activityId); + centerGoods.setSubjectId(jslSubject.getId()); + centerGoods.setCenterAmount(costItem.getMoney()); + centerGoods.setCenterRate(new BigDecimal("100")); + centerGoods.setCenterType("customer"); + centerGoods.setTenantId("001"); + centerGoods.setSupplierId(supplierId); + centerGoods.setSupplierCode(costItem.getCusCode()); + centerGoods.setSupplierName(costItem.getCusName()); + + //设置成本中心 + String xltCenterCode = costItem.getCenterCode(); + for (CenterUserNameXlt nameXlt : centerUserNameList) { + if(nameXlt.getCenterUserName().equals(xltCenterCode)){ + centerGoods.setCenterType(nameXlt.getType()); + centerGoods.setCenterId(nameXlt.getCmsCenterId()); + centerGoods.setCenterName(nameXlt.getCmsCenterName()); + centerGoods.setCenterCode(nameXlt.getCmsCenterCode()); + break; + } + } + if(centerGoods.getCenterName()==null){ + if(saleRegion!=null&&!"0".equals(saleRegion.getId())){ + centerGoods.setCenterType("saleRegion"); + centerGoods.setCenterId(saleRegion.getId()); + centerGoods.setCenterName(saleRegion.getName()); + centerGoods.setCenterCode(saleRegion.getCode()); + }else { + centerGoods.setCenterId("__"+supplierId); + } + } + + //todo 同步核销时更新 + //centerGoods.setUsedAmount(totalCheckMoney); + centerGoods.setUsedAmount(BigDecimal.ZERO); + centerGoods.setRemark(costItem.getProductRemark()); + centerGoods.setCostApplyId(costApplyId); + centerGoods.setActivityId(activityId); + centerGoods.setActivityCode(costItem.getCostItemCode()); + centerGoods.setTenantId("001"); + centerGoods.setTargetType(targetType); + centerGoods.setTargetId(targetId); + centerGoods.setCenterGoodsCode(centerGoods.getActivityCode()+"_1"); + centerGoods.setTargetCode(targetCode); + centerGoods.setTargetName(targetName); + centerGoods.setTargetLevelPathIds(levelIds); + centerGoods.setTargetLevelPathNames(levelNames); + centerGoods.setRemark(costItem.getProductRemark()); + centerGoods.setActStartDate(costItem.getActStartTime()); + centerGoods.setActEndDate(costItem.getActEndTime()); + centerGoods.setPreStartDate(costItem.getActStartTime()); + centerGoods.setPreEndDate(costItem.getActEndTime()); + centerGoods.setPreCheckDate(costItem.getPreCheckDate()); + centerGoods.setSubjectId(jslSubject.getId()); + centerGoods.setSubjectCode(jslSubject.getSubjectCode()); + centerGoods.setSubjectName(jslSubject.getSubjectName()); + centerGoods.setCenterAmount(costItem.getMoney()); + centerGoods.setUsedAmount(costItem.getCheckMoney()); + centerGoods.setCenterGoodsAmount(costItem.getMoney()); + centerGoods.setCenterRate(new BigDecimal(100)); + centerGoods.setCenterGoodsRate(new BigDecimal(100)); + jslContext.table("tbs_activity_center_goods").setEntity(centerGoods).insert(); + } + + /** + * 保存成本中心 + * @param jslContext + * @param supplierId + * @param costApplyId + * @param costItem + * @param activityId + * @param jslSubject + * @throws SQLException + */ + private void buildAndSaveActivityCenter(DbContext jslContext, Long supplierId, JslBmsRegion saleRegion, + Long costApplyId, XltCostItem costItem, Long activityId, JslSubject jslSubject, + List centerUserNameList) throws SQLException { + JslActivityCenter activityCenter = new JslActivityCenter(); + activityCenter.setCostApplyId(costApplyId); + activityCenter.setActivityId(activityId); + activityCenter.setSubjectId(jslSubject.getId()); + activityCenter.setCenterAmount(costItem.getMoney()); + activityCenter.setCenterRate(new BigDecimal("100")); + + String xltCenterCode = costItem.getCenterCode(); + boolean exist = false; + for (CenterUserNameXlt nameXlt : centerUserNameList) { + if(nameXlt.getCenterUserName().equals(xltCenterCode)){ + activityCenter.setCenterType(nameXlt.getType()); + activityCenter.setCenterId(nameXlt.getCmsCenterId()); + activityCenter.setCenterName(nameXlt.getCmsCenterName()); + activityCenter.setCenterCode(nameXlt.getCmsCenterCode()); + exist = true; + break; + } + } + if(!exist){ + activityCenter.setCenterType("customer"); + activityCenter.setCenterCode(costItem.getCenterCode()); + activityCenter.setCenterName(costItem.getCenterName()); + if(saleRegion!=null&&!"0".equals(saleRegion.getId())){ + activityCenter.setCenterType("saleRegion"); + activityCenter.setCenterId(saleRegion.getId()); + activityCenter.setCenterName(saleRegion.getName()); + activityCenter.setCenterCode(saleRegion.getCode()); + }else { + activityCenter.setCenterId("__"+supplierId); + } + } + + //todo 同步时更新 + //activityCenter.setUsedAmount(totalCheckMoney); + activityCenter.setUsedAmount(BigDecimal.ZERO); + activityCenter.setRemark(costItem.getProductRemark()); + activityCenter.setTenantId("001"); + jslContext.table("tbs_activity_center").setEntity(activityCenter).insert(); + } + + private JslSubject buildAndSaveSubject(DbContext jslContext, Long costApplyId, XltCostItem costItem, Long activityId) throws SQLException { + JslSubject jslSubject = jslContext.sql( + "select id,xlt_id,subject_name,subject_code from bms_subject where xlt_id = '" + + costItem.getSubjectXltId() + "'").getItem(JslSubject.class); + JslActivitySubject activitySubject = new JslActivitySubject(); + activitySubject.setCostApplyId(costApplyId); + activitySubject.setActivityId(activityId); + activitySubject.setSubjectId(jslSubject.getId()); + activitySubject.setSubjectCode(jslSubject.getSubjectCode()); + activitySubject.setSubjectName(jslSubject.getSubjectName()); + activitySubject.setAmount(costItem.getMoney()); + activitySubject.setCountPerson(costItem.getCountPerson() == null ? 0 : costItem.getCountPerson()); + activitySubject.setCountSession(costItem.getCountSession() == null ? 0 : costItem.getCountSession()); + activitySubject.setRemark(costItem.getProductRemark()); + activitySubject.setTenantId("001"); + jslContext.table("tbs_activity_subject").setEntity(activitySubject).insert(); + return jslSubject; + } + + @SneakyThrows + private List getXltCostItemList(String xltCostCode,String activityCodeWhere, DbContext xltContext) { + String sql = "SELECT " + + " rel.listNumber AS cost_item_code, " + + " rel.number_ AS cost_code, " + + " rel.reportTimeStart AS report_start_time, " + + " rel.reportTimeEnd AS report_end_time, " + + " rel.changCi AS count_session, " + + " rel.renShu AS count_person, " + + " rel.remark, " + + " rel.state, " + + " rel.pinPai AS cate_lv1, " + + " rel.pinLei AS cate_lv2, " + + " rel.productType AS cate_lv3, " + + " rel.sku AS spu, " + + " rel.yuSuanTimeStart AS act_start_time, " + + " rel.yuSuanTimeEnd AS act_end_time, " + + " rel.yujihexiaoDate AS pre_check_date, " + + " rel.money, " + + " rel.hexiaomoney AS check_money, " + + " rel.chanPinMiaoShu AS product_remark, " + + " costtype.ID AS subject_xlt_id, " + + " costtype.number AS subject_code, " + + " costtype.costnameForSales AS subject_name, " + + " dea.id AS cus_id, " + + " dea.dealerName AS cus_name, " + + " dea.dealerNumber AS cus_code, " + + " rel.chengBenId AS center_id, " + + " rel.chengBenName AS center_name, " + + " dea.dealerNumber AS center_code " + + " FROM " + + " ReportList rel " + + " LEFT JOIN costtype ON costtype.costnum = rel.feeType " + + " LEFT JOIN DealerConnTable dea ON dea.id LIKE rel.chengBenId"; + sql = sql + " where 1=1"; + if(StringUtils.isNotEmpty(xltCostCode)){ + sql = sql + " and rel.number_ = '" + xltCostCode + "'"; + } + + if(StringUtils.isNotEmpty(activityCodeWhere)){ + sql = sql + " and rel.listNumber in " + activityCodeWhere; + } + + List costItemList = xltContext.sql(sql).getList(XltCostItem.class); + return costItemList; + } + + @SneakyThrows + private List getXltCostList(DbContext xltContext,String costApplyCode) { + + String sql = " SELECT " + + "rep.number_ as code, " + + "rep.title, " + + "rep.fenquId as region_id, " + + "rep.shengfenId as province_id, " + + "rep.cityId as city_id, " + + "rep.createDate as create_date, " + + "rep.content as remark2, " + + "rep.remark, " + + "rep.archiveDate as pass_date, " + + "rep.commitDate as commit_date,"+ + "emp.id as user_id, " + + "emp.name as user_name, " + + "emp.numNo as user_code, " + + "dea.id as cus_id, " + + "dea.dealerName as cus_name, " + + "dea.dealerNumber as cus_code " + + "FROM Report rep " + + "LEFT JOIN employee emp ON rep.fromEmployee = emp.ID " + + "LEFT JOIN DealerConnTable dea ON dea.id like rep.dealerid " + + "where rep.state = '70' " + (StringUtils.isNotEmpty(costApplyCode)?(" and rep.number_ = '"+costApplyCode+"'") : "") + + " ORDER BY rep.archiveDate "; + List xltCostList = xltContext.sql(sql).getList(XltCost.class); + xltCostList = xltCostList.stream().distinct().collect(Collectors.toList()); + return xltCostList; + } + + public static void main(String[] args) { + System.out.println(" SELECT " + + "rep.number_ as code, " + + "rep.title, " + + "rep.fenquId as region_id, " + + "rep.shengfenId as province_id, " + + "rep.cityId as city_id, " + + "rep.createDate as create_date, " + + "rep.content as remark2, " + + "rep.remark, " + + "rep.archiveDate as pass_date, " + + "rep.commitDate as commit_date,"+ + "emp.id as user_id, " + + "emp.name as user_name, " + + "emp.numNo as user_code, " + + "dea.id as cus_id, " + + "dea.dealerName as cus_name, " + + "dea.dealerNumber as cus_code " + + "FROM Report rep " + + "LEFT JOIN employee emp ON rep.fromEmployee = emp.ID " + + "LEFT JOIN DealerConnTable dea ON dea.id like rep.dealerid " + + "where rep.state = '70' " + + "and year(archiveDate) = '' " + + "and month(archiveDate) = '' " + + "ORDER BY rep.archiveDate "); + } + + + @SneakyThrows + public void checkVtb(){ + DbContext jsl11Context = TbsMapper.getjsl11Context(); + DbContext jslContext = TbsMapper.getJslDbContext(); + DbContext xltContext = TbsMapper.getXltDbContext(); + + + String sql_xlt_check_cost = + " SELECT oldlistnumber as activity_code," + + " cmain.number_ AS main_number, " + + " clist.listNumber as list_number, " + + " clist.isYuEBuYuHeXiao not_allow_flag, " + + " clist.pifumoney as apply_amt, " + + " (cList.hexiaomoney + cList.shuiJin) check_pass_amt, " + + " cList.exedate " + + " FROM " + + " costreimbursementList clist " + + " LEFT JOIN costreimbursement cmain " + + " ON clist.mainID = cmain.id " + + " WHERE " + + " cmain.state = '120' " + + " and clist.iscancel = '0' " + + " and clist.iszuofei != 1 " + + " AND oldreportnumber in " ;//活动id + + String sql_xlt_check_cost_cancel = + " SELECT oldlistnumber as activity_code," + + " cmain.number_ AS main_number, " + + " clist.listNumber as list_number, " + + " clist.isYuEBuYuHeXiao not_allow_flag, " + + " clist.pifumoney as apply_amt, " + + " cList.weihexiaomoney check_pass_amt, " + + " cList.exedate " + + " FROM " + + " costreimbursementList clist " + + " LEFT JOIN costreimbursement cmain " + + " ON clist.mainID = cmain.id " + + " WHERE " + + " cmain.state = '120' " + + " and clist.iscancel = '1' " + + " and clist.iszuofei != 1 " + + " AND oldreportnumber in "; + + + String sql_cms_vtb = "select * from vtb_verification where del_flag !=1 and cost_apply_id in "; + String sql_cms_vtbFund = "select * from vtb_fund_flow where del_flag !=1 and fund_type = 'release' and cost_apply_id in "; + + Integer sumOnlyXltVtbMoneyNotZero = 0; + Integer sumOnlyCmsVtbCode = 0; + Integer sumOnlyXltReleaseMoneyNotZero = 0; + Integer sumOnlyCmsReleaseCode = 0; + + List needReleaseCode = new ArrayList<>(); + List needSyncXLTCode = new ArrayList<>(); + List needSyncReleaseXLTCode = new ArrayList<>(); + + + for(int month = 1;month<=12;month++) { + String sql = "SELECT * FROM `tbs_cost_apply` WHERE `xlt_sync` is not null AND `del_flag` = '0' and year(submit_time) = 2023 and month(submit_time)= " + month; + List costApplyList = jslContext.sql(sql).getList(JslCostApply.class); + if(costApplyList.size()==0){ + continue; + } + String costApplyIdsString = "(" + costApplyList.stream().map(a -> "'" + a.getId().toString() + "'").collect(Collectors.joining(",")) + ")"; + List vtbList = jslContext.sql(sql_cms_vtb+costApplyIdsString).getList(VtbVerification.class); + log.info(month + "月 CMS核销数:"+vtbList.size()); + + String costApplyListCodeString = "(" + costApplyList.stream().map(a -> "'" + a.getCode() + "'").collect(Collectors.joining(",")) + ")"; + List checkCostItemListAll = xltContext.sql(sql_xlt_check_cost + costApplyListCodeString).getList(XltCheckCostItem.class); + log.info(month + "月 XLT核销数:"+checkCostItemListAll.size()); + + +// ------------------------------VTB比对--------------------------------------------------- + List cmsVtbCode = vtbList.stream().map(a->a.getVerificationCode()).collect(Collectors.toList()); + List xltVtbCode = checkCostItemListAll.stream().map(a->a.getListNumber()).collect(Collectors.toList()); + List onlyCmsVtbCode = cmsVtbCode.stream().filter(a->!xltVtbCode.contains(a)).collect(Collectors.toList()); + List onlyXltVtbCode = xltVtbCode.stream().filter(a->!cmsVtbCode.contains(a)).collect(Collectors.toList()); + log.info(month + "月OnlyCMS核销数:"+onlyCmsVtbCode.size()); +// log.info(month + "月OnlyXLT核销数:"+onlyXltVtbCode.size()); + List onlyXltVtbMoneyNotZero = checkCostItemListAll.stream().filter(a->onlyXltVtbCode.contains(a.getListNumber())).filter(a->a.getCheckPassAmt().compareTo(BigDecimal.ZERO)>0).collect(Collectors.toList()); + if(onlyCmsVtbCode.size()>0){ + //这部份CMS需要作废,XLT已作废 + onlyCmsVtbCode.forEach(a->{ + log.info(a); + }); + + List onlyCmsVtbIds = vtbList.stream().filter(a->onlyCmsVtbCode.contains(a.getVerificationCode())).collect(Collectors.toList()); + for (VtbVerification vtb : onlyCmsVtbIds){ + jslContext.sql("delete from vtb_fund_flow where verification_id = ?",vtb.getId()).execute(); + jslContext.sql("delete from tbs_budget_log where opt_type = 4 and activity_id = ?",vtb.getActivityId()).execute(); + jslContext.sql("delete from vtb_verification where id = ?",vtb.getId()).execute(); + jslContext.sql("delete from vtb_verification_subject where verification_id =? " ,vtb.getId()).execute(); + } + } + + + log.info(month + "月OnlyXLT核销数:"+onlyXltVtbMoneyNotZero.size()); + if(onlyXltVtbMoneyNotZero.size()>0){ + //这部份CMS需要添加 + onlyXltVtbMoneyNotZero.forEach(a->{ + log.info(a.getListNumber()); + needSyncXLTCode.add(a.getListNumber()); + }); + } + sumOnlyCmsVtbCode = sumOnlyCmsVtbCode + onlyCmsVtbCode.size(); + sumOnlyXltVtbMoneyNotZero = sumOnlyXltVtbMoneyNotZero + onlyXltVtbMoneyNotZero.size(); + +// ------------------------------------------------------------------------------------- +// ------------------------------Release比对--------------------------------------------------- + + List fundList = jslContext.sql(sql_cms_vtbFund+costApplyIdsString).getList(JslVtbFundFlow.class); + log.info(month + "月 CMS释放数:"+fundList.size()); + + List checkCostItemListAllCancel = xltContext.sql(sql_xlt_check_cost_cancel + costApplyListCodeString).getList(XltCheckCostItem.class); + log.info(month + "月 XLT释放数:"+checkCostItemListAllCancel.size()); + + List cmsReleaseCode = fundList.stream().map(a->a.getCenterGoodsCode().substring(0,a.getCenterGoodsCode().lastIndexOf("_"))).collect(Collectors.toList()); + List xltReleaseCode = checkCostItemListAllCancel.stream().map(a->a.getActivityCode()).collect(Collectors.toList()); + List onlyCmsReleaseCode = cmsReleaseCode.stream().filter(a->!xltReleaseCode.contains(a)).collect(Collectors.toList()); + List onlyXltReleaseCode = xltReleaseCode.stream().filter(a->!cmsReleaseCode.contains(a)).collect(Collectors.toList()); + + if(onlyCmsReleaseCode.size()>0){ + String onlyCmsReleaseCodeString = "(" + onlyCmsReleaseCode.stream().map(a -> "'" + a + "'").collect(Collectors.joining(",")) + ")"; + List xltCostItemList = this.getXltCostItemList(null,onlyCmsReleaseCodeString, xltContext); + xltCostItemList = xltCostItemList.stream().filter(a->!a.getState().equals(2)).collect(Collectors.toList()); + log.info(month + "月OnlyCMS释放数:"+xltCostItemList.size()); + + if(xltCostItemList.size()>0){ + xltCostItemList.forEach(a->{ + log.info(a.getCostItemCode()); + needReleaseCode.add(a.getCostItemCode()); + }); + } + sumOnlyCmsReleaseCode = sumOnlyCmsReleaseCode + xltCostItemList.size(); + + } + + List onlyXltReleaseMoneyNotZero = checkCostItemListAllCancel.stream().filter(a->onlyXltReleaseCode.contains(a.getActivityCode())).filter(a->a.getCheckPassAmt().compareTo(BigDecimal.ZERO)>0).collect(Collectors.toList()); + log.info(month + "月OnlyXLT释放数:"+onlyXltReleaseMoneyNotZero.size()); + + if(onlyXltReleaseMoneyNotZero.size()>0){ + onlyXltReleaseMoneyNotZero.forEach(a->{ + log.info(a.getActivityCode()); + needSyncReleaseXLTCode.add(a.getActivityCode()); + }); + } + sumOnlyXltReleaseMoneyNotZero = sumOnlyXltReleaseMoneyNotZero + onlyXltReleaseMoneyNotZero.size(); + +// ------------------------------------------------------------------------------------- + if(onlyXltVtbMoneyNotZero.size()>0){ + syncXLTVtb(onlyXltVtbMoneyNotZero); + } + + if(onlyXltReleaseMoneyNotZero.size()>0){ + syncXLTRelease(onlyXltReleaseMoneyNotZero); + } + } + + log.info("sumOnlyXltVtbMoneyNotZero"+sumOnlyXltVtbMoneyNotZero); + log.info("sumOnlyCmsVtbCode"+sumOnlyCmsVtbCode); + log.info("sumOnlyXltReleaseMoneyNotZero"+sumOnlyXltReleaseMoneyNotZero); + log.info("sumOnlyCmsReleaseCode"+sumOnlyCmsReleaseCode); + + log.info("-----------------needReleaseCode-----------------------------"); + needReleaseCode.forEach(a->log.info(a)); + log.info("------------------needSyncXLTCode----------------------------"); + needSyncXLTCode.forEach(a->log.info(a)); + log.info("------------------needSyncReleaseXLTCode----------------------------"); + needSyncReleaseXLTCode.forEach(a->log.info(a)); + + } + + @SneakyThrows + public void syncXLTRelease(List onlyXltReleaseMoneyNotZero){ + DbContext jsl11Context = TbsMapper.getjsl11Context(); + DbContext jslContext = TbsMapper.getJslDbContext(); + DbContext xltContext = TbsMapper.getXltDbContext(); + + String sql_activity_list = "select * from tbs_activity where activity_code = ? and del_flag != 1"; + + for(XltCheckCostItem checkCostItem : onlyXltReleaseMoneyNotZero) { + String activityCode = checkCostItem.getActivityCode(); + List tbsActivities = jslContext.sql(sql_activity_list, activityCode).getList(JslTbsActivity.class); + if (tbsActivities.size() == 0) { + log.info("找不到对应活动" + activityCode); + continue; + } + + JslTbsActivity updAct = tbsActivities.get(0); + + String applysql = "SELECT * FROM `tbs_cost_apply` WHERE id = ?"; + List costApplyList = jslContext.sql(applysql,updAct.getCostApplyId()).getList(JslTbsCostApply.class); + if(costApplyList.size()==0){ + continue; + } + JslTbsCostApply costApply = costApplyList.get(0); + + BigDecimal totalReleaseAmt = checkCostItem.getCheckPassAmt(); + + updAct.setActivityState(4); + updAct.setReleaseFlag(1); + updAct.setFinishedFlag(1); + updAct.setReleaseUserId("0"); + updAct.setReleaseUserName("系统导入"); + updAct.setReleaseTime(checkCostItem.getExedate()); + updAct.setReleaseAmount(totalReleaseAmt); + updAct.setFinishedFlag(1); + + + String sql_budget_cost_item = "select * from tbs_budget_cost_item where activity_id = ?"; + JslTbsBudgetCostItem currCostItem = jslContext.sql(sql_budget_cost_item, updAct.getId()).getItem(JslTbsBudgetCostItem.class); + if (currCostItem == null || currCostItem.getId() == null) { + System.out.println("没有命中核销的费用活动id:"+updAct.getId()); + continue; + } + + this.doNotAllowCost(currCostItem,totalReleaseAmt,jslContext,costApply,updAct); + + String sql_update_act_info = SqlCreateUtil.buildUpdateSql(updAct, tbs_activity) + " where id = " + updAct.getId(); + jslContext.sql(sql_update_act_info).execute(); + } + } + + @SneakyThrows + public void syncXLTVtb(List onlyXltVtbMoneyNotZero){ + DbContext jsl11Context = TbsMapper.getjsl11Context(); + DbContext jslContext = TbsMapper.getJslDbContext(); + DbContext xltContext = TbsMapper.getXltDbContext(); + + String sql_budget_cost_item = "select * from tbs_budget_cost_item where activity_id = ? and del_flag != 1"; + String sql_activity_list = "select * from tbs_activity where activity_code = ? and del_flag != 1"; + + for(XltCheckCostItem checkCostItem : onlyXltVtbMoneyNotZero){ + String activityCode = checkCostItem.getActivityCode(); + List tbsActivities = jslContext.sql(sql_activity_list,activityCode).getList(JslTbsActivity.class); + if(tbsActivities.size()==0){ + log.info("找不到对应活动" + activityCode); + continue; + } + + JslTbsActivity tbsActivity = tbsActivities.get(0); + + JslTbsBudgetCostItem currCostItem = jslContext.sql(sql_budget_cost_item, tbsActivity.getId()).getItem(JslTbsBudgetCostItem.class); + if (currCostItem == null || currCostItem.getId() == null) { + System.out.println("没有命中核销的费用 活动Code:"+activityCode); + continue; + } + + String sql_activity_subject = "select * from tbs_activity_subject where activity_id = ?"; + JslTbsActivitySubject activitySubject = jslContext.sql(sql_activity_subject, tbsActivity.getId()).getItem(JslTbsActivitySubject.class); + //核销金额 + BigDecimal checkCostAmt = checkCostItem.getCheckPassAmt(); + //申请核销金额 + BigDecimal checkApplyCostAmt = checkCostItem.getApplyAmt(); + + VtbVerification verification = new VtbVerification(); + verification.setVerificationCode(checkCostItem.getListNumber()); + if(verification.getVerificationCode().contains("_")){ + String mainCode = verification.getVerificationCode().substring(0,verification.getVerificationCode().indexOf("_")); + verification.setVerificationMainCode(mainCode); + }else{ + verification.setVerificationMainCode(verification.getVerificationCode()); + } + verification.setFinishedTime(checkCostItem.getExedate()); + verification.setCostApplyId(tbsActivity.getCostApplyId()); + verification.setActivityId(tbsActivity.getId()); + verification.setVerificationState(1); + verification.setPaymentState(1); + verification.setAmount(checkCostAmt); + verification.setAmountRecord(checkApplyCostAmt); + verification.setTenantId("001"); + verification.setSupplierId(tbsActivity.getSupplierId()); + verification.setSupplierName(tbsActivity.getSupplierName()); + verification.setSupplierCode(tbsActivity.getSupplierCode()); + verification.setUserId("0"); + verification.setUserCode("0"); + verification.setUserName("数据导入"); + + Long verId = jslContext.table(vtb_verification).setEntity(verification).insert(); + verification.setId(verId); + + //流水记录 + JslVtbFundFlow fundFlow = new JslVtbFundFlow(); + fundFlow.setFundType("verification"); + fundFlow.setVerificationId(verification.getId()); + fundFlow.setCenterGoodsCode(tbsActivity.getActivityCode() + "_00"); + fundFlow.setCostApplyId(tbsActivity.getCostApplyId()); + fundFlow.setActivityId(tbsActivity.getId()); + fundFlow.setUsedAmount(checkCostAmt); + fundFlow.setSupplierId(tbsActivity.getSupplierId()); + fundFlow.setSupplierCode(tbsActivity.getSupplierCode()); + fundFlow.setSupplierName(tbsActivity.getSupplierName()); + fundFlow.setTenantId("001"); + + fundFlow.setSubjectId(0L); + fundFlow.setSubjectCode(""); + fundFlow.setSubjectName(""); + + fundFlow.setCenterType(currCostItem.getCenterType()); + fundFlow.setCenterId(currCostItem.getCenterId()); + fundFlow.setCenterCode(currCostItem.getCenterCode()); + fundFlow.setCenterName(currCostItem.getCenterName()); + + fundFlow.setTargetType(currCostItem.getTargetType()); + fundFlow.setTargetId(currCostItem.getTargetId()); + fundFlow.setTargetCode(currCostItem.getTargetCode()); + fundFlow.setTargetName(currCostItem.getTargetName()); + fundFlow.setTargetLevelPathIds(currCostItem.getTargetLevelPathIds()); + fundFlow.setTargetLevelPathNames(currCostItem.getTargetLevelPathNames()); + fundFlow.setCenterGoodItemId(currCostItem.getCenterGoodItemId()); + + fundFlow.setSupplierId(tbsActivity.getSupplierId()); + fundFlow.setSupplierCode(tbsActivity.getSupplierCode()); + fundFlow.setSupplierName(tbsActivity.getSupplierName()); + jslContext.table(vtb_fund_flow).setEntity(fundFlow).insert(); + + VtbVerificationSubject verificationSubject = new VtbVerificationSubject(); + verificationSubject.setVerificationId(verification.getId()); + verificationSubject.setVerificationSubCode(checkCostItem.getListNumber()); + verificationSubject.setCostApplyId(tbsActivity.getCostApplyId()); + verificationSubject.setActivityId(tbsActivity.getId()); + verificationSubject.setSubjectId(activitySubject.getSubjectId()); + verificationSubject.setSubjectCode(activitySubject.getSubjectCode()); + verificationSubject.setSubjectName(activitySubject.getSubjectName()); + verificationSubject.setSupplierId(tbsActivity.getSupplierId()); + verificationSubject.setSupplierName(tbsActivity.getSupplierName()); + verificationSubject.setSupplierCode(tbsActivity.getSupplierCode()); + verificationSubject.setUsedAmountRecord(checkApplyCostAmt); + verificationSubject.setUsedAmount(checkCostAmt); + verificationSubject.setPayAmount(checkCostAmt); + verificationSubject.setCountPerson(0); + verificationSubject.setCountSession(0); + verificationSubject.setTenantId("001"); + jslContext.table(vtb_verification_subject).setEntity(verificationSubject).insert(); + + + String sql_vtb = "select * from vtb_verification where del_flag !=1 and activity_id =? "; + List vtbList = jslContext.sql(sql_vtb,tbsActivity.getId()).getList(VtbVerification.class); + BigDecimal vtbAmount = vtbList.stream().map(a->a.getAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); + + tbsActivity.setUsedAmount(vtbAmount); + if(vtbAmount.compareTo(tbsActivity.getTotalAmount())==0){ + tbsActivity.setFinishedFlag(1); + } + String sql_update_act_info = SqlCreateUtil.buildUpdateSql(tbsActivity, tbs_activity) + " where id = " + tbsActivity.getId(); + jslContext.sql(sql_update_act_info).execute(); + + } + } + + @SneakyThrows + public void test(){ + DbContext jslContext = TbsMapper.getJslDbContext(); + String sql_activity_list = "select * from tbs_activity where id = ? and del_flag != 1"; + + List tbsActivities = jslContext.sql(sql_activity_list,"59464").getList(JslTbsActivity.class); + if(tbsActivities.size()==0){ + log.info("找不到对应活动" ); + return; + } + + JslTbsActivity tbsActivity = tbsActivities.get(0); + + String sql_vtb = "select * from vtb_verification where del_flag !=1 and activity_id =? "; + List vtbList = jslContext.sql(sql_vtb,"59464").getList(VtbVerification.class); + BigDecimal vtbAmount = vtbList.stream().map(a->a.getAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); + log.info(vtbAmount.toString()); + + tbsActivity.setUsedAmount(vtbAmount); + if(vtbAmount.compareTo(tbsActivity.getTotalAmount())==0){ + tbsActivity.setFinishedFlag(1); + } + String sql_update_act_info = SqlCreateUtil.buildUpdateSql(tbsActivity, tbs_activity) + " where id = " + tbsActivity.getId(); + jslContext.sql(sql_update_act_info).execute(); + } + + + private void doNotAllowCost(JslTbsBudgetCostItem currCostItem, BigDecimal totalReleaseAmt, + DbContext jslDbContext, JslTbsCostApply costApply, JslTbsActivity tbsActivity ) throws SQLException { + //插入日志流水 + JslVtbFundFlow fundFlow = new JslVtbFundFlow(); + fundFlow.setFundType("release"); + fundFlow.setVerificationId(0L); + fundFlow.setCenterGoodsCode(tbsActivity.getActivityCode() + "_00"); + fundFlow.setCostApplyId(tbsActivity.getCostApplyId()); + fundFlow.setActivityId(tbsActivity.getId()); + fundFlow.setUsedAmount(totalReleaseAmt); + fundFlow.setSupplierId(tbsActivity.getSupplierId()); + fundFlow.setSupplierCode(tbsActivity.getSupplierCode()); + fundFlow.setSupplierName(tbsActivity.getSupplierName()); + fundFlow.setTenantId("001"); + + fundFlow.setSubjectId(0L); + fundFlow.setSubjectCode(""); + fundFlow.setSubjectName(""); + + fundFlow.setCenterType(currCostItem.getCenterType()); + fundFlow.setCenterId(currCostItem.getCenterId()); + fundFlow.setCenterCode(currCostItem.getCenterCode()); + fundFlow.setCenterName(currCostItem.getCenterName()); + + fundFlow.setTargetType(currCostItem.getTargetType()); + fundFlow.setTargetId(currCostItem.getTargetId()); + fundFlow.setTargetCode(currCostItem.getTargetCode()); + fundFlow.setTargetName(currCostItem.getTargetName()); + fundFlow.setTargetLevelPathIds(currCostItem.getTargetLevelPathIds()); + fundFlow.setTargetLevelPathNames(currCostItem.getTargetLevelPathNames()); + fundFlow.setCenterGoodItemId(currCostItem.getId()); + + fundFlow.setSupplierId(tbsActivity.getSupplierId()); + fundFlow.setSupplierCode(tbsActivity.getSupplierCode()); + fundFlow.setSupplierName(tbsActivity.getSupplierName()); + + jslDbContext.table(vtb_fund_flow).setEntity(fundFlow).insert(); + + String sql_budget_by_ids = "select * from tbs_budget where id = " + currCostItem.getBudgetId(); + JslTbsBudget currentBudget = jslDbContext.sql(sql_budget_by_ids).getItem(JslTbsBudget.class); + + JslUser jslUser = new JslUser(); + jslUser.setId("0"); + jslUser.setCode("0"); + jslUser.setName("系统导入"); + + JslTbsBudgetLog budgetLog = this.buildTbsBudgetLog(4, jslUser, costApply, currCostItem, currentBudget, totalReleaseAmt, tbsActivity); + budgetLog.setTenantId("001"); + + if(budgetLog.getActivityTheme().length()>=150){ + budgetLog.setActivityTheme(budgetLog.getActivityTheme().substring(0,149)); + } + if(budgetLog.getCostApplyTheme().length()>=150){ + budgetLog.setCostApplyTheme(budgetLog.getCostApplyTheme().substring(0,149)); + } + + jslDbContext.table(tbs_budget_log).setEntity(budgetLog).insert(); + + } + + /** + * 费用申请相关 + * + * @param optType + * @param sysUser + * @param costApply + * @param item + * @param budget + * @param amount + * @param activity + * @return + */ + public JslTbsBudgetLog buildTbsBudgetLog(Integer optType, JslUser sysUser, JslTbsCostApply costApply, + JslTbsBudgetCostItem item, JslTbsBudget budget, BigDecimal amount, JslTbsActivity activity) { + BigDecimal amountAmt = amount; + if (amountAmt.compareTo(BigDecimal.ZERO) <= 0) { + amountAmt = amountAmt.negate(); + } + JslTbsBudgetLog budgetLog = new JslTbsBudgetLog(); + budgetLog.setBudgetId(item.getBudgetId()); + budgetLog.setBudgetCode(budget.getBudgetCode()); + budgetLog.setOptType(optType); + budgetLog.setOptUserId(sysUser.getId()); + budgetLog.setOptUserCode(sysUser.getCode()); + budgetLog.setOptUserName(sysUser.getName()); + budgetLog.setAmount(amountAmt); + budgetLog.setScheduleId(item.getScheduleId()); + budgetLog.setScheduleItemId(item.getScheduleItemId()); + budgetLog.setScheduleItemBudgetId(item.getScheduleItemBudgetId()); + budgetLog.setItemName(item.getScheduleItemName()); + budgetLog.setStartDate(item.getActStartDate().atStartOfDay()); + budgetLog.setEndDate(item.getActEndDate().atStartOfDay()); + budgetLog.setSubjectId(item.getSubjectId()); + budgetLog.setSubjectCode(item.getSubjectCode()); + budgetLog.setSubjectName(item.getSubjectName()); + budgetLog.setCenterId(item.getCenterId()); + budgetLog.setCenterCode(item.getCenterCode()); + budgetLog.setCenterName(item.getCenterName()); + budgetLog.setCenterType(item.getCenterType()); + budgetLog.setSupplierId(item.getSupplierId()); + budgetLog.setSupplierCode(item.getSupplierCode()); + budgetLog.setSupplierName(item.getSupplierName()); + budgetLog.setActivityId(item.getActivityId()); + budgetLog.setActivityCode(item.getActivityCode()); + budgetLog.setActivityTheme(activity.getActTitle()); + budgetLog.setCostApplyId(costApply.getId()); + budgetLog.setCostApplyCode(costApply.getCode()); + budgetLog.setCostApplyTheme(costApply.getChargeTheme()); + budgetLog.setTargetType(item.getTargetType()); + budgetLog.setTargetId(item.getTargetId()); + budgetLog.setTargetCode(item.getTargetCode()); + budgetLog.setTargetName(item.getTargetName()); + budgetLog.setTargetLevelPathIds(item.getTargetLevelPathIds()); + budgetLog.setTargetLevelPathNames(item.getTargetLevelPathNames()); + return budgetLog; + } +} diff --git a/src/main/java/com/demo/cost/SyncVerificationMain.java b/src/main/java/com/demo/cost/SyncVerificationMain.java index 14577c7..e522382 100644 --- a/src/main/java/com/demo/cost/SyncVerificationMain.java +++ b/src/main/java/com/demo/cost/SyncVerificationMain.java @@ -132,7 +132,7 @@ public class SyncVerificationMain { Integer count = 1; while (count > 0) { - String sql_cost_list = "select * from tbs_cost_apply where xlt_sync = 2 and budget_sync = 1 and vtb_sync !=2 order by id limit 300"; + String sql_cost_list = "select * from tbs_cost_apply where xlt_sync = 2 and del_flag != 1 and budget_sync = 1 and vtb_sync !=2 order by id limit 300"; List costList = jslDbContext.sql(sql_cost_list).getList(JslTbsCostApply.class); if (costList.size() > 0) { try{ @@ -329,7 +329,7 @@ public class SyncVerificationMain { // 释放金额 if (isNotAllow || applyRealse) { // 不再支付返回预算到预算池 - BigDecimal totalReleaseAmt = totalApplyAmt.subtract(totalPassAmt); + BigDecimal totalReleaseAmt = tbsActivity.getTotalAmount().subtract(totalPassAmt); if (totalReleaseAmt.compareTo(BigDecimal.ZERO) > 0) { updAct.setActivityState(4); updAct.setReleaseFlag(1); @@ -339,6 +339,11 @@ public class SyncVerificationMain { updAct.setReleaseTime(checkCostItemList.get(0).getExedate()); updAct.setReleaseAmount(totalReleaseAmt); this.doNotAllowCost(currCostItem, totalReleaseAmt, jslDbContext, costApply, tbsActivity, totalApplyAmt); + }else{ + updAct.setActivityState(3); + updAct.setReleaseFlag(0); + updAct.setFinishedFlag(1); + updAct.setReleaseAmount(BigDecimal.ZERO); } } updAct.setUsedAmount(totalPassAmt); @@ -394,10 +399,7 @@ public class SyncVerificationMain { fundFlow.setSupplierCode(tbsActivity.getSupplierCode()); fundFlow.setSupplierName(tbsActivity.getSupplierName()); - batchVtbFlowList.add(fundFlow); - -// jslDbContext.table(vtb_fund_flow).setEntity(fundFlow).insert(); - + jslDbContext.table(vtb_fund_flow).setEntity(fundFlow).insert(); String sql_budget_by_ids = "select * from tbs_budget where id = " + currCostItem.getBudgetId(); JslTbsBudget currentBudget = jslDbContext.sql(sql_budget_by_ids).getItem(JslTbsBudget.class); @@ -409,7 +411,6 @@ public class SyncVerificationMain { JslTbsBudgetLog budgetLog = this.buildTbsBudgetLog(4, jslUser, costApply, currCostItem, currentBudget, totalReleaseAmt, tbsActivity); budgetLog.setTenantId("001"); -// jslDbContext.table(tbs_budget_log).setEntity(budgetLog).insert(); if(budgetLog.getActivityTheme().length()>=150){ budgetLog.setActivityTheme(budgetLog.getActivityTheme().substring(0,149)); @@ -418,8 +419,8 @@ public class SyncVerificationMain { budgetLog.setCostApplyTheme(budgetLog.getCostApplyTheme().substring(0,149)); } + jslDbContext.table(tbs_budget_log).setEntity(budgetLog).insert(); - batchBudgetLogList.add(budgetLog); } /** @@ -511,18 +512,13 @@ public class SyncVerificationMain { verification.setUserId("0"); verification.setUserCode("0"); verification.setUserName("数据导入"); - vtbId++; - verification.setId(vtbId); - - Long varifId = vtbId; -// jslDbContext.table(vtb_verification).setEntity(verification).insert(); - batchVtbVerificationList.add(verification); + jslDbContext.table(vtb_verification).setEntity(verification).insert(); //流水记录 JslVtbFundFlow fundFlow = new JslVtbFundFlow(); fundFlow.setFundType("verification"); - fundFlow.setVerificationId(varifId); + fundFlow.setVerificationId(verification.getId()); fundFlow.setCenterGoodsCode(tbsActivity.getActivityCode() + "_00"); fundFlow.setCostApplyId(tbsActivity.getCostApplyId()); fundFlow.setActivityId(tbsActivity.getId()); @@ -552,12 +548,12 @@ public class SyncVerificationMain { fundFlow.setSupplierId(tbsActivity.getSupplierId()); fundFlow.setSupplierCode(tbsActivity.getSupplierCode()); fundFlow.setSupplierName(tbsActivity.getSupplierName()); -// jslDbContext.table(vtb_fund_flow).setEntity(fundFlow).insert(); - batchVtbFlowList.add(fundFlow); + jslDbContext.table(vtb_fund_flow).setEntity(fundFlow).insert(); +// batchVtbFlowList.add(fundFlow); VtbVerificationSubject verificationSubject = new VtbVerificationSubject(); - verificationSubject.setVerificationId(varifId); + verificationSubject.setVerificationId(verification.getId()); verificationSubject.setVerificationSubCode(checkCostItem.getListNumber()); verificationSubject.setCostApplyId(tbsActivity.getCostApplyId()); verificationSubject.setActivityId(tbsActivity.getId()); @@ -573,13 +569,7 @@ public class SyncVerificationMain { verificationSubject.setCountPerson(0); verificationSubject.setCountSession(0); verificationSubject.setTenantId("001"); - vtbSubId++; - verificationSubject.setId(vtbSubId); - batchVtbVerificationSubjectList.add(verificationSubject); -// 104565 - - Long varifSubjectId = vtbSubId; -// jslDbContext.table(vtb_verification_subject).setEntity(verificationSubject).insert(); + jslDbContext.table(vtb_verification_subject).setEntity(verificationSubject).insert(); // PayPayment payPayment = new PayPayment(); // payPayment.setPayCode(checkCostItem.getMainNumber()); diff --git a/src/main/java/com/demo/cost/TbsMapper.java b/src/main/java/com/demo/cost/TbsMapper.java index 72bed44..002d4c7 100644 --- a/src/main/java/com/demo/cost/TbsMapper.java +++ b/src/main/java/com/demo/cost/TbsMapper.java @@ -12,6 +12,8 @@ public class TbsMapper { private static DbContext jslCtx; private static DbContext xltCtx; + private static DbContext jsl11Ctx; + private static DbContext jslerpCtx; public static DbContext getJslDbContext() { if (jslCtx == null) { @@ -32,7 +34,7 @@ public class TbsMapper { if (xltCtx == null) { Properties properties = new Properties(); properties.setProperty("schema", "xlt"); - properties.setProperty("url", "jdbc:sqlserver://rm-wz93l107hc277n9ieco.sqlserver.rds.aliyuncs.com:3433;DatabaseName=xiaolutong"); + properties.setProperty("url", "jdbc:sqlserver://rm-wz93l107hc277n9ieco.sqlserver.rds.aliyuncs.com:3433;DatabaseName=mindb"); properties.setProperty("username", "qs_db_user"); properties.setProperty("password", "Aa135246"); properties.setProperty("driverClassName", "com.microsoft.sqlserver.jdbc.SQLServerDriver"); @@ -41,4 +43,29 @@ public class TbsMapper { return xltCtx; } + public static DbContext getjsl11Context() { + if (jsl11Ctx == null) { + Properties properties = new Properties(); + properties.setProperty("schema", "sql11"); + properties.setProperty("url", "jdbc:sqlserver://192.168.10.11;DatabaseName=JSL_COST_QS"); + properties.setProperty("username", "sa"); + properties.setProperty("password", "JSL2282125"); + properties.setProperty("driverClassName", "com.microsoft.sqlserver.jdbc.SQLServerDriver"); + jsl11Ctx = new DbContext(properties); + } + return jsl11Ctx; + } + + public static DbContext getjslErpZYDContext() { + if (jslerpCtx == null) { + Properties properties = new Properties(); + properties.setProperty("schema", "sql11"); + properties.setProperty("url", "jdbc:sqlserver://192.168.10.11;DatabaseName=ZYD_ERP_OTHERS"); + properties.setProperty("username", "sa"); + properties.setProperty("password", "JSL2282125"); + properties.setProperty("driverClassName", "com.microsoft.sqlserver.jdbc.SQLServerDriver"); + jslerpCtx = new DbContext(properties); + } + return jslerpCtx; + } } diff --git a/src/main/java/com/demo/cost/TbsPay2ServiceImpl.java b/src/main/java/com/demo/cost/TbsPay2ServiceImpl.java new file mode 100644 index 0000000..3590b1b --- /dev/null +++ b/src/main/java/com/demo/cost/TbsPay2ServiceImpl.java @@ -0,0 +1,248 @@ +package com.demo.cost; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.text.UnicodeUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.demo.cost.entity.JslCmsPay; +import com.demo.cost.entity.JslErpPayZYD; +import com.demo.cost.entity.PayPayment; +import com.demo.cost.entity.PayPaymentBo; +import com.demo.jsl.entity.costapply.JslCostApply; +import com.demo.jsl.entity.verifi.VtbVerification; +import com.demo.util.CollectionUtil; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.noear.wood.DbContext; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +public class TbsPay2ServiceImpl { + + String sql_cms_vtb = "select * from vtb_verification where del_flag !=1 and cost_apply_id in "; + String sql_erp_pay = "SELECT * FROM XLT_BI_HxDbf WHERE Year(cCrTime)=? and Month(cCrTime)=? "; + String sql_cms_pay = "select * from pay_payment_item where del_flag !=1 and erp_id in "; + String sql_cms_verId_pay = "select * from pay_payment_item where del_flag !=1 and verification_id = ? "; + String sql_cms_verId_payAmount = "select sum(item_pay_amount) as amount from pay_payment_item where del_flag !=1 and verification_id = ? "; + String sql_cms_user = "select account from sys_user where name = ?"; + String sql_cms_update_pay = "update pay_payment set user_id=0,user_code=?,user_name = ? where id = ?"; + String sql_cms_amountError = "select p.* from pay_payment_item p left join vtb_verification v on v.id = p.verification_id where v.id is not null and p.cost_apply_id is not null and v.amount < p.item_pay_amount and v.cost_apply_id in "; + String sql_cms_vtb_by_main_code = "select * from vtb_verification where del_flag !=1 and verification_main_code =? "; + String sql_cms_vtb_by_code = "select * from vtb_verification where del_flag !=1 and verification_code =? "; + String sql_delete_pay = "delete from pay_payment_item where verification_main_code in "; + String sql_delete_pay_erp_ids = "delete from pay_payment where erp_id in "; + String sql_select_pay_erp_id = "select * from pay_payment where erp_id = ? "; + String sql_select_pay_item = "SELECT * from pay_payment_item where verification_main_code in "; + String sql_erp_pay_cyCode = "SELECT * FROM XLT_BI_HxDbf WHERE cFyCode in "; + + @SneakyThrows + public void comparePay(){ + DbContext jsl11Context = TbsMapper.getjsl11Context(); + DbContext jslErpContext = TbsMapper.getjslErpZYDContext(); + DbContext jslContext = TbsMapper.getJslDbContext(); + DbContext xltContext = TbsMapper.getXltDbContext(); + + for(int month = 1;month<=12;month++) { + List erpPayList = jslErpContext.sql(sql_erp_pay,"2023",month).getList(JslErpPayZYD.class); + + List erpIdList = erpPayList.stream().map(a->a.getCAcc()+"_"+a.getIIndex()+"_"+a.getCFyCode()).distinct().collect(Collectors.toList()); + + String tempErpIdString = "(" + erpIdList.stream().map(a -> "'" + a + "'").collect(Collectors.joining(",")) + ")"; + List cmsPayList = jslContext.sql(sql_cms_pay + tempErpIdString).getList(JslCmsPay.class); + Map> jslCmsPayMap = cmsPayList.stream().collect(Collectors.groupingBy(JslCmsPay::getErpId)); + + List jslCmsPayAmountReduceList = jslCmsPayMap.keySet().stream().map(a-> { + BigDecimal amount = jslCmsPayMap.get(a).stream().map(b -> b.getItemPayAmount()).reduce(BigDecimal.ZERO, BigDecimal::add); + JslCmsPay tempPay = new JslCmsPay(); + tempPay.setErpId(a); + tempPay.setItemPayAmount(amount); + tempPay.setRemark(a +"_" + amount.toString()); + return tempPay; + } + ).collect(Collectors.toList()); + + Map> jslErpPayMap = erpPayList.stream().map(a->{ + a.setErpId(a.getCAcc()+"_"+a.getIIndex()+"_"+a.getCFyCode()); + return a; + }).collect(Collectors.groupingBy(JslErpPayZYD::getErpId)); + List erpPayListAmountReduceList = jslErpPayMap.keySet().stream().map(a-> { + BigDecimal amount = jslErpPayMap.get(a).stream().map(b -> b.getNHxJe()).reduce(BigDecimal.ZERO, BigDecimal::add); + JslCmsPay tempPay = new JslCmsPay(); + tempPay.setErpId(a); + tempPay.setItemPayAmount(amount); + tempPay.setRemark(a + "_" + amount.toString()); + return tempPay; + } + ).collect(Collectors.toList()); + List erpIdAmountList = erpPayListAmountReduceList.stream().map(a->a.getRemark()).distinct().collect(Collectors.toList()); + List cmsErpIdAmountList = jslCmsPayAmountReduceList.stream().map(a->a.getRemark()).distinct().collect(Collectors.toList()); + + List onlyCmsPayCode = cmsErpIdAmountList.stream().filter(a->!erpIdAmountList.contains(a)).collect(Collectors.toList()); + List onlyErpPayCode = erpIdAmountList.stream().filter(a->!cmsErpIdAmountList.contains(a)).collect(Collectors.toList()); + + log.info(month + "月 CMS Only支付数:"+onlyCmsPayCode.size()); + log.info(month + "月 ERP Only支付数:"+onlyErpPayCode.size()); + log.info("-------------------"); + + List erpMainCodes = erpPayListAmountReduceList.stream().filter(a->onlyErpPayCode.contains(a.getRemark())).map(a->a.getErpId()).collect(Collectors.toList()); + List cmsMainCodes = jslCmsPayAmountReduceList.stream().filter(a->onlyCmsPayCode.contains(a.getRemark())).map(a->a.getErpId()).collect(Collectors.toList()); + List erpDeleteMainCodes = erpPayList.stream().filter(a->erpMainCodes.contains(a.getCAcc()+"_"+a.getIIndex()+"_"+a.getCFyCode())).map(a->{ + if(a.getCFyCode().contains("_")){ + return a.getCFyCode().substring(0,a.getCFyCode().indexOf("_")); + }else{ + return a.getCFyCode(); + } + }).collect(Collectors.toList()); + + List cmsDeleteMainCodes = cmsPayList.stream().filter(a->cmsMainCodes.contains(a.getErpId())).map(a->a.getVerificationMainCode()).collect(Collectors.toList()); + List deleteMainCodes = new ArrayList<>(); + deleteMainCodes.addAll(erpDeleteMainCodes); + deleteMainCodes.addAll(cmsDeleteMainCodes); + deleteMainCodes = deleteMainCodes.stream().distinct().collect(Collectors.toList()); + log.info("-------------------"); + String deleteMainCodesString = "(" + deleteMainCodes.stream().map(a -> "'" + a + "'").collect(Collectors.joining(",")) + ")"; + +// if(deleteMainCodes.size()>0) { +// List delPayItemList = jslContext.sql(sql_select_pay_item + deleteMainCodesString).getList(JslCmsPay.class); +// List deleteErpIds = delPayItemList.stream().map(a -> a.getErpId()).distinct().collect(Collectors.toList()); +// log.info(month + "月 清除支付数:" + deleteErpIds.size()); +// String deleteErpIdsString = "(" + deleteErpIds.stream().map(a -> "'" + a + "'").collect(Collectors.joining(",")) + ")"; +// +// if(deleteErpIds.size()>0) { +// jslContext.sql(sql_delete_pay_erp_ids + deleteErpIdsString).execute(); +// } +// jslContext.sql(sql_delete_pay + deleteMainCodesString).execute(); +// +// } + List erpFyCodes = erpPayList.stream().filter(a->erpMainCodes.contains(a.getCAcc()+"_"+a.getIIndex()+"_"+a.getCFyCode())).map(a->a.getCFyCode()).collect(Collectors.toList()); + + String erpFyCodesString = "(" + erpFyCodes.stream().map(a -> "'" + a + "'").collect(Collectors.joining(",")) + ")"; + + if(erpFyCodes.size()==0){ + continue; + } + List onlyErpPayList = jslErpContext.sql(sql_erp_pay_cyCode + erpFyCodesString).getList(JslErpPayZYD.class); + if(onlyErpPayList.size()>0) { + for(JslErpPayZYD item : onlyErpPayList) { + BigDecimal payAmount = item.getNHxJe(); + if(payAmount.compareTo(BigDecimal.ZERO)<=0){ + log.info("支付金额小于或等于0:"+item.getCAcc()+"_"+item.getIIndex()+"_"+item.getCFyCode()); + continue; + } + String verificationCode = item.getCFyCode(); + if(verificationCode.contains("BI")){ + continue; + } + + if(jslContext.sql(sql_select_pay_erp_id,item.getCAcc()+"_"+item.getIIndex()+"_"+item.getCFyCode()).getList(PayPayment.class).size()>0){ + log.info("已存在支付:"+item.getCAcc()+"_"+item.getIIndex()+"_"+item.getCFyCode()); + continue; + } + + log.info(verificationCode); + + List verificationList = jslContext.sql(sql_cms_vtb_by_code,verificationCode).getList(VtbVerification.class); + + if(verificationList.size()==0) { + String verificationMainCode = verificationCode; + if(verificationCode.contains("_")) { + verificationMainCode = verificationCode.substring(0, verificationCode.indexOf("_")); + } + verificationList = jslContext.sql(sql_cms_vtb_by_main_code,verificationMainCode).getList(VtbVerification.class); + if(verificationList.size()==0){ + log.info("没有找到核销:"+ item.getCFyCode()); + continue; + } + } + + List newPayList = new ArrayList<>(); + + PayPayment payPayment = new PayPayment(); + payPayment.setPayType("pay"); + payPayment.setPayCode(item.getCAcc()+"_"+item.getIIndex()+"_"+item.getCFyCode()); + payPayment.setErpId(payPayment.getPayCode()); + payPayment.setPayAmount(item.getNHxJe()); + payPayment.setUserId("0"); + String itemUser = item.getCCrUser(); + if(itemUser.contains("-")){ + String[] itemUsers = itemUser.split("-"); + String userCode = itemUsers[0].trim(); + String userName = itemUsers[1].trim(); + payPayment.setUserCode(userCode); + payPayment.setUserName(userName); + } + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime payTime = LocalDateTime.parse(item.getCCrTime().trim(),formatter); + payPayment.setPayTime(payTime); + payPayment.setPayDate(payTime); + payPayment.setBillNumber(item.getCSBVCode()); + payPayment.setRemark(item.getCMemo()); + payPayment.setTenantId("001"); + + for(VtbVerification vtb:verificationList){ + if(payAmount.compareTo(BigDecimal.ZERO)<=0){ + continue; + } +// List payList = jslContext.sql(sql_cms_verId_pay, vtb.getId()).getList(JslCmsPay.class); +// BigDecimal usedAmount = payList.stream().map(a -> a.getItemPayAmount()).reduce(BigDecimal.ZERO, BigDecimal::add); + List vtbAmountList = jslContext.sql(sql_cms_verId_payAmount, vtb.getId()).getArray("amount"); + BigDecimal usedAmount = vtbAmountList.get(0); + if(usedAmount==null){ + usedAmount = BigDecimal.ZERO; + } + if(vtb.getAmount().compareTo(usedAmount)>0) { + JslCmsPay newPayItem = new JslCmsPay(); + BeanUtil.copyProperties(payPayment, newPayItem); + newPayItem.setId(null); + newPayItem.setCostApplyId(vtb.getCostApplyId()); + newPayItem.setSupplierId(vtb.getSupplierId()); + newPayItem.setVerificationId(vtb.getId()); + newPayItem.setVerificationSubjectId(null); + newPayItem.setVerificationCode(vtb.getVerificationCode()); + if (item.getCFyCode().contains("_")) { + String mainCode = item.getCFyCode().substring(0, item.getCFyCode().indexOf("_")); + newPayItem.setVerificationMainCode(mainCode); + }else{ + newPayItem.setVerificationMainCode(item.getCFyCode()); + } + BigDecimal vtbAmountUnused = vtb.getAmount().subtract(usedAmount); + if(payAmount.compareTo(vtbAmountUnused)>0){ + newPayItem.setItemPayAmount(vtbAmountUnused); + }else{ + newPayItem.setItemPayAmount(payAmount); + } +// jslContext.table("pay_payment_item").setEntity(newPayItem).insert(); + + payAmount = payAmount.subtract(newPayItem.getItemPayAmount()); + newPayList.add(newPayItem); + payPayment.setSupplierId(vtb.getSupplierId()); + payPayment.setSupplierCode(vtb.getSupplierCode()==null?"":vtb.getSupplierCode()); + payPayment.setSupplierName(vtb.getSupplierName()==null?"":vtb.getSupplierName()); + } + } + + Long payId = jslContext.table("pay_payment").setEntity(payPayment).insert(); + newPayList = newPayList.stream().map(a->{ + a.setPaymentId(payId); + return a; + }).collect(Collectors.toList()); + + for(JslCmsPay payItem : newPayList){ + jslContext.table("pay_payment_item").setEntity(payItem).insert(); + } + } + } + } + } +} diff --git a/src/main/java/com/demo/cost/TbsPay3ServiceImpl.java b/src/main/java/com/demo/cost/TbsPay3ServiceImpl.java new file mode 100644 index 0000000..2bd8b41 --- /dev/null +++ b/src/main/java/com/demo/cost/TbsPay3ServiceImpl.java @@ -0,0 +1,177 @@ +package com.demo.cost; + +import cn.hutool.core.bean.BeanUtil; +import com.demo.cost.entity.JslCmsPay; +import com.demo.cost.entity.JslErpPayZYD; +import com.demo.cost.entity.PayPayment; +import com.demo.jsl.entity.verifi.VtbVerification; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.noear.wood.DbContext; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +public class TbsPay3ServiceImpl { + + String sql_cms_vtb = "select * from vtb_verification where del_flag !=1 and cost_apply_id in "; + String sql_erp_pay = "SELECT * FROM XLT_BI_HxDbf WHERE Year(cCrTime)=? and Month(cCrTime)=? and cFyCode like 'BI%'"; + String sql_cms_pay = "select * from pay_payment_item where del_flag !=1 and erp_id in "; + String sql_cms_verId_pay = "select * from pay_payment_item where del_flag !=1 and verification_id = ? "; + String sql_cms_verId_payAmount = "select sum(item_pay_amount) as amount from pay_payment_item where del_flag !=1 and verification_id = ? "; + String sql_cms_user = "select account from sys_user where name = ?"; + String sql_cms_update_pay = "update pay_payment set user_id=0,user_code=?,user_name = ? where id = ?"; + String sql_cms_amountError = "select p.* from pay_payment_item p left join vtb_verification v on v.id = p.verification_id where v.id is not null and p.cost_apply_id is not null and v.amount < p.item_pay_amount and v.cost_apply_id in "; + String sql_cms_vtb_by_main_code = "select * from vtb_verification where del_flag !=1 and verification_main_code =? "; + String sql_cms_vtb_by_code = "select * from vtb_verification where del_flag !=1 and verification_code =? "; + String sql_delete_pay = "delete from pay_payment_item where erp_id in "; + String sql_delete_pay_erp_ids = "delete from pay_payment where erp_id in "; + String sql_select_pay_erp_id = "select * from pay_payment where erp_id = ? "; + String sql_select_pay_item = "SELECT * from pay_payment_item where verification_main_code in "; + String sql_erp_pay_cyCode = "SELECT * FROM XLT_BI_HxDbf WHERE cFyCode in "; + String sql_xlt_vtb_code = "SELECT c.costCode FROM aptifee a left join vw_costCode c on a.deleteId=c.deleteId WHERE c.costCode is not null and a.aptifee_erpHao = ?"; + + @SneakyThrows + public void comparePay(){ + DbContext jsl11Context = TbsMapper.getjsl11Context(); + DbContext jslErpContext = TbsMapper.getjslErpZYDContext(); + DbContext jslContext = TbsMapper.getJslDbContext(); + DbContext xltContext = TbsMapper.getXltDbContext(); + + for(int month = 1;month<=12;month++) { + List erpPayList = jslErpContext.sql(sql_erp_pay,"2021",month).getList(JslErpPayZYD.class); + + List erpIdList = erpPayList.stream().map(a->a.getCAcc()+"_"+a.getIIndex()+"_"+a.getCFyCode()).distinct().collect(Collectors.toList()); + + log.info(month + "月 BI数据:" +erpIdList.size()); + +// if(erpIdList.size()>0) { +// String tempErpIdString = "(" + erpIdList.stream().map(a -> "'" + a + "'").collect(Collectors.joining(",")) + ")"; +// jslContext.sql(sql_delete_pay_erp_ids + tempErpIdString).execute(); +// jslContext.sql(sql_delete_pay + tempErpIdString).execute(); +// } + + if(erpPayList.size()>0) { + for(JslErpPayZYD item : erpPayList) { + BigDecimal payAmount = item.getNHxJe(); + if(payAmount.compareTo(BigDecimal.ZERO)<=0){ + log.info("支付金额小于或等于0:"+item.getCAcc()+"_"+item.getIIndex()+"_"+item.getCFyCode()); + continue; + } + List vtbCodes = xltContext.sql(sql_xlt_vtb_code,item.getCFyCode()).getArray("costCode"); + if(vtbCodes.size()==0){ + log.info("没有找到XLT核销:"+ item.getCFyCode()); + continue; + } + String verificationCode = vtbCodes.get(0); + if(verificationCode == null){ + log.info("没有找到XLT核销:"+ item.getCFyCode()); + continue; + } + if(jslContext.sql(sql_select_pay_erp_id,item.getCAcc()+"_"+item.getIIndex()+"_"+item.getCFyCode()).getList(PayPayment.class).size()>0){ + log.info("已存在支付:"+item.getCAcc()+"_"+item.getIIndex()+"_"+item.getCFyCode()); + continue; + } + + log.info(verificationCode); + + List verificationList = jslContext.sql(sql_cms_vtb_by_code,verificationCode).getList(VtbVerification.class); + + if(verificationList.size()==0) { + String verificationMainCode = verificationCode; + if(verificationCode.contains("_")) { + verificationMainCode = verificationCode.substring(0, verificationCode.indexOf("_")); + } + verificationList = jslContext.sql(sql_cms_vtb_by_main_code,verificationMainCode).getList(VtbVerification.class); + if(verificationList.size()==0){ + log.info("没有找到核销:"+ item.getCFyCode()); + continue; + } + } + + List newPayList = new ArrayList<>(); + + PayPayment payPayment = new PayPayment(); + payPayment.setPayType("pay"); + payPayment.setPayCode(item.getCAcc()+"_"+item.getIIndex()+"_"+item.getCFyCode()); + payPayment.setErpId(payPayment.getPayCode()); + payPayment.setPayAmount(item.getNHxJe()); + payPayment.setUserId("0"); + String itemUser = item.getCCrUser(); + if(itemUser.contains("-")){ + String[] itemUsers = itemUser.split("-"); + String userCode = itemUsers[0].trim(); + String userName = itemUsers[1].trim(); + payPayment.setUserCode(userCode); + payPayment.setUserName(userName); + } + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime payTime = LocalDateTime.parse(item.getCCrTime().trim(),formatter); + payPayment.setPayTime(payTime); + payPayment.setPayDate(payTime); + payPayment.setBillNumber(item.getCSBVCode()); + payPayment.setRemark(item.getCMemo()); + payPayment.setTenantId("001"); + + for(VtbVerification vtb:verificationList){ + if(payAmount.compareTo(BigDecimal.ZERO)<=0){ + continue; + } +// List payList = jslContext.sql(sql_cms_verId_pay, vtb.getId()).getList(JslCmsPay.class); +// BigDecimal usedAmount = payList.stream().map(a -> a.getItemPayAmount()).reduce(BigDecimal.ZERO, BigDecimal::add); + List vtbAmountList = jslContext.sql(sql_cms_verId_payAmount, vtb.getId()).getArray("amount"); + BigDecimal usedAmount = vtbAmountList.get(0); + if(usedAmount==null){ + usedAmount = BigDecimal.ZERO; + } + if(vtb.getAmount().compareTo(usedAmount)>0) { + JslCmsPay newPayItem = new JslCmsPay(); + BeanUtil.copyProperties(payPayment, newPayItem); + newPayItem.setId(null); + newPayItem.setCostApplyId(vtb.getCostApplyId()); + newPayItem.setSupplierId(vtb.getSupplierId()); + newPayItem.setVerificationId(vtb.getId()); + newPayItem.setVerificationSubjectId(null); + newPayItem.setVerificationCode(vtb.getVerificationCode()); + if (item.getCFyCode().contains("_")) { + String mainCode = item.getCFyCode().substring(0, item.getCFyCode().indexOf("_")); + newPayItem.setVerificationMainCode(mainCode); + }else{ + newPayItem.setVerificationMainCode(item.getCFyCode()); + } + BigDecimal vtbAmountUnused = vtb.getAmount().subtract(usedAmount); + if(payAmount.compareTo(vtbAmountUnused)>0){ + newPayItem.setItemPayAmount(vtbAmountUnused); + }else{ + newPayItem.setItemPayAmount(payAmount); + } +// jslContext.table("pay_payment_item").setEntity(newPayItem).insert(); + + payAmount = payAmount.subtract(newPayItem.getItemPayAmount()); + newPayList.add(newPayItem); + payPayment.setSupplierId(vtb.getSupplierId()); + payPayment.setSupplierCode(vtb.getSupplierCode()==null?"":vtb.getSupplierCode()); + payPayment.setSupplierName(vtb.getSupplierName()==null?"":vtb.getSupplierName()); + } + } + + Long payId = jslContext.table("pay_payment").setEntity(payPayment).insert(); + newPayList = newPayList.stream().map(a->{ + a.setPaymentId(payId); + return a; + }).collect(Collectors.toList()); + + for(JslCmsPay payItem : newPayList){ + jslContext.table("pay_payment_item").setEntity(payItem).insert(); + } + } + } + } + } +} diff --git a/src/main/java/com/demo/cost/TbsPayServiceImpl.java b/src/main/java/com/demo/cost/TbsPayServiceImpl.java new file mode 100644 index 0000000..e4f4ac4 --- /dev/null +++ b/src/main/java/com/demo/cost/TbsPayServiceImpl.java @@ -0,0 +1,194 @@ +package com.demo.cost; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.text.UnicodeUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.demo.cost.entity.JslCmsPay; +import com.demo.cost.entity.JslErpPayZYD; +import com.demo.cost.entity.PayPaymentBo; +import com.demo.jsl.entity.costapply.JslCostApply; +import com.demo.jsl.entity.verifi.VtbVerification; +import com.demo.util.CollectionUtil; +import com.demo.util.DateUtil; +import com.sun.corba.se.spi.copyobject.ObjectCopier; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.noear.wood.DbContext; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +@Slf4j +public class TbsPayServiceImpl { + + String sql_cms_vtb = "select * from vtb_verification where del_flag !=1 and cost_apply_id in "; + String sql_erp_pay = "SELECT * FROM XLT_BI_HxDbf WHERE cFyCode in "; + String sql_cms_pay = "select * from pay_payment_item where del_flag !=1 and (verification_code in "; + String sql_cms_verId_pay = "select * from pay_payment_item where del_flag !=1 and verification_id = ? "; + String sql_cms_user = "select account from sys_user where name = ?"; + String sql_cms_update_pay = "update pay_payment set user_id=0,user_code=?,user_name = ? where id = ?"; + String sql_cms_amountError = "select p.* from pay_payment_item p left join vtb_verification v on v.id = p.verification_id where v.id is not null and p.cost_apply_id is not null and v.amount < p.item_pay_amount and v.cost_apply_id in "; + String sql_cms_vtb_by_code = "select * from vtb_verification where del_flag !=1 and verification_main_code =? "; + String sql_delete_pay = "delete from pay_payment_item where id = ?"; + + @SneakyThrows + public void comparePay(){ + DbContext jsl11Context = TbsMapper.getjsl11Context(); + DbContext jslErpContext = TbsMapper.getjslErpZYDContext(); + DbContext jslContext = TbsMapper.getJslDbContext(); + DbContext xltContext = TbsMapper.getXltDbContext(); + + for(int month = 12;month<=12;month++) { + String sql = "SELECT * FROM `tbs_cost_apply` WHERE `xlt_sync` is not null AND `del_flag` = '0' and year(submit_time) = 2022 and month(submit_time)= " + month; + List costApplyList = jslContext.sql(sql).getList(JslCostApply.class); + if (costApplyList.size() == 0) { + continue; + } + + String costApplyIdsString = "(" + costApplyList.stream().map(a -> "'" + a.getId().toString() + "'").collect(Collectors.joining(",")) + ")"; + List vtbList = jslContext.sql(sql_cms_vtb+costApplyIdsString).getList(VtbVerification.class); + log.info(month + "月 CMS核销数:"+vtbList.size()); + + List cmsVtbCode = vtbList.stream().map(a->a.getVerificationMainCode()).collect(Collectors.toList()); + String cmsVtbCodeString = "(" + cmsVtbCode.stream().map(a -> "'" + a + "'").collect(Collectors.joining(",")) + ")"; + List erpPayList = new ArrayList<>(); + + List cmsVtbMainCode = vtbList.stream().map(a->a.getVerificationCode()).collect(Collectors.toList()); + List cmsVtbAllCode = new ArrayList<>(); + cmsVtbAllCode.addAll(cmsVtbCode); + cmsVtbAllCode.addAll(cmsVtbMainCode); + cmsVtbAllCode = cmsVtbAllCode.stream().distinct().collect(Collectors.toList()); + + List> tempVtbCodes = CollectionUtil.createList(cmsVtbAllCode,10000); + for(List temp:tempVtbCodes){ + String tempVtbCodeString = "(" + temp.stream().map(a -> "'" + a + "'").collect(Collectors.joining(",")) + ")"; + erpPayList.addAll(jslErpContext.sql(sql_erp_pay + tempVtbCodeString + " or cFyCode in "+ tempVtbCodeString).getList(JslErpPayZYD.class)); + } + + List cmsPayList = jslContext.sql(sql_cms_pay + cmsVtbCodeString + " or verification_main_code in "+cmsVtbCodeString + ")").getList(JslCmsPay.class); + + log.info(month + "月 ERP支付数:"+erpPayList.size()); + log.info(month + "月 CMS支付数:"+cmsPayList.size()); + + List cmsErpIdList = cmsPayList.stream().map(a->a.getErpId()).distinct().collect(Collectors.toList()); + List erpIdList = erpPayList.stream().map(a->a.getCAcc()+"_"+a.getIIndex()+"_"+a.getCFyCode()).distinct().collect(Collectors.toList()); + + log.info(month + "月 ERP支付数:"+erpIdList.size()); + log.info(month + "月 CMS支付数:"+cmsErpIdList.size()); + log.info("-------------------"); + + List onlyCmsPayCode = cmsErpIdList.stream().filter(a->!erpIdList.contains(a)).collect(Collectors.toList()); + List onlyErpPayCode = erpIdList.stream().filter(a->!cmsErpIdList.contains(a)).collect(Collectors.toList()); + + log.info(month + "月 CMS Only支付数:"+onlyCmsPayCode.size()); + log.info(month + "月 ERP Only支付数:"+onlyErpPayCode.size()); + log.info("-------------------"); + + + + + List onlyErpPayList = erpPayList.stream().filter(a->onlyErpPayCode.contains(a.getCAcc()+"_"+a.getIIndex()+"_"+a.getCFyCode())).collect(Collectors.toList()); + List onlyCmsPayList = cmsPayList.stream().filter(a->onlyCmsPayCode.contains(a.getErpId())).collect(Collectors.toList()); + + if(onlyErpPayList.size()>0){ + for(JslErpPayZYD item:onlyErpPayList) { + PayPaymentBo bo = new PayPaymentBo(); + bo.setVerificationSubCode(item.getCFyCode()); + bo.setPayAmount(item.getNHxJe()); + String erpId = item.getCAcc()+"_"+item.getIIndex()+"_"+item.getCFyCode(); + bo.setErpId(erpId); + bo.setBillNumber(item.getCSBVCode()); + bo.setRemark(item.getCMemo()); + bo.setPayDate(LocalDateTimeUtil.of(item.getDDate())); + bo.setPayTime(LocalDateTimeUtil.of(item.getDDate())); + + bo.setUserCode("sysuser"); + bo.setPayType("pay"); + + String url = "https://crm.gdjsl.com/qsapi/pay/payment/save"; + + HttpRequest request = HttpUtil.createPost(url); + request.header("Authorization", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJVSUQiOiJTVTc3ODgzNDg1NTQ0NTEzNTM2IiwiaXNzIjoiS1BfSVNTIiwiZXhwIjoxNjk4Mjg5NDIxLCJpYXQiOjE2OTc2ODQ2MjEsIlRZUEUiOiIwMSIsIkNMSUVOVCI6InBjIn0.E9-Ir07KqrjSu5ntWmkjLVDn_5K_Vt1yCYVfwJ9_BEY"); + request.header("Tenant-Id","001"); + + JSONObject object = new JSONObject(bo); + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String payTime = formatter.format(bo.getPayTime()); + object.set("payTime",payTime); + + object.set("payDate",payTime); + + String jsonString = object.toJSONString(0); + request.body(jsonString); + + HttpResponse execute = request.execute(); + if (!execute.isOk()) { + log.error("请求token失败,body={},execute={}", execute.body(), execute); + throw new RuntimeException(execute.body()); + } + String res = UnicodeUtil.toString(execute.body()); + JSONObject jsonObject = JSONUtil.parseObj(res, true); + if(jsonObject.get("status").equals(200)){ + Long payid = jsonObject.getJSONObject("data").getLong("id"); + String itemUser = item.getCCrUser(); + if(itemUser.contains("-")){ + String[] itemUsers = itemUser.split("-"); + String userCode = itemUsers[0].trim(); + String userName = itemUsers[1].trim(); + jslContext.sql(sql_cms_update_pay,userCode,userName,payid).update(); + } + }else{ + log.info(res); + } + } + } +// + List cmsPayListError = jslContext.sql(sql_cms_amountError+costApplyIdsString).getList(JslCmsPay.class); + log.info(month + "月 CMS Error支付数:"+cmsPayListError.size()); +// + if(cmsPayListError.size()>0){ + for(JslCmsPay item : cmsPayListError){ + List newPayList = new ArrayList<>(); + BigDecimal payAmount = item.getItemPayAmount(); + String verificationMainCode = item.getVerificationMainCode(); + List verificationList = jslContext.sql(sql_cms_vtb_by_code,verificationMainCode).getList(VtbVerification.class); + for(VtbVerification vtb:verificationList){ + if(payAmount.compareTo(BigDecimal.ZERO)<=0){ + continue; + } + List payList = jslContext.sql(sql_cms_verId_pay, vtb.getId()).getList(JslCmsPay.class); + BigDecimal usedAmount = payList.stream().map(a -> a.getItemPayAmount()).reduce(BigDecimal.ZERO, BigDecimal::add); + if(vtb.getId().equals(item.getVerificationId())){ + usedAmount = BigDecimal.ZERO; + } + if(vtb.getAmount().compareTo(usedAmount)>0) { + JslCmsPay newPayItem = new JslCmsPay(); + BeanUtil.copyProperties(item, newPayItem); + newPayItem.setId(null); + newPayItem.setVerificationId(vtb.getId()); + newPayItem.setVerificationSubjectId(null); + newPayItem.setVerificationCode(vtb.getVerificationCode()); + newPayItem.setItemPayAmount(vtb.getAmount().subtract(usedAmount)); + jslContext.table("pay_payment_item").setEntity(newPayItem).insert(); + + payAmount = payAmount.subtract(newPayItem.getItemPayAmount()); +// newPayList.add(newPayItem); + } + } + jslContext.sql(sql_delete_pay,item.getId()).execute(); + } + } + } + } +} diff --git a/src/main/java/com/demo/cost/TbsServiceImpl.java b/src/main/java/com/demo/cost/TbsServiceImpl.java index 4c3f866..ab343b0 100644 --- a/src/main/java/com/demo/cost/TbsServiceImpl.java +++ b/src/main/java/com/demo/cost/TbsServiceImpl.java @@ -241,7 +241,7 @@ public class TbsServiceImpl { JslCostApply costApply = new JslCostApply(); costApply.setCode(xltCost.getCode()); costApply.setChargeTheme(xltCost.getTitle()); - costApply.setSupplierId(supplierId + ""); + costApply.setSupplierId(supplierId); costApply.setSupplierCode(xltCost.getCusCode()); costApply.setSupplierName(xltCost.getCusName()); costApply.setUserId(userId); diff --git a/src/main/java/com/demo/cost/entity/JslCmsPay.java b/src/main/java/com/demo/cost/entity/JslCmsPay.java new file mode 100644 index 0000000..e91ea05 --- /dev/null +++ b/src/main/java/com/demo/cost/entity/JslCmsPay.java @@ -0,0 +1,106 @@ +package com.demo.cost.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * 费用活动 实体类 + * + * @author YenHex + * @since 2022-11-08 + */ +@Data +public class JslCmsPay implements Serializable { + + private Long id; + + /** + * 支付类型 + * pay - 支付 + * unPay - 不再支付 + **/ + private String payType; + + /** 支付id */ + private Long paymentId; + + /** 供应商id */ + private Long supplierId; + + /** 支付金额 */ + private BigDecimal itemPayAmount; + + /** 核销id */ + private Long verificationId; + + private String verificationMainCode; + + private String verificationCode; + + /** 核销科目项id */ + private Long verificationSubjectId; + + /** 费用申请id */ + private Long costApplyId; + + /** 活动id */ + private Long activityId; + + /** 活动编码 */ + private String activityCode; + + /** 政策项id */ + private Long policyItemId; + + /** 政策项编码 */ + private String policyItemCode; + + /** 科目id */ + private Long subjectId; + + /** 科目编码 */ + private String subjectCode; + + private String subjectName; + + /** 备注 */ + private String remark; + + /** 创建时间 */ + private LocalDateTime createTime; + + /** 最后更新时间 */ + private LocalDateTime updateTime; + + private String erpId; + + private String billNumber; + + /** 所属租户 */ + private String tenantId; + + /** 创建人 */ + private String createBy; + + /** 更新人 */ + private String updateBy; + + /** 逻辑删除标记(0:显示;1:隐藏) */ + private String delFlag; + + /** 支付时间 */ + private LocalDateTime payTime; + + /** 支付时间 */ + private LocalDateTime payDate; + + +} + diff --git a/src/main/java/com/demo/cost/entity/JslErpPayZYD.java b/src/main/java/com/demo/cost/entity/JslErpPayZYD.java new file mode 100644 index 0000000..6b6181e --- /dev/null +++ b/src/main/java/com/demo/cost/entity/JslErpPayZYD.java @@ -0,0 +1,72 @@ +package com.demo.cost.entity; + +import lombok.Data; +import org.noear.wood.annotation.Column; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 费用活动 实体类 + * + * @author YenHex + * @since 2022-11-08 + */ +@Data +public class JslErpPayZYD implements Serializable { + + @Column("cAcc") + private String cAcc; + + @Column("cFyCode") + private String cFyCode; + + @Column("iIndex") + private Integer iIndex; + + @Column("dDate") + private Date dDate; + + @Column("cSBVCode") + private String cSBVCode; + + @Column("cDLCode") + private String cDLCode; + + @Column("nHxJe") + private BigDecimal nHxJe; + + @Column("cMemo") + private String cMemo; + + @Column("cCrUser") + private String cCrUser; + + @Column("cCrTime") + private String cCrTime; + + @Column("cChkUser") + private String cChkUser; + + @Column("cChkTime") + private String cChkTime; + + @Column("nFlag") + private Integer nFlag; + + @Column("cSBVCode1") + private String cSBVCode1; + + @Column("nTbXLT") + private Boolean nTbXLT; + + @Column("isCmsSyn") + private Integer isCmsSyn; + + @Column("erpId") + private String erpId; + + +} + diff --git a/src/main/java/com/demo/cost/entity/PayPayment.java b/src/main/java/com/demo/cost/entity/PayPayment.java new file mode 100644 index 0000000..64a0914 --- /dev/null +++ b/src/main/java/com/demo/cost/entity/PayPayment.java @@ -0,0 +1,100 @@ +package com.demo.cost.entity; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 支付 实体类 + * @author YenHex + * @since 2022-12-15 + */ +@Data +public class PayPayment implements Serializable { + + /** id */ + private Long id; + + /** + * 支付类型 + * pay - 支付 + * unPay - 不再支付 + **/ + private String payType; + + /** + * 支付编码 + **/ + private String payCode; + + /** 供应商id */ + private Long supplierId; + + /** 供应商编码 */ + private String supplierCode; + + /** 供应商 */ + private String supplierName; + + /** 支付金额 */ + private BigDecimal payAmount; + + /** 发货单号 */ + private String erpCode; + + /** 发票编号 */ + private String billNumber; + + /** 支付人id */ + private String userId; + + /** 支付人编码 */ + private String userCode; + + /** 支付人 */ + private String userName; + + /** 支付时间 */ + private LocalDateTime payTime; + + + private LocalDateTime payDate; + /** + * 取消标识 + * 不再支付列表:0-冻结;1-解冻 + * 支付列表:0-正常;1-取消 + **/ + private Integer cancelFlag; + + /** 取消时间 */ + private LocalDateTime cancelTime; + + /** 备注 */ + private String remark; + + /** 创建时间 */ + private LocalDateTime createTime; + + /** 最后更新时间 */ + private LocalDateTime updateTime; + + private Long costApplyId; + + private String erpId; + + /** 所属租户 */ + private String tenantId; + + /** 创建人 */ + private String createBy; + + /** 更新人 */ + private String updateBy; + + /** 逻辑删除标记(0:显示;1:隐藏) */ + private String delFlag; + +} + diff --git a/src/main/java/com/demo/cost/entity/PayPaymentBo.java b/src/main/java/com/demo/cost/entity/PayPaymentBo.java new file mode 100644 index 0000000..129e26c --- /dev/null +++ b/src/main/java/com/demo/cost/entity/PayPaymentBo.java @@ -0,0 +1,60 @@ +package com.demo.cost.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 支付 Bo + * @author YenHex + * @since 2022-12-15 + */ +@Data +public class PayPaymentBo implements Serializable { + + /** 核销编码 */ + private String verificationSubCode; + + /** 支付金额 */ +// @DecimalMin(value = "0.01",message = "支付金额必须大于0元") +// @NotNull(message = "支付金额不能为空") + private BigDecimal payAmount; + + /** ERP编码 */ +// @NotNull(message = "ERP编码不能为空") + private String erpId; + + /** 发票编号 */ + private String billNumber; + + /** 备注 */ + private String remark; + + /** 支付时间 */ +// @NotNull(message = "支付时间不能为空") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private LocalDateTime payTime; + + /** 支付日期 */ +// @NotNull(message = "支付日期不能为空") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private LocalDateTime payDate; + + /** 人员工号 */ + private String userCode; + + /** + * 支付类型 + * pay - 支付 + * unPay - 不再支付 + **/ + private String payType; + + + private Integer release; + +} + diff --git a/src/main/java/com/demo/jsl/entity/costapply/JslCostApply.java b/src/main/java/com/demo/jsl/entity/costapply/JslCostApply.java index ac357a5..7332ab0 100644 --- a/src/main/java/com/demo/jsl/entity/costapply/JslCostApply.java +++ b/src/main/java/com/demo/jsl/entity/costapply/JslCostApply.java @@ -33,7 +33,7 @@ public class JslCostApply implements Serializable { /** * 客户id */ - private String supplierId; + private Long supplierId; /** * 客户编码 diff --git a/src/main/java/com/demo/jsl/entity/costapply/XltCostItem.java b/src/main/java/com/demo/jsl/entity/costapply/XltCostItem.java index e90c8db..1722347 100644 --- a/src/main/java/com/demo/jsl/entity/costapply/XltCostItem.java +++ b/src/main/java/com/demo/jsl/entity/costapply/XltCostItem.java @@ -18,6 +18,8 @@ public class XltCostItem { private String costCode; + private Integer state; + private Date reportStartTime; private Date reportEndTime;