commit b9bcf3eda12702a967c1c31d84fc51acead3ffb7 Author: YenHex Date: Mon Jul 3 10:38:04 2023 +0800 init diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..9a97031 --- /dev/null +++ b/pom.xml @@ -0,0 +1,154 @@ + + + 4.0.0 + + org.example + new-db-script + 1.0-SNAPSHOT + + + 8 + 8 + + + + + + com.zaxxer + HikariCP + 4.0.3 + + + + commons-dbutils + commons-dbutils + 1.7 + + + + com.fasterxml.jackson.core + jackson-databind + 2.9.4 + + + com.fasterxml.jackson.core + jackson-annotations + 2.9.4 + + + + + com.thoughtworks.qdox + qdox + 2.0.1 + + + + + + + + + com.idea-aedi + common-spring + 2100.5.6 + + + + cn.hutool + hutool-all + 5.7.16 + + + + org.projectlombok + lombok + 1.18.24 + + + mysql + mysql-connector-java + 8.0.15 + + + com.microsoft.sqlserver + mssql-jdbc + 8.2.2.jre8 + compile + + + + + org.noear + wood + 1.0.7 + + + + org.slf4j + slf4j-api + 1.7.10 + + + ch.qos.logback + logback-classic + 1.1.2 + + + ch.qos.logback + logback-core + 1.1.2 + + + + junit + junit + 4.13.1 + compile + + + + + + app + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + maven-assembly-plugin + + + + + com.demo.Application + + + . + + + + jar-with-dependencies + + + + + make-assembly + package + + single + + + + + + + + diff --git a/src/main/java/com/demo/Application.java b/src/main/java/com/demo/Application.java new file mode 100644 index 0000000..e56f85b --- /dev/null +++ b/src/main/java/com/demo/Application.java @@ -0,0 +1,55 @@ +package com.demo; + +import com.demo.cost.SyncVerificationMain; +import com.demo.cost.TbsServiceImpl; +import com.demo.dto.DaoContext; +import com.demo.t20230616.SyncBudget; +import com.demo.t20230621.BudgetMathMain; +import com.demo.t20230703.SyncMatchActCenter; +import com.demo.util.SetData; +import lombok.extern.slf4j.Slf4j; + +/** + * @author YenHex + * @since 2023/3/22 + */ +@Slf4j +public class Application { + + public static void main(String[] args) { + String ymString = "202306"; + //String ymString = System.getProperty("startId"); + String year = ymString.substring(0,4); + String month = ymString.substring(4,6); + Integer y = Integer.parseInt(year); + Integer m = Integer.parseInt(month); + //费用申请 + TbsServiceImpl service = new TbsServiceImpl(); + //service.removeYiDong(); //移除异动 + + SyncMatchActCenter matchActCenter = new SyncMatchActCenter(); + //matchActCenter.tmain(); + + for (int i = 1; i < 13; i++) { + service.syncCost(y,i); + } + //service.syncCost(y,m); + + //费用核销 +// SyncVerificationMain verificationMain = new SyncVerificationMain(); +// verificationMain.testMain(); + + //更新核销中的预算费用占用 +// SyncDiscountBudget syncDiscountBudget = new SyncDiscountBudget(); +// syncDiscountBudget.sync();; + + //根据活动编码,更新申请vtb_flag=1,重新录入核销 + //SyncActVtb actVtb = new SyncActVtb(); + //actVtb.tmain(;); + + + + } + + +} diff --git a/src/main/java/com/demo/Application2.java b/src/main/java/com/demo/Application2.java new file mode 100644 index 0000000..794e8f2 --- /dev/null +++ b/src/main/java/com/demo/Application2.java @@ -0,0 +1,151 @@ +package com.demo; + +import com.demo.cost.SyncVerificationMain; +import com.demo.util.SetData; +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; + +/** + * @author YenHex + * @since 2023/3/22 + */ +@Slf4j +public class Application2 { + + @Test + public void test1000(){ + SetData.startId = 0; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + + @Test + public void test2000(){ + SetData.startId = 1000; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + + @Test + public void test3000(){ + SetData.startId = 2000; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + + @Test + public void test4000(){ + SetData.startId = 3000; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + + @Test + public void test5000(){ + SetData.startId = 4000; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + + @Test + public void test6000(){ + SetData.startId = 5000; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + + @Test + public void test7000(){ + SetData.startId = 6000; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + + @Test + public void test8000(){ + SetData.startId = 7000; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + + @Test + public void test9000(){ + SetData.startId = 8000; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + + @Test + public void test10000(){ + SetData.startId = 9000; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + + @Test + public void test11000(){ + SetData.startId = 10000; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + + @Test + public void test12000(){ + SetData.startId = 11000; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + + + //////////////////////////////// + + @Test + public void test13000(){ + SetData.startId = 12000; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + + @Test + public void test14000(){ + SetData.startId = 13000; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + + @Test + public void test15000(){ + SetData.startId = 14000; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + + @Test + public void test16000(){ + SetData.startId = 15000; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + + @Test + public void test17000(){ + SetData.startId = 16000; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + + @Test + public void test18000(){ + SetData.startId = 17000; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + + @Test + public void test19000(){ + SetData.startId = 18000; + SyncVerificationMain verificationMain = new SyncVerificationMain(); + verificationMain.testMain(); + } + +} diff --git a/src/main/java/com/demo/SqlIdUtil.java b/src/main/java/com/demo/SqlIdUtil.java new file mode 100644 index 0000000..8f671cf --- /dev/null +++ b/src/main/java/com/demo/SqlIdUtil.java @@ -0,0 +1,22 @@ +package com.demo; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author YenHex + * @since 2023/6/15 + **/ +public class SqlIdUtil { + + public static String buildSqlId(List sqlId) { + String ids = sqlId.stream().map(Object::toString).collect(Collectors.joining(",")); + return "("+ids+")"; + } + + public static String buildSqlIdString(List sqlId) { + String ids = sqlId.stream().map(a->"'"+a.toString()+"'").collect(Collectors.joining(",")); + return "("+ids+")"; + } + +} diff --git a/src/main/java/com/demo/SyncActVtb.java b/src/main/java/com/demo/SyncActVtb.java new file mode 100644 index 0000000..a9d1b1f --- /dev/null +++ b/src/main/java/com/demo/SyncActVtb.java @@ -0,0 +1,18 @@ +package com.demo; + +import java.util.List; + +/** + * @author YenHex + * @since 2023/7/2 + **/ +public class SyncActVtb { + + public void tmain(List activityCodes){ + String sql_update = "update tbs_cost_apply left join tbs_activity " + + "set tbs_cost_apply.vtb_sync = 1 " + + "where tbs_cost_apply.vtb_sync = 2 and " + + "tbs_activity.activity_code in "+SqlIdUtil.buildSqlIdString(activityCodes); + } + +} diff --git a/src/main/java/com/demo/SyncDiscountBudget.java b/src/main/java/com/demo/SyncDiscountBudget.java new file mode 100644 index 0000000..d8049ff --- /dev/null +++ b/src/main/java/com/demo/SyncDiscountBudget.java @@ -0,0 +1,115 @@ +package com.demo; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import com.demo.cost.TbsMapper; +import com.demo.cost.entity.JslTbsBudgetLog; +import com.demo.t20230616.JslTbsScheduleItemBudget; +import com.demo.t20230702.JslTbsScheduleItemBudgetSync; +import com.demo.t20230702.XltDiscountBudget; +import lombok.SneakyThrows; +import org.junit.Test; +import org.noear.wood.DbContext; + +import java.util.List; + +/** + * @author YenHex + * @since 2023/7/2 + **/ +public class SyncDiscountBudget { + + String xlt_sql = " select " + + " sum(v.shiJiMoney) real_money, " + + " datepart(quarter,v.timeStart) season_num, " + + " da.area k1, " + + " dp.province k2, " + + " dc.city k3, " + + " dct.dealerName k4 , " + + " s.seriesName series_name " + + " from tiShenQingView v " + + " left join dealerConnTable dct on dct.id=v.chengBenId " + + " left join dealerCity dc on dc.id=dct.cid " + + " left join dealerProvince dp on dp.id=dc.pid " + + " left join dealerArea da on da.id=dp.aid " + + " left join emp_product_series_ s on s.id = v.pinPaiId " + + " where 1=1 and state_='申请中' " + + " and ((v.timeStart <= '20231231' and v.timeEnd>= '20230101' ) or (v.timeStart>= '20230101' and v.timeStart<= '20231231' ) ) " + + " and v.shiJiMoney > 0 " + + " and (v.isZhuanXiang is null or v.isZhuanXiang = 0) " + + " and dct.dealerName is not null " + + " group by s.seriesName,datepart(quarter,v.timeStart), da.area,dp.province,dc.city,dct.dealerName " + + " order by k4"; + + @Test + @SneakyThrows + public void sync(){ + DbContext xltDbContext = TbsMapper.getXltDbContext(); + DbContext jslDbContext = TbsMapper.getJslDbContext(); + List xltDiscountBudgetList = xltDbContext.sql(xlt_sql).getList(XltDiscountBudget.class); + + String del_budget_logs = "delete from tbs_budget_log where opt_user_code = 'system'"; + jslDbContext.sql(del_budget_logs).execute(); + + for (XltDiscountBudget discountBudget : xltDiscountBudgetList) { + String tmpK4 = discountBudget.getK4(); + Integer seasonNum = discountBudget.getSeasonNum(); + String seriesName = discountBudget.getSeriesName(); + if(discountBudget.getK4().contains("季度")){ + tmpK4 = discountBudget.getK4().split("季度")[1]; + } + tmpK4 = tmpK4.replace("销售区域",""); + tmpK4 = tmpK4.replace("区域",""); + tmpK4 = tmpK4.replace("预算",""); + tmpK4 = tmpK4.replace("督协",""); + String jsl_budget_item = "SELECT" + + " budget.center_id," + + " budget.center_type," + + " budget.center_code," + + " budget.center_name," + + " budget.budget_code," + + " sib.*" + + " FROM `tbs_schedule_item_budget` sib " + + " left join tbs_budget budget on sib.budget_id = budget.id " + + " where budget.budget_code like concat('%','"+tmpK4+"','%') " + + " and budget.budget_code like concat('%','"+seriesName+"','%') " + + " and sib.item_name = '2023第"+seasonNum+"季度'"; + + JslTbsScheduleItemBudgetSync itemBudget = jslDbContext.sql(jsl_budget_item).getItem(JslTbsScheduleItemBudgetSync.class); + if(itemBudget.getBudgetId()==null){ + System.out.println(jsl_budget_item); + System.out.println("-------"); + continue; + } + JslTbsBudgetLog budgetLog = new JslTbsBudgetLog(); + budgetLog.setBudgetId(itemBudget.getBudgetId()); + budgetLog.setBudgetCode(itemBudget.getBudgetCode()); + budgetLog.setOptType(3); + budgetLog.setOptUserId("0"); + budgetLog.setOptUserName("系统导入"); + budgetLog.setOptUserCode("system"); + budgetLog.setAmount(discountBudget.getRealMoney().negate()); + budgetLog.setScheduleId(itemBudget.getScheduleId()); + budgetLog.setScheduleItemId(itemBudget.getScheduleItemId()); + budgetLog.setScheduleItemBudgetId(itemBudget.getId()); + budgetLog.setItemName(itemBudget.getItemName()); + budgetLog.setStartDate(itemBudget.getStartDate()); + budgetLog.setEndDate(itemBudget.getEndDate()); + + budgetLog.setSubjectId(0L); + budgetLog.setSubjectCode(""); + budgetLog.setSubjectName(""); + budgetLog.setCenterType(itemBudget.getCenterType()); + budgetLog.setCenterId(itemBudget.getCenterId()); + budgetLog.setCenterCode(itemBudget.getCenterCode()); + budgetLog.setCenterName(itemBudget.getCenterName()); + budgetLog.setRollbackFlag(0); + budgetLog.setMigrateFlag(0); + budgetLog.setTenantId("001"); + + jslDbContext.table("tbs_budget_log").setEntity(budgetLog).insert(); + + } + } + +} diff --git a/src/main/java/com/demo/cost/Other.java b/src/main/java/com/demo/cost/Other.java new file mode 100644 index 0000000..94798df --- /dev/null +++ b/src/main/java/com/demo/cost/Other.java @@ -0,0 +1,102 @@ +package com.demo.cost; + +import com.demo.jsl.entity.costapply.XltCost; +import com.demo.jsl.entity.costapply.XltCostItem; +import com.demo.jsl.entity.pay.PayPayment; +import com.demo.jsl.entity.pay.PayPaymentItem; +import com.demo.jsl.entity.subject.JslSubject; +import com.demo.jsl.entity.verifi.VtbVerification; +import com.demo.jsl.entity.verifi.VtbVerificationSubject; +import org.noear.wood.DbContext; + +import java.math.BigDecimal; +import java.sql.SQLException; +import java.util.Date; + +/** + * @author YenHex + * @since 2023/6/14 + **/ +public class Other { + + @Deprecated + private void buildAndSaveCheckPayment(DbContext jslContext, XltCost xltCost, String userId, Long supplierId, BigDecimal totalCheckMoney, Date passDate, Long costApplyId, XltCostItem costItem, Long activityId, JslSubject jslSubject) throws SQLException { + VtbVerification verification = new VtbVerification(); + verification.setVerificationCode(costItem.getCostItemCode()); + verification.setFinishedTime(passDate); + verification.setCostApplyId(costApplyId); + verification.setActivityId(activityId); + verification.setVerificationState(1); + verification.setPaymentState(1); + verification.setAmount(costItem.getCheckMoney()); + verification.setAmountRecord(costItem.getCheckMoney()); + verification.setRemark("销路通核销号:" + costItem.getCostItemCode()); + verification.setTenantId("001"); + verification.setActivityId(activityId); + verification.setSupplierId(supplierId); + verification.setSupplierName(costItem.getCusName()); + verification.setSupplierCode(costItem.getCusCode()); + verification.setUserId(userId); + verification.setUserCode(xltCost.getUserCode()); + verification.setUserName(xltCost.getUserName()); + Long varifId = jslContext.table("vtb_verification").setEntity(verification).insert(); + + VtbVerificationSubject verificationSubject = new VtbVerificationSubject(); + verificationSubject.setVerificationId(varifId); + verificationSubject.setVerificationSubCode(costItem.getCostItemCode()); + verificationSubject.setCostApplyId(costApplyId); + verificationSubject.setActivityId(activityId); + verificationSubject.setSubjectId(jslSubject.getId()); + verificationSubject.setSubjectCode(jslSubject.getSubjectCode()); + verificationSubject.setSubjectName(jslSubject.getSubjectName()); + verificationSubject.setSupplierId(supplierId); + verificationSubject.setSupplierName(costItem.getCusName()); + verificationSubject.setSupplierCode(costItem.getCusCode()); + verificationSubject.setUsedAmountRecord(costItem.getCheckMoney()); + verificationSubject.setUsedAmount(costItem.getCheckMoney()); + verificationSubject.setCountPerson(costItem.getCountPerson() == null ? 0 : costItem.getCountPerson()); + verificationSubject.setCountSession(costItem.getCountSession() == null ? 0 : costItem.getCountSession()); + verificationSubject.setTenantId("001"); + verificationSubject.setRemark(costItem.getRemark()); + + Long varifSubjectId = jslContext.table("vtb_verification_subject").setEntity(verificationSubject).insert(); + + PayPayment payPayment = new PayPayment(); + payPayment.setPayCode(costItem.getCostItemCode()); + payPayment.setPayType("pay"); + payPayment.setSupplierId(supplierId); + payPayment.setSupplierCode(costItem.getCusCode()); + payPayment.setSupplierName(costItem.getCusName()); + payPayment.setPayAmount(costItem.getCheckMoney()); + payPayment.setUserId(userId); + payPayment.setUserCode(xltCost.getUserCode()); + payPayment.setUserName(xltCost.getUserName()); + payPayment.setCreateTime(passDate); + payPayment.setErpCode(""); + payPayment.setBillNumber(""); + payPayment.setRemark("销路通核销号:" + costItem.getCostItemCode()); + payPayment.setPayTime(passDate); + payPayment.setTenantId("001"); + Long payId = jslContext.table("pay_payment").setEntity(payPayment).insert(); + + PayPaymentItem payPaymentItem = new PayPaymentItem(); + payPaymentItem.setPayType("pay"); + payPaymentItem.setPaymentId(payId); + payPaymentItem.setItemPayAmount(costItem.getCheckMoney()); + payPaymentItem.setPayType("pay"); + payPaymentItem.setSupplierId(supplierId); + payPaymentItem.setSubjectId(jslSubject.getId()); + payPaymentItem.setSubjectCode(jslSubject.getSubjectCode()); + payPaymentItem.setSubjectName(jslSubject.getSubjectName()); + payPaymentItem.setCreateTime(passDate); + payPaymentItem.setCostApplyId(costApplyId); + payPaymentItem.setActivityId(activityId); + payPaymentItem.setTenantId("001"); + payPaymentItem.setActivityCode(costItem.getCostItemCode()); + payPaymentItem.setRemark("销路通核销号:" + costItem.getCostItemCode()); + payPaymentItem.setVerificationId(varifId); + payPaymentItem.setVerificationSubjectId(varifSubjectId); + jslContext.table("pay_payment_item").setEntity(payPaymentItem).insert(); + } + +} diff --git a/src/main/java/com/demo/cost/SyncVerificationMain.java b/src/main/java/com/demo/cost/SyncVerificationMain.java new file mode 100644 index 0000000..ffe1692 --- /dev/null +++ b/src/main/java/com/demo/cost/SyncVerificationMain.java @@ -0,0 +1,445 @@ +package com.demo.cost; + +import com.demo.cost.entity.*; +import com.demo.util.SqlCreateUtil; +import com.demo.jsl.entity.pay.PayPayment; +import com.demo.jsl.entity.pay.PayPaymentItem; +import com.demo.jsl.entity.user.JslUser; +import com.demo.jsl.entity.verifi.VtbVerification; +import com.demo.jsl.entity.verifi.VtbVerificationSubject; +import com.demo.util.SetData; +import lombok.SneakyThrows; +import org.junit.Test; +import org.noear.wood.DbContext; + +import java.math.BigDecimal; +import java.sql.SQLException; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author YenHex + * @since 2023/6/14 + **/ +public class SyncVerificationMain { + + //insert + 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 pay_payment = "pay_payment"; + private final String pay_payment_item = "pay_payment_item"; + //update + private final String tbs_activity = "tbs_activity"; + + + @Test + @SneakyThrows + public void removeCostCode(){ + String[] arr = new String[]{ + "6445", + "10236", + "11133", + "11138", + "13428", + "13608", + "13609", + "13705", + "13724", + "14075", + "14076", + "14087", + "15203", + "15204", + "15364", + "15370", + "15371" + }; + this.removeCostIds(Arrays.asList(arr)); + } + + @SneakyThrows + public void removeCostIds(List jslCostIds){ + DbContext jslContext = TbsMapper.getJslDbContext(); + //删除同步异常的数据 + if (jslCostIds.size() > 0) { + String rmIdsString = "(" + jslCostIds.stream().map(id -> "'" + id + "'").collect(Collectors.joining(",")) + ")"; + System.out.println("移除历史数据:"+rmIdsString); + jslContext.sql("delete from vtb_fund_flow where cost_apply_id in " + rmIdsString).execute(); + //opt_type : 4-费用释放 + jslContext.sql("delete from tbs_budget_log where opt_type = 4 and 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(); + } + } + + @SneakyThrows + public void testMain(){ + DbContext jslDbContext = TbsMapper.getJslDbContext(); + DbContext xltDbContext = TbsMapper.getXltDbContext(); + // xlt_sync = 2 同步申请预算完成 + // 获取已同步的费用ID(未完成的) + // budget_sync=1 代表命中预算 + // vtb_sync 0 未开始,1未完成 2->成功 4无核销 + //String sql_cost_list ="select * from tbs_cost_apply where code = '202212301485' "; //测试 + //String sql_cost_list ="select * from tbs_cost_apply where xlt_sync = 2 and budget_sync = 1 and (vtb_sync =0 or vtb_sync = 1)"; + String sql_cost_list ="select * from tbs_cost_apply where xlt_sync = 2 and budget_sync = 1 and vtb_sync !=2 order by id desc"; + if(SetData.startId!=null){ + int startId = SetData.startId; + int endId = startId+1000; + sql_cost_list = "select * from tbs_cost_apply where xlt_sync = 2 and budget_sync = 1 and vtb_sync !=2 and id>="+startId+" and id <"+endId; + } + System.out.println("执行命令:"+ sql_cost_list); + List costList = jslDbContext.sql(sql_cost_list).getList(JslTbsCostApply.class); + System.out.println("未完成数量:"+costList.size()); + //移除历史同步失败的 + List errorCostIds = new ArrayList<>(); + for (JslTbsCostApply costApply : costList) { + if(!costApply.getVtbSync().equals(0)){ + errorCostIds.add(costApply.getId()+""); + } + } + this.removeCostIds(errorCostIds); + + int count = 1; + // 获取活动列表(未释放,以及未完成的) + String sql_activity_list ="select * from tbs_activity where cost_apply_id = ?"; + for (JslTbsCostApply costApply : costList) { + + System.out.println(count+"/"+costList.size()+" ["+costApply.getId()+"]"); + count++; + + //标记状态 + String sql_cost_sync = "update tbs_cost_apply set vtb_sync = 1 where id = "; + jslDbContext.sql(sql_cost_sync + costApply.getId()).execute(); + + // 获取相关的支付单号 + List tbsActivities = jslDbContext.sql(sql_activity_list,costApply.getId().toString()).getList(JslTbsActivity.class); + boolean isOk = buildActivity(jslDbContext, xltDbContext, costApply, tbsActivities); + //完成标记状态 + if(isOk){ + String sql_cost_sync_success = "update tbs_cost_apply set vtb_sync = 2 where id = "; + jslDbContext.sql(sql_cost_sync_success + costApply.getId()).execute(); + } + } + } + + private boolean buildActivity(DbContext jslDbContext, DbContext xltDbContext, JslTbsCostApply costApply, List tbsActivities) throws SQLException { + for (JslTbsActivity tbsActivity : tbsActivities) { + if(tbsActivity.getTotalAmount().compareTo(BigDecimal.ZERO)==0){ + continue; + } + String activityCode = tbsActivity.getActivityCode(); + // 获取销路通核销明细 + String sql_xlt_check_cost = + " SELECT " + + " 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 oldlistnumber = '"+activityCode+"'";//活动id + + List checkCostItemList = xltDbContext.sql(sql_xlt_check_cost).getList(XltCheckCostItem.class); + + if(checkCostItemList.size()==0){ +// String sql_cost_sync_error_4 = "update tbs_cost_apply set vtb_sync = 4 where id = "; +// jslDbContext.sql(sql_cost_sync_error_4 + costApply.getId()).execute(); + System.out.println("无相关核销,活动编码:"+activityCode); + continue; + } + + String sql_budget_cost_item = "select * from tbs_budget_cost_item where activity_id = ?"; + JslTbsBudgetCostItem currCostItem = jslDbContext.sql(sql_budget_cost_item, tbsActivity.getId()).getItem(JslTbsBudgetCostItem.class); + if(currCostItem==null||currCostItem.getId()==null){ + System.out.println("没有命中核销的费用id:"+ costApply.getId()); + return false; + } + + // 创建核销 + BigDecimal totalApplyAmt = BigDecimal.ZERO; + BigDecimal totalPassAmt = BigDecimal.ZERO; + for (int i = 0; i < checkCostItemList.size(); i++) { + XltCheckCostItem checkCostItem = checkCostItemList.get(i); + this.saveVerification(i, jslDbContext, currCostItem,tbsActivity, checkCostItem); + totalApplyAmt = totalApplyAmt.add(checkCostItem.getApplyAmt()); + totalPassAmt = totalPassAmt.add(checkCostItem.getCheckPassAmt()); + } + // 不再支付 + boolean isNotAllow = checkCostItemList.stream().anyMatch(a->a.getNotAllowFlag().equals(1)); + //更新主表dto + JslTbsActivity updAct = new JslTbsActivity(); + //updAct.setId(tbsActivity.getId()); + // 释放金额 + if(isNotAllow){ + // 不再支付返回预算到预算池 + BigDecimal totalReleaseAmt = totalApplyAmt.subtract(totalPassAmt); + if(totalReleaseAmt.compareTo(BigDecimal.ZERO)>0){ + updAct.setActivityState(4); + updAct.setReleaseFlag(1); + updAct.setFinishedFlag(1); + updAct.setReleaseUserId("0"); + updAct.setReleaseUserName("系统导入"); + updAct.setReleaseTime(checkCostItemList.get(0).getExedate()); + updAct.setReleaseAmount(totalReleaseAmt); + this.doNotAllowCost(currCostItem,totalReleaseAmt, jslDbContext, costApply, tbsActivity, totalApplyAmt); + } + } + updAct.setUsedAmount(totalPassAmt); + String sql_update_act_info = SqlCreateUtil.buildUpdateSql(updAct,tbs_activity)+" where id = "+tbsActivity.getId(); + jslDbContext.sql(sql_update_act_info).execute(); + } + return true; + } + + /** + * + * @param totalReleaseAmt + * @param jslDbContext + * @param costApply + * @param tbsActivity + * @param totalApplyAmt + * @throws SQLException + */ + private void doNotAllowCost(JslTbsBudgetCostItem currCostItem,BigDecimal totalReleaseAmt ,DbContext jslDbContext, JslTbsCostApply costApply, JslTbsActivity tbsActivity, BigDecimal totalApplyAmt) 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"); + 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.getId()); + 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; + } + + + private void saveVerification(Integer idx , DbContext jslDbContext, JslTbsBudgetCostItem currCostItem,JslTbsActivity tbsActivity, XltCheckCostItem checkCostItem) throws SQLException { + //查询活动科目 + String sql_activity_subject = "select * from tbs_activity_subject where activity_id = ?"; + JslTbsActivitySubject activitySubject = jslDbContext.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()); + 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.getSupplierCode()); + verification.setSupplierCode(tbsActivity.getSupplierName()); + verification.setUserId("0"); + verification.setUserCode("0"); + verification.setUserName("数据导入"); + + Long varifId = jslDbContext.table(vtb_verification).setEntity(verification).insert(); + + //流水记录 + JslVtbFundFlow fundFlow = new JslVtbFundFlow(); + fundFlow.setFundType("verification"); + fundFlow.setVerificationId(varifId); + 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.getId()); + + fundFlow.setSupplierId(tbsActivity.getSupplierId()); + fundFlow.setSupplierCode(tbsActivity.getSupplierCode()); + fundFlow.setSupplierName(tbsActivity.getSupplierName()); + jslDbContext.table(vtb_fund_flow).setEntity(fundFlow).insert(); + + VtbVerificationSubject verificationSubject = new VtbVerificationSubject(); + verificationSubject.setVerificationId(varifId); + verificationSubject.setVerificationSubCode(checkCostItem.getMainNumber()); + 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.setCountPerson(0); + verificationSubject.setCountSession(0); + verificationSubject.setTenantId("001"); + + Long varifSubjectId = jslDbContext.table(vtb_verification_subject).setEntity(verificationSubject).insert(); + + PayPayment payPayment = new PayPayment(); + payPayment.setPayCode(checkCostItem.getMainNumber()); + payPayment.setPayType("pay"); + payPayment.setSupplierId(tbsActivity.getSupplierId()); + payPayment.setSupplierCode(tbsActivity.getSupplierCode()); + payPayment.setSupplierName(tbsActivity.getSupplierName()); + payPayment.setPayAmount(checkCostAmt); + payPayment.setUserId("0"); + payPayment.setUserCode("0"); + payPayment.setUserName("系统导入"); + payPayment.setCreateTime(checkCostItem.getExedate()); + payPayment.setErpCode(""); + payPayment.setBillNumber(""); + payPayment.setPayTime(checkCostItem.getExedate()); + payPayment.setTenantId("001"); + Long payId = jslDbContext.table(pay_payment).setEntity(payPayment).insert(); + + PayPaymentItem payPaymentItem = new PayPaymentItem(); + payPaymentItem.setPayType("pay"); + payPaymentItem.setPaymentId(payId); + payPaymentItem.setItemPayAmount(checkCostAmt); + payPaymentItem.setPolicyItemCode(checkCostItem.getListNumber()); + payPaymentItem.setPayType("pay"); + payPaymentItem.setSupplierId(tbsActivity.getSupplierId()); + payPaymentItem.setSubjectId(activitySubject.getSubjectId()); + payPaymentItem.setSubjectCode(activitySubject.getSubjectCode()); + payPaymentItem.setSubjectName(activitySubject.getSubjectName()); + payPaymentItem.setCostApplyId(tbsActivity.getCostApplyId()); + payPaymentItem.setActivityId(tbsActivity.getId()); + payPaymentItem.setTenantId("001"); + payPaymentItem.setActivityCode(tbsActivity.getActivityCode()); + payPaymentItem.setVerificationId(varifId); + payPaymentItem.setVerificationSubjectId(varifSubjectId); + jslDbContext.table(pay_payment_item).setEntity(payPaymentItem).insert(); + + } + + +} diff --git a/src/main/java/com/demo/cost/TbsMapper.java b/src/main/java/com/demo/cost/TbsMapper.java new file mode 100644 index 0000000..5f5d080 --- /dev/null +++ b/src/main/java/com/demo/cost/TbsMapper.java @@ -0,0 +1,40 @@ +package com.demo.cost; + +import org.noear.wood.DbContext; + +import java.util.Properties; + +/** + * @author YenHex + * @since 2023/6/14 + **/ +public class TbsMapper { + + private static DbContext jslCtx; + private static DbContext xltCtx; + + public static DbContext getJslDbContext() { + if (jslCtx == null) { + jslCtx = new DbContext("test", + "jdbc:mysql://192.168.0.9:3306/jsl_mall_qs_dev2?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true", + "kpjsl", + "123456"); + //jslCtx = new DbContext("test", "jdbc:mysql://183.234.29.228:3333/jsl_mall_qs_dev2?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true", "kpjsl", "123456"); + } + return jslCtx; + } + + public static DbContext getXltDbContext() { + 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("username", "qs_db_user"); + properties.setProperty("password", "Aa135246"); + properties.setProperty("driverClassName", "com.microsoft.sqlserver.jdbc.SQLServerDriver"); + xltCtx = new DbContext(properties); + } + return xltCtx; + } + +} diff --git a/src/main/java/com/demo/cost/TbsServiceImpl.java b/src/main/java/com/demo/cost/TbsServiceImpl.java new file mode 100644 index 0000000..1168390 --- /dev/null +++ b/src/main/java/com/demo/cost/TbsServiceImpl.java @@ -0,0 +1,686 @@ +package com.demo.cost; + +import com.demo.SqlIdUtil; +import com.demo.cost.entity.JslBmsRegion; +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.pay.PayPayment; +import com.demo.jsl.entity.pay.PayPaymentItem; +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.util.*; +import com.demo.util.dto.DateSplitDTO; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; +import org.noear.wood.DbContext; +import org.noear.wood.WoodConfig; + +import java.io.IOException; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.sql.SQLException; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author YenHex + * @since 2023/3/16 + */ +@Slf4j +public class TbsServiceImpl { + + @Test + @SneakyThrows + public void removeErrCode(){ + String[] errorCodes = new String[]{ + "202304210206", + "202304210275", + "202304230662", + "202304241991", + "202304241911", + "202304241916", + "202304250388", + "202304281538", + "202304300382" + }; + this.removeCostCode(Arrays.asList(errorCodes)); + } + + @Test + @SneakyThrows + public void removeYiDong(){ + DbContext xltDbContext = TbsMapper.getXltDbContext(); + List array = xltDbContext.sql("select reportNumber from emp_tpmYiDongMsg where isGuiDang = 1 " + + " and rowCreateDate>'2023-06-14' GROUP BY reportNumber").getArray("reportNumber"); + //array.forEach(System.out::println); + removeCostCode(array); + } + + @SneakyThrows + public void removeCostCode(List list){ + Set codes = new HashSet<>(list); + DbContext jslContext = TbsMapper.getJslDbContext(); + //删除同步异常的数据 + if (codes.size() > 0) { + String rmCodesString = "(" + codes.stream().map(code -> "'" + code + "'").collect(Collectors.joining(",")) + ")"; + String selectByCodeSql = "select id from tbs_cost_apply where code in " + rmCodesString; + List selectByCodeList = jslContext.sql(selectByCodeSql).getList(JslCostApply.class); + System.out.println("==> "+selectByCodeList.size()+"条核销将被移除"); + if(selectByCodeList.size()==0){ + return; + } + List rmIDs = selectByCodeList.stream().map(a->a.getId()+"").collect(Collectors.toList()); + this.removeByCostIds(rmIDs); + } + } + + @Test + public void removeAction(){ + String[] arr = new String[]{ + "19301" + }; + this.removeByCostIds(Arrays.asList(arr)); + } + + + @SneakyThrows + private 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(); + } + + @Test + public void tsunc(){ + + } + + /** + * 同步费用主要方法 + * + * @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(year, month, xltContext); + if (allCostList.size() < 1) { + log.info(year + "年" + month + "月无数据"); + return; + } + 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); + } + } + //删除同步异常的数据 + this.removeCostCode(rmCodes); + } + 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, fileName, title); + } + xltContext.close(); + jslContext.close(); + } + + @SneakyThrows + private void syncCostMain(DbContext xltContext, DbContext jslContext, List costList, String fileName, String title) { + 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); + 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) 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(), 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(costItem.getCusCode()); + activity.setSupplierName(costItem.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(); + } + } 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; + } + } + + targetType = "series"; + targetCode = category3.getCode(); + targetName = category3.getName(); + levelIds = category1.getId() + "_" + category2.getId() + "_" + category3.getId(); + levelNames = category1.getName() + "_" + category2.getName() + "_" + category3.getName(); + } 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(); + } 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(); + } + 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); + this.buildAndSaveActivityCenter(jslContext, xltCost, supplierId,saleRegion, costApplyId, costItem, activityId, jslSubject); + + //核销读取另外一个表 +// 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) 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"); +// if (costItem.getCenterId().equals(xltCost.getCusId())) { +// centerGoods.setCenterId(supplierId + ""); +// } else { + if(saleRegion!=null&&!"0".equals(saleRegion.getId())){ + centerGoods.setCenterType("saleRegion"); + centerGoods.setCenterId(saleRegion.getId()); + centerGoods.setCenterName(saleRegion.getName()); + }else { + centerGoods.setCenterId("__"+supplierId); + } +// +// JslSupplier centerSuppliers = jslContext.sql("SELECT id,xlt_id,name FROM `bms_supplier` WHERE xlt_id = ?", costItem.getCenterId() +// ).getItem(JslSupplier.class); +// centerGoods.setCenterId(centerSuppliers.getId() + ""); +// } + centerGoods.setSupplierId(supplierId); + centerGoods.setSupplierCode(costItem.getCusCode()); + centerGoods.setSupplierName(costItem.getCusName()); + centerGoods.setCenterCode(costItem.getCenterCode()); + centerGoods.setCenterName(costItem.getCenterName()); + //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(targetCode); + 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 xltCost + * @param supplierId + * @param costApplyId + * @param costItem + * @param activityId + * @param jslSubject + * @throws SQLException + */ + private void buildAndSaveActivityCenter(DbContext jslContext, XltCost xltCost, Long supplierId, JslBmsRegion saleRegion, Long costApplyId, XltCostItem costItem, Long activityId, JslSubject jslSubject) 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")); + activityCenter.setCenterType("customer"); + activityCenter.setTenantId("001"); +// if (costItem.getCenterId().equals(xltCost.getCusId())) { +// activityCenter.setCenterId(supplierId + ""); +// } else { + if(saleRegion!=null&&!"0".equals(saleRegion.getId())){ + activityCenter.setCenterType("saleRegion"); + activityCenter.setCenterId(saleRegion.getId()); + activityCenter.setCenterName(saleRegion.getName()); + }else { + activityCenter.setCenterId("__"+supplierId); + } +// JslSupplier centerSuppliers = jslContext.sql("SELECT id,xlt_id,name FROM `bms_supplier` WHERE xlt_id = ?", costItem.getCenterId() +// ).getItem(JslSupplier.class); +// activityCenter.setCenterId(centerSuppliers.getId() + ""); +// } + activityCenter.setCenterCode(costItem.getCenterCode()); + activityCenter.setCenterName(costItem.getCenterName()); + //todo 同步时更新 + //activityCenter.setUsedAmount(totalCheckMoney); + activityCenter.setUsedAmount(BigDecimal.ZERO); + activityCenter.setRemark(costItem.getProductRemark()); + 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, 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.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 rel.number_ = '" + xltCostCode + "'"; + List costItemList = xltContext.sql(sql).getList(XltCostItem.class); + return costItemList; + } + + @SneakyThrows + private List getXltCostList(Integer year, Integer month, DbContext xltContext) { +// 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 " + +// " LEFT JOIN ReportList relist ON relist.number_ = rep.number_ " + +// "WHERE " + +// " rep.state = '70' " + +// " AND YEAR ( relist.reportTimeStart ) = '2023' " + +// " AND YEAR ( archiveDate ) = '2022' " + +// "ORDER BY " + +// " rep.archiveDate;"; + + 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' " + + "and year(archiveDate) = '" + year + "' " + + "and month(archiveDate) = '" + month + "' " + + " 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 "); + } + +} diff --git a/src/main/java/com/demo/cost/entity/JslBmsRegion.java b/src/main/java/com/demo/cost/entity/JslBmsRegion.java new file mode 100644 index 0000000..9525182 --- /dev/null +++ b/src/main/java/com/demo/cost/entity/JslBmsRegion.java @@ -0,0 +1,27 @@ +package com.demo.cost.entity; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/6/16 + **/ +@Data +public class JslBmsRegion { + + /** + * id + */ + private String id; + + /** + * 名称 + */ + private String name; + + /** + * 编码 + */ + private String code; + +} diff --git a/src/main/java/com/demo/cost/entity/JslTbsActivity.java b/src/main/java/com/demo/cost/entity/JslTbsActivity.java new file mode 100644 index 0000000..0e50378 --- /dev/null +++ b/src/main/java/com/demo/cost/entity/JslTbsActivity.java @@ -0,0 +1,147 @@ +package com.demo.cost.entity; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 费用活动 实体类 + * + * @author YenHex + * @since 2022-11-08 + */ +@Data +public class JslTbsActivity implements Serializable { + + /** + * id + */ + private Long id; + + /** + * 编码 + */ + private String activityCode; + + /** + * 活动状态:0-待核销;1-审批中;2-完成;3-冻结;4-已释放 + */ + private Integer activityState; + + /** + * 费用申请id + */ + private Long costApplyId; + + /** + * 费用通过时间 + */ + private Date costPassTime; + + /** + * 费用通过标识,用于已申请费用活动列表 + */ + private Integer costPassFlag; + + /** + * 活动简述及目的 + */ + private String actTitle; + + /** + * 客户id + */ + private Long supplierId; + + /** + * 客户编码 + */ + private String supplierCode; + + /** + * 客户名称 + */ + private String supplierName; + + /** + * 活动开始时间 + */ + private Date actStartDate; + + /** + * 活动结束时间 + */ + private Date actEndDate; + + /** + * 预算开始时间 + */ + private Date preStartDate; + + /** + * 预算结束时间 + */ + private Date preEndDate; + + /** + * 预计核销时间 + */ + private Date preCheckDate; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 所属租户 + */ + private String tenantId; + + /** + * 完成标识 + */ + private Integer finishedFlag; + + /** + * 完成时间 + */ + private Date finishedTime; + + /** + * 合计金额 + */ + private BigDecimal totalAmount; + + /** + * 使用金额 + */ + private BigDecimal usedAmount; + + private String xltId; + + + private Date releaseTime; + + /** 释放人员id */ + private String releaseUserId; + + /** 释放人员 */ + private String releaseUserName; + + /** 释放标识 */ + private Integer releaseFlag; + + /** 释放金额 */ + private BigDecimal releaseAmount; + + +} + diff --git a/src/main/java/com/demo/cost/entity/JslTbsActivityCenterGoods.java b/src/main/java/com/demo/cost/entity/JslTbsActivityCenterGoods.java new file mode 100644 index 0000000..49a4aad --- /dev/null +++ b/src/main/java/com/demo/cost/entity/JslTbsActivityCenterGoods.java @@ -0,0 +1,204 @@ +package com.demo.cost.entity; + +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * @author YenHex + * @since 2023/6/15 + **/ +@Data +public class JslTbsActivityCenterGoods { + + + /** + * id + */ + private Long id; + + private String centerGoodsCode; + + /** + * 费用申请id + */ + private Long costApplyId; + + /** + * 活动id + */ + private Long activityId; + + /** + * 活动编码 + */ + private String activityCode; + + /** + * 科目id + */ + private Long subjectId; + + /** + * 科目编码 + */ + private String subjectCode; + + /** + * 科目名称 + */ + private String subjectName; + + /** + * 费用额度 + */ + private BigDecimal centerGoodsAmount; + + /** + * 费用占比 + */ + private BigDecimal centerGoodsRate; + + /** + * 费用已用额度 + */ + private BigDecimal usedAmount; + + /** + * 成本中心类型 + */ + private String centerType; + + /** + * 成本中心id + */ + private String centerId; + + /** + * 成本中心编码 + */ + private String centerCode; + + /** + * 成本中心名称 + */ + private String centerName; + + /** + * 费用额度 + */ + private BigDecimal centerAmount; + + /** + * 费用占比 + */ + private BigDecimal centerRate; + + /** + * 目标类型(brand、category、series、spu、sku) + */ + private String targetType; + + /** + * 目标id + */ + private Long targetId; + + /** + * 目标编码 + */ + private String targetCode; + + /** + * 目标名称 + */ + private String targetName; + + /** + * 目标等级id路径 + */ + private String targetLevelPathIds; + + /** + * 目标等级名称路径 + */ + private String targetLevelPathNames; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 最后更新时间 + */ + private LocalDateTime updateTime; + + /** + * 所属租户 + */ + private String tenantId; + + /** + * 创建人 + */ + private String createBy; + + private String updateBy; + + + /** + * 活动开始时间 + */ + private Date actStartDate; + + /** + * 活动结束时间 + */ + private Date actEndDate; + + /** + * 预算开始时间 + */ + private Date preStartDate; + + /** + * 预算结束时间 + */ + private Date preEndDate; + + /** + * 预计核销时间 + */ + private Date preCheckDate; + + /** + * 模板唯一健 + */ + private String tmpUk; + + /** + * 客户id + */ + private Long supplierId; + + /** + * 客户编码 + */ + private String supplierCode; + + /** + * 客户名称 + */ + private String supplierName; + + + +} diff --git a/src/main/java/com/demo/cost/entity/JslTbsActivitySubject.java b/src/main/java/com/demo/cost/entity/JslTbsActivitySubject.java new file mode 100644 index 0000000..ca2ba3f --- /dev/null +++ b/src/main/java/com/demo/cost/entity/JslTbsActivitySubject.java @@ -0,0 +1,106 @@ +package com.demo.cost.entity; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 活动科目项 实体类 + * + * @author YenHex + * @since 2022-11-09 + */ +@Data +public class JslTbsActivitySubject implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private Long id; + + /** + * 费用申请id + */ + private Long costApplyId; + + /** + * 活动id + */ + private Long activityId; + + /** + * 科目id + */ + private Long subjectId; + + /** + * 科目编码 + */ + private String subjectCode; + + /** + * 科目名称 + */ + private String subjectName; + + /** + * 费用额度 + */ + private BigDecimal amount; + + /** + * 费用额度 + */ + private BigDecimal usedAmount; + + /** + * 场次 + */ + private Integer countSession; + + /** + * 人数 + */ + private Integer countPerson; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 最后更新时间 + */ + private LocalDateTime updateTime; + + /** + * 所属租户 + */ + private String tenantId; + + /** + * 创建人 + */ + private String createBy; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 逻辑删除标记(0:显示;1:隐藏) + */ + private String delFlag; + +} + diff --git a/src/main/java/com/demo/cost/entity/JslTbsBudget.java b/src/main/java/com/demo/cost/entity/JslTbsBudget.java new file mode 100644 index 0000000..cf4a852 --- /dev/null +++ b/src/main/java/com/demo/cost/entity/JslTbsBudget.java @@ -0,0 +1,85 @@ +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.time.LocalDateTime; + +/** + * @author YenHex + * @since 2023/6/15 + **/ +@Data +public class JslTbsBudget { + + private Long id; + + /** 预算编码 */ + private String budgetCode; + + /** 费用启用状态 0/1 */ + private Integer budgetState; + + /** 科目id */ + private Long subjectId; + + /** 科目编码 */ + private String subjectCode; + + /** 科目名称 */ + private String subjectName; + + /** 成本中心id */ + private String centerId; + + private String centerType; + + /** 成本中心编码 */ + private String centerCode; + + /** 成本中心名称 */ + private String centerName; + + /** 考核期id */ + private Long scheduleId; + + /** 考核期编码 */ + private String scheduleCode; + + /** 考核期名称 */ + private String scheduleName; + + /** 备注 */ + private String remark; + + /** 条件标识 */ + private Integer conditionFlag; + + /** 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private LocalDateTime createTime; + + /** 最后更新时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private LocalDateTime updateTime; + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + + /** 创建人 */ + private String createBy; + + /** 更新人 */ + private String updateBy; + + /** 逻辑删除标记(0:显示;1:隐藏) */ + @JsonIgnore + @JsonProperty + private String delFlag; + + +} diff --git a/src/main/java/com/demo/cost/entity/JslTbsBudgetCostItem.java b/src/main/java/com/demo/cost/entity/JslTbsBudgetCostItem.java new file mode 100644 index 0000000..e0555d6 --- /dev/null +++ b/src/main/java/com/demo/cost/entity/JslTbsBudgetCostItem.java @@ -0,0 +1,211 @@ +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.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * @author YenHex + * @since 2023/6/15 + **/ +@Data +public class JslTbsBudgetCostItem { + + + private Long id; + + /** 成本明细编码 */ + //(max = 30,message = "成本明细编码长度不能超过30字") + private String centerGoodsCode; + + /** 费用申请id */ + //(message = "费用申请id不能为空") + private Long costApplyId; + + /** 活动id */ + //(message = "活动id不能为空") + private Long activityId; + + /** 活动编码 */ + private String activityCode; + + /** 客户id */ + private Long supplierId; + + /** 客户编码 */ + private String supplierCode; + + /** 客户名称 */ + private String supplierName; + + /** 科目id */ + //(message = "科目id不能为空") + private Long subjectId; + + /** 科目编码 */ + //(message = "科目编码不能为空") + //(max = 50,message = "科目编码长度不能超过50字") + private String subjectCode; + + /** 科目名称 */ + //(message = "科目名称不能为空") + //(max = 50,message = "科目名称长度不能超过50字") + private String subjectName; + + /** 成本中心类型 */ + //(message = "成本中心类型不能为空") + //(max = 50,message = "成本中心类型长度不能超过50字") + private String centerType; + + /** 成本中心id */ + //(message = "成本中心id不能为空") + //(max = 32,message = "成本中心id长度不能超过32字") + private String centerId; + + /** 成本中心编码 */ + //(message = "成本中心编码不能为空") + //(max = 50,message = "成本中心编码长度不能超过50字") + private String centerCode; + + /** 成本中心名称 */ + //(message = "成本中心名称不能为空") + //(max = 50,message = "成本中心名称长度不能超过50字") + private String centerName; + + /** 成本中心金额 */ + //(message = "成本中心金额不能为空") + private BigDecimal centerAmount; + + /** 成本中心占比 */ + //(message = "成本中心占比不能为空") + private BigDecimal centerRate; + + /** 费用额度 */ + //(message = "费用额度不能为空") + private BigDecimal centerGoodsAmount; + + /** 费用占比 */ + //(message = "费用占比不能为空") + private BigDecimal centerGoodsRate; + + /** 目标类型(brand、category、series、spu、sku) */ + //(message = "目标类型(brand、category、series、spu、sku)不能为空") + //(max = 30,message = "目标类型(brand、category、series、spu、sku)长度不能超过30字") + private String targetType; + + /** 目标id */ + //(message = "目标id不能为空") + private Long targetId; + + /** 目标编码 */ + //(message = "目标编码不能为空") + //(max = 30,message = "目标编码长度不能超过30字") + private String targetCode; + + /** 目标名称 */ + //(message = "目标名称不能为空") + //(max = 30,message = "目标名称长度不能超过30字") + private String targetName; + + /** 目标等级路径 */ + //(max = 600,message = "目标等级路径长度不能超过600字") + private String targetLevelPathIds; + + /** 目标等级路径 */ + //(max = 600,message = "目标等级路径长度不能超过600字") + private String targetLevelPathNames; + + /** 备注 */ + //(max = 255,message = "备注长度不能超过255字") + private String remark; + + /** 创建时间 */ + //(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + //(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** 最后更新时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private LocalDateTime updateTime; + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + + /** 创建人 */ + private String createBy; + + /** 更新人 */ + private String updateBy; + + /** 逻辑删除标记(0:显示;1:隐藏) */ + @JsonIgnore + @JsonProperty + private String delFlag; + + /** 活动开始时间 */ + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + private LocalDate actStartDate; + + /** 活动结束时间 */ + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + private LocalDate actEndDate; + + /** 预算开始时间 */ + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + private LocalDate preStartDate; + + /** 预算结束时间 */ + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + private LocalDate preEndDate; + + /** 预计核销时间 */ + //(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + private LocalDate preCheckDate; + + /** 预算id */ + //(message = "预算id不能为空") + private Long budgetId; + + /** 考核id */ + //(message = "考核id不能为空") + private Long scheduleId; + + /** 考核期项id */ + //(message = "考核期项id不能为空") + private Long scheduleItemId; + + private String scheduleItemName; + + /** 录入时考核期总预算 */ + //(message = "费用占比不能为空") + private BigDecimal scheduleItemAmount; + + /** 后台参数:录入时,考核期已用金额(含申请占用金额) */ + private BigDecimal scheduleItemAmountUsed; + + /** 录入时,考核期申请占用金额 */ + private BigDecimal scheduleItemAmountApply; + + /** 费用考核期项id */ + //(message = "费用考核期项id不能为空") + private Long scheduleItemBudgetId; + + /** TbsActivityCenterGoods的id */ + private Long centerGoodItemId; + + /** 标识是否政策生成的item,不参与业务,为以后拓展使用 */ + //private Integer policyFlag; + + /** 是否无效(退回,拒绝时使用,释放则不计入预算占用) */ + private Integer invalidFlag; + +} diff --git a/src/main/java/com/demo/cost/entity/JslTbsBudgetLog.java b/src/main/java/com/demo/cost/entity/JslTbsBudgetLog.java new file mode 100644 index 0000000..e0dc10c --- /dev/null +++ b/src/main/java/com/demo/cost/entity/JslTbsBudgetLog.java @@ -0,0 +1,265 @@ +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.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author YenHex + * @since 2023/6/15 + **/ +@Data +public class JslTbsBudgetLog { + + private Long id; + + /** 预算id */ + //(message = "预算id不能为空") + private Long budgetId; + + /** 预算编码 */ + //(message = "预算编码不能为空") + //(max = 30,message = "预算编码长度不能超过30字") + //(condition = SqlCondition.LIKE) + private String budgetCode; + + /** 类型: + * 0-预算新增;1-费用申请;2-预算调增;3-预算调减;4-费用释放;5-费用申请调增;6-费用申请调减 + **/ + //(message = "类型不能为空") + private Integer optType; + + /** 操作人id */ + //(message = "操作人id不能为空") + //(max = 32,message = "操作人id长度不能超过32字") + private String optUserId; + + /** 操作人名称 */ + //(message = "操作人名称不能为空") + //(max = 32,message = "操作人名称长度不能超过32字") + //(condition = SqlCondition.LIKE) + private String optUserName; + + /** 操作人编号 */ + //(message = "操作人编号不能为空") + //(max = 32,message = "操作人编号长度不能超过32字") + private String optUserCode; + + /** 预算金额/调整金额/释放金额 */ + //(message = "预算金额/调整金额/释放金额不能为空") + private BigDecimal amount; + + /** 考核id */ + //(message = "考核id不能为空") + private Long scheduleId; + + /** 考核期项id */ + //(message = "考核期项id不能为空") + private Long scheduleItemId; + + /** 预算的考核期id */ + //(message = "预算的考核期id不能为空") + private Long scheduleItemBudgetId; + + /** 原考核id */ + //(message = "考核id不能为空") + private Long scheduleOrgId; + + /** 原考核期项id */ + //(message = "考核期项id不能为空") + private Long scheduleItemOrgId; + + /** 原预算的考核期id */ + //(message = "预算的考核期id不能为空") + private Long scheduleItemBudgetOrgId; + + /** 考核编码 */ + //(message = "考核编码不能为空") + //(max = 30,message = "考核编码长度不能超过30字") + private String itemName; + + /** 开始时间 */ + //(message = "开始时间不能为空") + //(max = 0,message = "开始时间长度不能超过0字") + //(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private LocalDateTime startDate; + + /** 结束时间 */ + //(message = "结束时间不能为空") + //(max = 0,message = "结束时间长度不能超过0字") + //(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private LocalDateTime endDate; + + /** 科目id */ + //(message = "科目id不能为空") + private Long subjectId; + + /** 科目编码 */ + //(message = "科目编码不能为空") + //(max = 30,message = "科目编码长度不能超过30字") + private String subjectCode; + + /** 科目名称 */ + //(message = "科目名称不能为空") + //(max = 30,message = "科目名称长度不能超过30字") + private String subjectName; + + /** 成本中心类型 */ + //(message = "成本中心类型不能为空") + //(max = 20,message = "成本中心类型长度不能超过20字") + private String centerType; + + /** 成本中心id */ + //(message = "成本中心id不能为空") + //(max = 32,message = "成本中心id长度不能超过32字") + private String centerId; + + /** 成本中心编码 */ + //(message = "成本中心编码不能为空") + //(max = 30,message = "成本中心编码长度不能超过30字") + private String centerCode; + + /** 成本中心名称 */ + //(message = "成本中心名称不能为空") + //(max = 30,message = "成本中心名称长度不能超过30字") + private String centerName; + + + /** 原成本中心id */ + private String centerOrgId; + + /** 原成本中心编码 */ + private String centerOrgCode; + + /** 原成本中心名称 */ + private String centerOrgName; + + /** 客户id */ + private Long supplierId; + + /** 客户编码 */ + //(max = 30,message = "客户编码长度不能超过30字") + private String supplierCode; + + /** 客户名称 */ + //(max = 30,message = "客户名称长度不能超过30字") + private String supplierName; + + /** 活动id */ + private Long activityId; + + /** 活动编码 */ + //(max = 30,message = "活动编码长度不能超过30字") + //(condition = SqlCondition.LIKE) + private String activityCode; + + private String activityTheme; + + /** 政策id */ + private Long policyId; + + /** 政策编码 */ + //(max = 30,message = "政策编码长度不能超过30字") + private String policyCode; + + /** 政策标题 */ + //(max = 255,message = "政策标题长度不能超过255字") + private String policyTitle; + + /** 政策项id */ + private Long policyItemId; + + /** 政策项编码 */ + //(max = 30,message = "政策项编码长度不能超过30字") + private String policyItemCode; + + /** 费用申请id */ + private Long costApplyId; + + /** 费用申请编码 */ + //(max = 30,message = "费用申请编码长度不能超过30字") + private String costApplyCode; + + /** 费用申请主题 */ + //(max = 150,message = "费用申请主题长度不能超过150字") + private String costApplyTheme; + + /** 备注 */ + //(max = 255,message = "备注长度不能超过255字") + private String remark; + + /** + * 回退标识 + * */ + private Integer rollbackFlag; + + /** + * 迁移标识:0-未迁移;1-已迁移 + **/ + private Integer migrateFlag; + + /** + * 迁移时间 + **/ + private LocalDateTime migrateTime; + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + + /** 目标类型(brand、category、series、spu、sku) */ + //(max = 30,message = "目标类型(brand、category、series、spu、sku)长度不能超过30字") + private String targetType; + + /** 目标id */ + private Long targetId; + + /** 目标编码 */ + //(max = 30,message = "目标编码长度不能超过30字") + private String targetCode; + + /** 目标名称 */ + //(max = 30,message = "目标名称长度不能超过30字") + private String targetName; + + /** 目标等级路径 */ + //(max = 600,message = "目标等级路径长度不能超过600字") + private String targetLevelPathIds; + + /** 目标等级路径 */ + //(max = 600,message = "目标等级路径长度不能超过600字") + private String targetLevelPathNames; + + /** 创建时间 */ + //(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + //(fill = FieldFill.INSERT) + private LocalDateTime createTime; + + /** 最后更新时间 */ + //(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + //(fill = FieldFill.UPDATE) + private LocalDateTime updateTime; + + /** 创建人 */ + //(fill = FieldFill.INSERT) + private String createBy; + + /** 更新人 */ + //(fill = FieldFill.UPDATE) + private String updateBy; + + /** 逻辑删除标记(0:显示;1:隐藏) */ + @JsonIgnore + @JsonProperty + private String delFlag; + +} diff --git a/src/main/java/com/demo/cost/entity/JslTbsCostApply.java b/src/main/java/com/demo/cost/entity/JslTbsCostApply.java new file mode 100644 index 0000000..be59875 --- /dev/null +++ b/src/main/java/com/demo/cost/entity/JslTbsCostApply.java @@ -0,0 +1,22 @@ +package com.demo.cost.entity; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/6/15 + **/ +@Data +public class JslTbsCostApply { + + private Long id; + + /** 费用申请编码 */ + private String code; + + /** 费用申请主题 */ + private String chargeTheme; + + private Integer vtbSync; + +} diff --git a/src/main/java/com/demo/cost/entity/JslVtbFundFlow.java b/src/main/java/com/demo/cost/entity/JslVtbFundFlow.java new file mode 100644 index 0000000..c6b0e82 --- /dev/null +++ b/src/main/java/com/demo/cost/entity/JslVtbFundFlow.java @@ -0,0 +1,103 @@ +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.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * @author YenHex + * @since 2023/6/15 + **/ +@Data +public class JslVtbFundFlow { + + private Long id; + + /** 核销类型 */ + private String fundType; + + /** 核销id */ + private Long verificationId; + + /** 成本明细编码 */ + private String centerGoodsCode; + + /** 费用申请id */ + private Long costApplyId; + + /** 活动id */ + private Long activityId; + + /** 科目id */ + private Long subjectId; + + /** 科目编码 */ + private String subjectCode; + + /** 科目名称 */ + private String subjectName; + + /** 成本中心类型 */ + private String centerType; + + /** 成本中心id */ + private String centerId; + + /** 成本中心编码 */ + private String centerCode; + + /** 成本中心名称 */ + private String centerName; + + /** 已用费用 */ + private BigDecimal usedAmount; + + /** 目标类型(brand、category、series、spu、sku) */ + private String targetType; + + /** 目标id */ + private Long targetId; + + /** 目标编码 */ + private String targetCode; + + /** 目标名称 */ + private String targetName; + + /** 目标等级路径 */ + private String targetLevelPathIds; + + /** 目标等级路径 */ + private String targetLevelPathNames; + + /** 备注 */ + private String remark; + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + + /** 逻辑删除标记(0:显示;1:隐藏) */ + @JsonIgnore + @JsonProperty + private String delFlag; + + /** TbsActivityCenterGoods的id */ + private Long centerGoodItemId; + + + /** 客户id */ + private Long supplierId; + + /** 客户编码 */ + private String supplierCode; + + /** 客户名称 */ + private String supplierName; + +} diff --git a/src/main/java/com/demo/cost/entity/XltCheckCostItem.java b/src/main/java/com/demo/cost/entity/XltCheckCostItem.java new file mode 100644 index 0000000..8fdc218 --- /dev/null +++ b/src/main/java/com/demo/cost/entity/XltCheckCostItem.java @@ -0,0 +1,50 @@ +package com.demo.cost.entity; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @author YenHex + * @since 2023/6/14 + **/ +@Data +public class XltCheckCostItem { + + /** + * 核销主编码 + */ + String mainNumber; + + /** + * 核销列表编码 + */ + String listNumber; + + /** + * 执行时间 + */ + Date exedate; + + /** + * 申请金额 + */ + BigDecimal applyAmt; + + /** + * 通过审批金额 + */ + BigDecimal checkPassAmt; + + /** + * 不予核销 + */ + Integer notAllowFlag; + + /** + * 不予核销金额 + */ + //BigDecimal notAllowAmt; + +} diff --git a/src/main/java/com/demo/dbdemo/DaoUtil.java b/src/main/java/com/demo/dbdemo/DaoUtil.java new file mode 100644 index 0000000..734b25e --- /dev/null +++ b/src/main/java/com/demo/dbdemo/DaoUtil.java @@ -0,0 +1,217 @@ +package com.demo.dbdemo; + + +import java.io.IOException; + +import java.io.InputStream; + +import java.lang.reflect.Field; + +import java.sql.Connection; + +import java.sql.DriverManager; + +import java.sql.PreparedStatement; + +import java.sql.ResultSet; + +import java.sql.SQLException; + +import java.util.ArrayList; + +import java.util.List; + +import java.util.Properties; + + +/** + * 数据库连接的封装 + * 数据库增删改查的封装 + * + * @author YenHex + * @since 2023/6/30 + **/ +public class DaoUtil{ + + private String driver; + + private String url; + + private String user; + + private String password; + + public Connection conn = null; + + public PreparedStatement pstmt = null; + + public ResultSet rs = null; + + + public DaoUtil(String url, String user, String password) { + this.url = url; + this.user = user; + this.password = password; + if(url.contains("sqlserver")){ + this.driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; + }else { + this.driver = "driverClassName: com.mysql.cj.jdbc.Driver"; + } + } + + + /** + * 获取连接对象的封装 + * + * @return Connection + */ + public Connection getConnection() { + try { + Class.forName(driver); + conn = DriverManager.getConnection(url, user, password); + } catch (SQLException | ClassNotFoundException e) { + e.printStackTrace(); + } + return conn; + } + + /** + * 对资源释放的封装 + * + * @param rs + * @param pstmt + * @param conn + */ + public void closeAll(ResultSet rs, PreparedStatement pstmt, Connection conn) { + if (rs != null) { + try { + //此处为释放资源 + this.rs.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + if (pstmt != null) { + try { + //此处为释放资源 + this.pstmt.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + if (conn != null) { + try { + //此处为释放资源 + this.conn.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + + /** + * 对增删改的封装 + * + * @param strSql + * @param param + * @return 返回受影响的行数 + */ + public int execute(String strSql, Object[] param) { + //受影响的行数 + int resultLine = 0; + //获取连接对象 + conn = getConnection(); + try { + //获取执行语句的对象 + pstmt = conn.prepareStatement(strSql); + //判断是否有带条件参数 + if (param != null) { + //如果有点条件参数循环设值 + for (int i = 0; i < (param == null ? 0 : param.length); i++) { + //对第i个参数设值 + pstmt.setObject(i + 1, param[i]); + } + //执行并返回受影响的行数 + resultLine = pstmt.executeUpdate(); + } + } catch (SQLException e) { + e.printStackTrace(); + } finally { + closeAll(null, pstmt, conn); + } + //返回受影响的行数 + return resultLine; + } + + /** + * 查询的封装 + * 将查询到表的的所有数据存储在Object集合中 + * + * @param strSql + * @param param + * @return 返回数据集合 + */ + public List query(String strSql, Object[] param, Class clazz) { + conn = getConnection(); + //该集合存储数据表数据 + List pList = new ArrayList(); + //实体对象 + T t = null; + try { + //获取执行Sql对象 + pstmt = conn.prepareStatement(strSql); + if (pstmt != null) { + for (int i = 0; i < (param == null ? 0 : param.length); i++) { + pstmt.setObject(i + 1, param[i]); + } + //获取数据集合 + rs = pstmt.executeQuery(); + //将数据表数据填充到集合中 + while (rs.next()) { + t = clazz.newInstance(); + //将一行中数据的列遍历完成 + for (int i = 0; i < rs.getMetaData().getColumnCount(); i++) { + //获取每一列的名称 + String colName = rs.getMetaData().getColumnName(i + 1); + //获取每一列的名称对应的值 + Object value = rs.getObject(colName); + //把当前的值利用反射添加到实体类中 + this.setEntity(t, colName, value); + } + pList.add(t); + } + //为了方便读取,在集合的最后对改表的列数进行存储 + return pList; + } + } catch (SQLException | InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } finally { + closeAll(this.rs, this.pstmt, this.conn); + } + return null; + } + + /** + * 通过反射填充实体类 + * + * @param t 实体类对象 + * @param attr 实体类属性名 + * @param v 要给属性设的值 + */ + public void setEntity(T t, String attr, Object v) { + try { + //获取t类(实体类)的属性,根据attr属性名 + Field f = t.getClass().getDeclaredField(attr); + //实体类中的属性是私有的,故做此操作 + f.setAccessible(true); + //对改字段赋值v + f.set(t, v); + } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { + e.printStackTrace(); + } + } + + +} diff --git a/src/main/java/com/demo/doc/PrintDemo.java b/src/main/java/com/demo/doc/PrintDemo.java new file mode 100644 index 0000000..cb2cf26 --- /dev/null +++ b/src/main/java/com/demo/doc/PrintDemo.java @@ -0,0 +1,53 @@ +package com.demo.doc; + +/** + * @author YenHex + * @since 2023/5/16 + */ +public class PrintDemo { + + public static void main(String[] args) { + String sql = "SELECT " + + " 'tableName' = d.name, " + + " 'columnName' = A.name, " + + " 'comment' = isnull( G.[value], '' ), " + + " 'isKey' = " + + "CASE " + + " WHEN EXISTS ( " + + " SELECT " + + " 1 " + + " FROM " + + " sysobjects " + + " WHERE " + + " xtype = 'PK' " + + " AND parent_obj = A.id " + + " AND name IN ( SELECT name FROM sysindexes WHERE indid IN ( SELECT indid FROM sysindexkeys WHERE id = A.id AND colid = A.colid ) ) " + + " ) THEN " + + " 'true' ELSE 'false' " + + " END, " + + " 'dataType' = B.name, " + + " 'maxLength' = COLUMNPROPERTY( A.id, A.name, 'PRECISION' ), " + + " 'numericPrecision' = isnull( COLUMNPROPERTY( A.id, A.name, 'Scale' ), 0 ), " + + " 'isNull' = " + + "CASE " + + " " + + " WHEN A.isnullable= 1 THEN " + + " 'true' ELSE 'false' " + + " END " + + "FROM " + + " syscolumns A " + + " LEFT JOIN systypes B ON A.xusertype= B.xusertype " + + " INNER JOIN sysobjects D ON A.id= D.id " + + " AND D.xtype= 'U' " + + " AND D.name != 'dtproperties' " + + " LEFT JOIN syscomments E ON A.cdefault= E.id " + + " LEFT JOIN sys.extended_properties G ON A.id= G.major_id " + + " AND A.colid= G.minor_id " + + " LEFT JOIN sys.extended_properties F ON D.id= F.major_id " + + " AND F.minor_id= 0 " + + "WHERE " + + " d.name in "; + System.out.println(sql); + } + +} diff --git a/src/main/java/com/demo/doc/TestDox.java b/src/main/java/com/demo/doc/TestDox.java new file mode 100644 index 0000000..441316d --- /dev/null +++ b/src/main/java/com/demo/doc/TestDox.java @@ -0,0 +1,115 @@ +package com.demo.doc; + +import com.demo.doc.util.JavaClassUtil; +import com.thoughtworks.qdox.JavaProjectBuilder; +import com.thoughtworks.qdox.model.*; +import org.junit.Test; + +import java.io.File; +import java.nio.charset.StandardCharsets; +import java.util.List; + +/** + * @author YenHex + * @since 2023/5/11 + */ +public class TestDox { + + @Test + public void test1() { + JavaProjectBuilder javaProjectBuilder = new JavaProjectBuilder(); + javaProjectBuilder.setEncoding(StandardCharsets.UTF_8.name()); + // 通过addSource等相关方法, 将源码添加进QDox中 (注:可以多次添加) + File file = new File("D:\\workspace-main\\JiaShiLi\\jsl-questionnaire-base\\src\\main\\java\\com\\qs\\serve\\modules\\"); + javaProjectBuilder.addSourceTree(file); + // 获取解析出来的JavaClass对象 + + javaProjectBuilder.getClasses().forEach(javaClass -> { + //System.out.println("包名\t" + javaClass.getPackageName()); + System.out.println("全类名\t" + javaClass.getFullyQualifiedName()); +// System.out.println("注释\t" + javaClass.getComment()); +// System.out.println("字段\t" + javaClass.getFields()); +// System.out.println("方法\t" + javaClass.getMethods()); +// System.out.println("注释上的标签\t" + javaClass.getTags()); +// +// System.out.println("是否是抽象类\t" + javaClass.isAbstract()); +// System.out.println("是否是注解\t" + javaClass.isAnnotation()); +// System.out.println("是否是枚举\t" + javaClass.isEnum()); + + //System.out.println("源码\t" + javaClass.getSource()); + }); + + + } + + @Test + public void test2() { + JavaProjectBuilder javaProjectBuilder = new JavaProjectBuilder(); + javaProjectBuilder.setEncoding(StandardCharsets.UTF_8.name()); + // 通过addSource等相关方法, 将源码添加进QDox中 (注:可以多次添加) + File file = new File("D:\\workspace-main\\JiaShiLi\\jsl-questionnaire-base\\src\\main\\java\\com\\qs\\serve\\modules\\sys\\controller\\"); + javaProjectBuilder.addSourceTree(file); + // 获取解析出来的JavaClass对象 + javaProjectBuilder.getClasses().forEach(javaClass -> { + System.out.println("全类名\t" + javaClass.getFullyQualifiedName()); + String rr = JavaClassUtil.getAnnotationString(javaClass, "RequestMapping", "value"); + if (rr != null) { + System.out.println(rr); + } + List methods = javaClass.getMethods(); + for (JavaMethod javaMethod : methods) { + String method = "GET"; + String url = JavaClassUtil.getAnnotationString(javaMethod, "GetMapping", "value"); + if (url == null) { + method = "POST"; + url = JavaClassUtil.getAnnotationString(javaMethod, "PostMapping", "value"); + if (url != null) { + for (JavaParameter parameter : javaMethod.getParameters()) { + JavaType javaType = parameter.getType(); + JavaAnnotation annotation = JavaClassUtil.getAnnotation(parameter, "RequestBody"); + if (annotation != null) { + System.out.println(1); + } + } + } + } + if (url == null) { + method = "PUT"; + url = JavaClassUtil.getAnnotationString(javaMethod, "PutMapping", "value"); + } + if (url == null) { + method = "DEL"; + url = JavaClassUtil.getAnnotationString(javaMethod, "DeleteMapping", "value"); + } + if (url == null) { + method = "GET/POST/PUT/DEL"; + url = JavaClassUtil.getAnnotationString(javaMethod, "RequestMapping", "value"); + } + System.out.println("[" + method + "] " + url); + } + }); + } + + + @Test + public void test3() { + JavaProjectBuilder javaProjectBuilder = new JavaProjectBuilder(); + javaProjectBuilder.setEncoding(StandardCharsets.UTF_8.name()); + // 通过addSource等相关方法, 将源码添加进QDox中 (注:可以多次添加) + File file = new File("D:\\workspace-main\\JiaShiLi\\jsl-questionnaire-base\\src\\main\\java\\com\\qs\\serve\\modules\\oms\\entity\\OmsOrder.java"); + javaProjectBuilder.addSourceTree(file); + // 获取解析出来的JavaClass对象 + for (JavaClass javaClass : javaProjectBuilder.getClasses()) { + //System.out.println("全类名\t" + javaClass.getFullyQualifiedName()); + for (JavaField javaField : javaClass.getFields()) { + //忽略静态的serialVersionUID + if (javaField.getName().equals("serialVersionUID")) { + continue; + } + System.out.println(javaField.getComment() + " " + javaField.getName()); + } + + } + } + +} diff --git a/src/main/java/com/demo/doc/dto/Dx.java b/src/main/java/com/demo/doc/dto/Dx.java new file mode 100644 index 0000000..a6af3d1 --- /dev/null +++ b/src/main/java/com/demo/doc/dto/Dx.java @@ -0,0 +1,93 @@ +package com.demo.doc.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @author YenHex + * @since 2023/5/11 + */ +@NoArgsConstructor +@Data +public class Dx { + + private List apiServiceList; + + @Data + public static class ApiModule { + private String moduleName; + private List apiServiceList; + } + + @Data + public static class ApiService { + private String serviceName; + private List apiRequestList; + } + + + @Data + public static class ApiFiled { + /** + * 字段名 + */ + private String name; + + /** + * 字段类型 + * string、int、double、decimal、Object、List + **/ + private String type; + /** + * 备注 + */ + private String description; + /** + * 是否必须 + */ + private boolean required; + /** + * 版本 + */ + private String version; + + private ApiObject object; + private List array; + } + + @Data + public static class ApiObject { + private String className; + private List filedList; + } + + @Data + public static class ApiRequest { + /** + * 请求方式 + */ + private String method; + /** + * 请求地址 + */ + private String url; + /** + * 备注 + */ + private String comment; + /** + * 头部 + */ + private List header; + /** + * 头部 + */ + private List query; + private List variable; + + private ApiObject body; + } + +} diff --git a/src/main/java/com/demo/doc/util/FileUtilTest.java b/src/main/java/com/demo/doc/util/FileUtilTest.java new file mode 100644 index 0000000..3b1f510 --- /dev/null +++ b/src/main/java/com/demo/doc/util/FileUtilTest.java @@ -0,0 +1,90 @@ +package com.demo.doc.util; + +import lombok.SneakyThrows; +import org.apache.commons.io.FileUtils; +import org.junit.Test; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @author YenHex + * @since 2023/5/15 + */ +public class FileUtilTest { + + public static List lisFile(String path, String fileType) { + List paths = new ArrayList<>(); + File file = new File(path); + if (file.isDirectory()) { + File[] files = file.listFiles(); + for (int i = 0; i < files.length; i++) { + String filename = files[i].getName(); + if (filename.trim().toLowerCase().endsWith(fileType)) { + paths.add(files[i].getPath()); + } + if (files[i].isDirectory()) { + String childPath = files[i].getPath(); + paths.addAll(lisFile(childPath, fileType)); + } + } + } + return paths; + } + + @Test + public void listFile() { + String path = "D:\\workspace-main\\_Other\\RuoYi-Vue-Plus-5.X"; + FileUtilTest.lisFile(path, "pom.xml"); + } + + @Test + @SneakyThrows + public void listFilePom() { + String path = "D:\\workspace-main\\_Other\\RuoYi-Vue-Plus-5.X"; + List paths = FileUtilTest.lisFile(path, "pom.xml"); + Set groupSet = new HashSet<>(); + for (String p : paths) { + File file = new File(p); + String content = FileUtils.readFileToString(file, "UTF-8"); + // groupId + String regex = "(.*?)"; + Pattern pattern = Pattern.compile(regex); + Matcher m = pattern.matcher(content); + while (m.find()) { + groupSet.add(m.group()); + } + } + groupSet.forEach(System.out::println); + } + + @Test + @SneakyThrows + public void test22() { + String path = "D:\\workspace-main\\_Other\\RuoYi-Vue-Plus-5.X\\ruoyi-admin\\pom.xml"; + File file = new File(path); + String content = FileUtils.readFileToString(file, "UTF-8"); + // groupId + Set groupSet = new HashSet<>(); + String regex = "(.*?)"; + Pattern pattern = Pattern.compile(regex); + Matcher m = pattern.matcher(content); + while (m.find()) { + groupSet.add(m.group()); + } + groupSet.forEach(System.out::println); + //artifactId + /*String regex2 = "(.*?)"; + Pattern pattern2 = Pattern.compile(regex2); + Matcher m2 = pattern2.matcher(content); + while (m2.find()) { + System.out.println(m2.group()); + }*/ + } + +} diff --git a/src/main/java/com/demo/doc/util/JavaClassUtil.java b/src/main/java/com/demo/doc/util/JavaClassUtil.java new file mode 100644 index 0000000..1fd4823 --- /dev/null +++ b/src/main/java/com/demo/doc/util/JavaClassUtil.java @@ -0,0 +1,62 @@ +package com.demo.doc.util; + +import com.thoughtworks.qdox.model.JavaAnnotation; +import com.thoughtworks.qdox.model.JavaClass; +import com.thoughtworks.qdox.model.JavaMethod; +import com.thoughtworks.qdox.model.JavaParameter; +import com.thoughtworks.qdox.model.expression.AnnotationValue; + +/** + * @author YenHex + * @since 2023/5/12 + */ +public class JavaClassUtil { + + public static JavaAnnotation getAnnotation(JavaClass javaClass, String annotationName) { + for (JavaAnnotation annotation : javaClass.getAnnotations()) { + if (annotation.getType().getName().contains(annotationName)) { + return annotation; + } + } + return null; + } + + public static JavaAnnotation getAnnotation(JavaParameter javaParameter, String annotationName) { + for (JavaAnnotation annotation : javaParameter.getAnnotations()) { + if (annotation.getType().getName().contains(annotationName)) { + return annotation; + } + } + return null; + } + + public static JavaAnnotation getAnnotation(JavaMethod javaMethod, String annotationName) { + for (JavaAnnotation annotation : javaMethod.getAnnotations()) { + if (annotation.getType().getName().contains(annotationName)) { + return annotation; + } + } + return null; + } + + public static String getAnnotationString(JavaAnnotation annotation, String propertyName) { + if (annotation != null) { + AnnotationValue annotationValue = annotation.getProperty(propertyName); + if (annotationValue != null) { + return annotationValue.getParameterValue().toString(); + } + } + return null; + } + + public static String getAnnotationString(JavaClass javaClass, String annotationName, String propertyName) { + JavaAnnotation annotation = getAnnotation(javaClass, annotationName); + return getAnnotationString(annotation, propertyName); + } + + public static String getAnnotationString(JavaMethod javaMethod, String annotationName, String propertyName) { + JavaAnnotation annotation = getAnnotation(javaMethod, annotationName); + return getAnnotationString(annotation, propertyName); + } + +} diff --git a/src/main/java/com/demo/dto/DaoContext.java b/src/main/java/com/demo/dto/DaoContext.java new file mode 100644 index 0000000..4f67d95 --- /dev/null +++ b/src/main/java/com/demo/dto/DaoContext.java @@ -0,0 +1,205 @@ +package com.demo.dto; + +import cn.hutool.core.collection.CollUtil; +import com.demo.dto.util.JdbcExecutor; +import com.demo.dto.util.SqlBuilderUtil; +import com.demo.dto.util.SqlOptionContext; +import lombok.extern.slf4j.Slf4j; + +import java.io.Serializable; +import java.util.List; + +/** + * @author YenHex + * @since 2023/6/27 + **/ +@Slf4j +public class DaoContext { + + private JdbcExecutor jdbcExecutor ; + + public DaoContext(String jdbcUrl,String username, String password){ + jdbcExecutor = new JdbcExecutor(username, password, jdbcUrl); + } + + public String insert(T object){ + String sql = SqlBuilderUtil.buildInsertSql(object,null); + return jdbcExecutor.executeInsert(sql); + } + + public String insert(String table,T object){ + String sql = SqlBuilderUtil.buildInsertSql(object,table); + return jdbcExecutor.executeInsert(sql); + } + + public void deleteById(Class clazz, Serializable id){ + String sql = SqlBuilderUtil.buildDeleteSql(clazz) + " where id = "+ id; + int rows = jdbcExecutor.execute(sql); + if(rows!=1){ + log.debug("deleteById rows {}, SQL:{}", rows, sql); + } + } + + public void deleteByIds(Class clazz, List ids){ + String sql = SqlBuilderUtil.buildDeleteSql(clazz) + " where id = "+ SqlBuilderUtil.buildInSql(ids); + int rows = jdbcExecutor.execute(sql); + if(rows!=ids.size()){ + log.debug("deleteByIds ids:{} rows:{}, SQL:{}", ids.size(), rows, sql); + } + } + + public int delete(T condition){ + String sql = SqlBuilderUtil.buildDeleteSql(condition.getClass()) + + "where "+ buildWhereSql(condition); + return jdbcExecutor.execute(sql); + } + + public int delete(T condition,String[] ignoreColumns){ + String sql = SqlBuilderUtil.buildDeleteSql(condition.getClass()) + + "where "+ buildWhereSql(condition,ignoreColumns); + return jdbcExecutor.execute(sql); + } + + + public int updateById(T updateVal, Serializable id){ + String sql = SqlBuilderUtil.buildUpdateSql(updateVal,null) + " where id = "+id; + return jdbcExecutor.execute(sql); + } + + public void updateById(String table, T updateVal, Serializable id){ + String sql = SqlBuilderUtil.buildUpdateSql(updateVal,table) + " where id = "+id; + int rows = jdbcExecutor.execute(sql); + if(rows!=1){ + log.debug("updateById rows:{}, SQL:{}",rows,sql); + } + } + + public int update(T updateVal, T condition){ + String sql = SqlBuilderUtil.buildUpdateSql(updateVal,null) + " where " + buildWhereSql(condition); + return jdbcExecutor.execute(sql); + } + + public int update(String table, T updateVal, T condition){ + String sql = SqlBuilderUtil.buildUpdateSql(updateVal,table) + " where " + buildWhereSql(condition); + return jdbcExecutor.execute(sql); + } + + public void insertBatch(List list){ + insertBatch(list,500); + } + + public void insertBatch(String table, List list){ + insertBatch(table,list,500); + } + + public void insertBatch(List list,int batchSize){ + List> listList = CollUtil.split(list,batchSize); + for (List tList : listList) { + insertBaseBatch(null,tList); + } + } + + public void insertBatch(String table, List list,int batchSize){ + List> listList = CollUtil.split(list,batchSize); + for (List tList : listList) { + insertBaseBatch(table,tList); + } + } + + private void insertBaseBatch(String table, List list){ + String sql = SqlBuilderUtil.buildBatchInsertSql(list,table); + //TODO 返回并注入id + jdbcExecutor.executeInsert(sql); + } + + /** 获取where条件 */ + public String buildWhereSql(T condition,String alia,String[] ignoreColumns){ + return SqlBuilderUtil.buildEqualCondition(condition,alia,ignoreColumns); + } + + /** 获取where条件 */ + public String buildWhereSql(T condition,String alia){ + return SqlBuilderUtil.buildEqualCondition(condition,alia,null); + } + + /** 获取where条件 */ + public String buildWhereSql(T condition,String[] ignoreColumns){ + return SqlBuilderUtil.buildEqualCondition(condition,null,ignoreColumns); + } + + /** 获取where条件 */ + public String buildWhereSql(T condition){ + return SqlBuilderUtil.buildEqualCondition(condition,null,null); + } + + public T selectOne(T condition){ + String sql = SqlBuilderUtil.buildSelectSql(condition.getClass(),null,null,null) + +" where "+buildWhereSql(condition); + Class tClass = (Class) condition.getClass(); + return jdbcExecutor.queryOne(sql,tClass); + } + + public T selectOne(String table, T condition,String[] ignoreColumns){ + String sql = SqlBuilderUtil.buildSelectSql(condition.getClass(),table,null,ignoreColumns) + +" where "+buildWhereSql(condition); + Class tClass = (Class) condition.getClass(); + return jdbcExecutor.queryOne(sql,tClass); + } + + public T selectOne(T condition,String[] ignoreColumns){ + String sql = SqlBuilderUtil.buildSelectSql(condition.getClass(),null,null,ignoreColumns) + +" where "+buildWhereSql(condition); + Class tClass = (Class) condition.getClass(); + return jdbcExecutor.queryOne(sql,tClass); + } + + public List selectList(T condition){ + String sql = SqlBuilderUtil.buildSelectSql(condition.getClass(),null,null,null) + +" where "+buildWhereSql(condition); + Class tClass = (Class) condition.getClass(); + return jdbcExecutor.queryList(sql,tClass); + } + + public List selectList(String table,T condition,String[] ignoreColumns){ + String sql = SqlBuilderUtil.buildSelectSql(condition.getClass(),table,null,ignoreColumns) + +" where "+buildWhereSql(condition); + Class tClass = (Class) condition.getClass(); + return jdbcExecutor.queryList(sql,tClass); + } + + public List selectList(T condition,String[] ignoreColumns){ + String sql = SqlBuilderUtil.buildSelectSql(condition.getClass(),null,null,ignoreColumns) + +" where "+buildWhereSql(condition); + Class tClass = (Class) condition.getClass(); + return jdbcExecutor.queryList(sql,tClass); + } + + public Long selectCount(T condition){ + String sql = SqlBuilderUtil.buildSelectCountSql(condition.getClass())+" where "+buildWhereSql(condition); + Object obj = jdbcExecutor.queryValue(sql); + if(obj!=null){ + return Long.parseLong(obj.toString()); + } + return null; + } + + public Long selectCount(String table, T condition){ + String sql = "select count(1) from "+table+" where "+buildWhereSql(condition); + Object obj = jdbcExecutor.queryValue(sql); + if(obj!=null){ + return Long.parseLong(obj.toString()); + } + return null; + } + + /** + * 使用sql情况下使用 + * @param sql + * @return + */ + public SqlOptionContext sql(String sql){ + return new SqlOptionContext(sql,this.jdbcExecutor); + } + + +} diff --git a/src/main/java/com/demo/dto/DaoTest.java b/src/main/java/com/demo/dto/DaoTest.java new file mode 100644 index 0000000..bc0c946 --- /dev/null +++ b/src/main/java/com/demo/dto/DaoTest.java @@ -0,0 +1,72 @@ +package com.demo.dto; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +import com.demo.t20230702.XltDiscountBudget; + +/** + * @author YenHex + * @since 2023/7/2 + **/ +public class DaoTest { + + public static void main(String[] args) { + + DemoUser demoUser = new DemoUser(); + demoUser.setId(0L); + demoUser.setName("1233"); + demoUser.setBirthday(new Date()); + demoUser.setBalance(0D); + demoUser.setAmount(new BigDecimal(0)); + demoUser.setCreateDate(LocalDate.now()); + demoUser.setCreateTime(LocalDateTime.now()); + demoUser.setAge(0); + DemoUser demoUser2 = new DemoUser(); + demoUser2.setId(0L); + demoUser2.setName("1233"); + demoUser2.setBirthday(new Date()); + demoUser2.setBalance(0D); + demoUser2.setAmount(new BigDecimal(0)); + demoUser.setAge(0); + + List list = new ArrayList<>(); + list.add(demoUser); + list.add(demoUser2); + + String jdbcUrl=""; + String username=""; + String password=""; + + DaoContext context = new DaoContext("","",""); + + context.insert(demoUser); + + context.insertBatch(list); + + context.delete(demoUser); + context.deleteById(DemoUser.class,1); + + context.update(demoUser,demoUser); + context.updateById(demoUser,123456); + + context.selectList(demoUser); + context.selectCount(demoUser); + context.selectOne(demoUser); + + context.buildWhereSql(demoUser); + +// context.sql("").getString(); +// context.sql("").getInt(); +// context.sql("").getList(null); +// context.sql("").getOne(null); +// context.sql("").execute(); +// +// context.sql("").printBean(); +// context.sql("").printMySql(); + } + +} diff --git a/src/main/java/com/demo/dto/DemoUser.java b/src/main/java/com/demo/dto/DemoUser.java new file mode 100644 index 0000000..5aaf8cf --- /dev/null +++ b/src/main/java/com/demo/dto/DemoUser.java @@ -0,0 +1,33 @@ +package com.demo.dto; + +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * @author YenHex + * @since 2023/7/2 + **/ +@Data +public class DemoUser { + + Long id; + + String name; + + Date birthday; + + Double balance; + + BigDecimal amount; + + LocalDate createDate; + + LocalDateTime createTime; + + Integer age; + +} diff --git a/src/main/java/com/demo/dto/model/SqlColumn.java b/src/main/java/com/demo/dto/model/SqlColumn.java new file mode 100644 index 0000000..6355070 --- /dev/null +++ b/src/main/java/com/demo/dto/model/SqlColumn.java @@ -0,0 +1,33 @@ +package com.demo.dto.model; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + + +/** + * @author YenHex + * @since 2023/6/30 + **/ +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface SqlColumn { + + /** + * 列名(默认为空字符串) + * 空字符串,采用字段转列策略 示例: userInfo -> user_info + * 非空时,采用列的值 + */ + String value() default ""; + + + boolean ignore() default false; + + /** + * "java.util.Date" + * @return + */ + String format() default ""; + +} diff --git a/src/main/java/com/demo/dto/model/SqlCondition.java b/src/main/java/com/demo/dto/model/SqlCondition.java new file mode 100644 index 0000000..abca35b --- /dev/null +++ b/src/main/java/com/demo/dto/model/SqlCondition.java @@ -0,0 +1,17 @@ +package com.demo.dto.model; + +/** + * @author YenHex + * @since 2023/7/1 + **/ +public enum SqlCondition { + + eq, + ne, + like, + likeLeft, + likeRight, + notIn, + in + +} diff --git a/src/main/java/com/demo/dto/model/SqlTable.java b/src/main/java/com/demo/dto/model/SqlTable.java new file mode 100644 index 0000000..04a11d9 --- /dev/null +++ b/src/main/java/com/demo/dto/model/SqlTable.java @@ -0,0 +1,24 @@ +package com.demo.dto.model; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + + +/** + * @author YenHex + * @since 2023/6/30 + **/ +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface SqlTable { + + /** + * 列名(默认为空字符串) + * 空字符串,采用字段转列策略 示例: userInfo -> user_info + * 非空时,采用列的值 + */ + String value() default ""; + +} diff --git a/src/main/java/com/demo/dto/util/BeanFieldUtil.java b/src/main/java/com/demo/dto/util/BeanFieldUtil.java new file mode 100644 index 0000000..635234c --- /dev/null +++ b/src/main/java/com/demo/dto/util/BeanFieldUtil.java @@ -0,0 +1,35 @@ +package com.demo.dto.util; + +import java.lang.reflect.Field; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Date; + +/** + * @author YenHex + * @since 2023/7/2 + **/ +public class BeanFieldUtil { + + public static String toValueString(Object value, Field field){ + if(value==null){ + return null; + } + String dataClass = value.getClass().getName(); + if(dataClass.equals("java.util.Date")){ + //TODO 通过注解支持不同格式 + Date date = (Date) value; + SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); + return ft.format(date); + }else if (dataClass.equals("java.time.LocalDateTime")){ + LocalDateTime ldt = (LocalDateTime)value; + DateTimeFormatter dfDate = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"); + return dfDate.format(ldt); + } + return value.toString(); + } + + + +} diff --git a/src/main/java/com/demo/dto/util/JdbcExecutor.java b/src/main/java/com/demo/dto/util/JdbcExecutor.java new file mode 100644 index 0000000..b5d42fe --- /dev/null +++ b/src/main/java/com/demo/dto/util/JdbcExecutor.java @@ -0,0 +1,193 @@ +package com.demo.dto.util; + +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; +import lombok.extern.slf4j.Slf4j; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.sql.*; +import java.util.*; + +/** + * @author YenHex + * @since 2023/7/1 + **/ +@Slf4j +public class JdbcExecutor { + + private final boolean ONLY_PRINT = true; + + private HikariDataSource dataSource; + + public JdbcExecutor(String username, String password, String jdbcUrl){ + Properties properties = new Properties(); + properties.setProperty("jdbcUrl",jdbcUrl); + properties.setProperty("username",username); + properties.setProperty("password",password); + //properties.setProperty("driverClassName",""); + HikariConfig config = new HikariConfig(properties); + this.dataSource = new HikariDataSource(config); + } + + + /** + * + * @param sql + * @return 返回影响行数 + */ + public int execute(String sql){ + if(ONLY_PRINT){ + System.out.println(sql); + return 0; + } + int rows = 0; + try { + Connection conn = dataSource.getConnection(); + PreparedStatement pst = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); + rows = pst.executeUpdate(); + pst.close(); + } catch (SQLException throwables) { + throwables.printStackTrace(); + } + return rows; + } + + /** + * + * @param sql + * @return 返回ID + */ + public String executeInsert(String sql){ + if(ONLY_PRINT){ + System.out.println(sql); + return null; + } + String id = null; + try { + Connection conn = dataSource.getConnection(); + PreparedStatement pst = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); + pst.execute(); + ResultSet rs = pst.getGeneratedKeys(); + if (rs.next()) { + id = rs.getObject(1).toString(); + System.out.println("主键值为:" + id); + } + rs.close(); + pst.close(); + } catch (SQLException throwables) { + throwables.printStackTrace(); + } + return id; + } + + /** + * 返回单个值查询,如count + * @param sql + * @return + */ + public Object queryValue(String sql){ + if(ONLY_PRINT){ + System.out.println(sql); + return null; + } + Object result = null; + try { + Connection conn = dataSource.getConnection(); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery(sql); + if(rs.next()){ + result = rs.getObject(1); + } + stmt.close(); + rs.close(); + } catch (SQLException throwables) { + throwables.printStackTrace(); + } + return result; + } + + /** + * 返回单行对象 + * @param sql + * @return + */ + public T queryOne(String sql,Class clazz){ + if(ONLY_PRINT){ + System.out.println(sql); + return null; + } + try { + Connection conn = dataSource.getConnection(); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery(sql); + List list = resultSetToBean(rs,clazz); + stmt.close(); + rs.close(); + if(list.size()>1){ + log.warn("sql查询数据多于1 SQL:{}",sql); + }else if (list.size()<1){ + return null; + } + return list.get(0); + } catch (SQLException throwables) { + throwables.printStackTrace(); + } + return null; + } + + /** + * 返回单个值查询,如count + * @param sql + * @return + */ + public List queryList(String sql,Class clazz){ + if(ONLY_PRINT){ + System.out.println(sql); + return null; + } + try { + Connection conn = dataSource.getConnection(); + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery(sql); + List list = resultSetToBean(rs,clazz); + stmt.close(); + rs.close(); + return list; + } catch (SQLException throwables) { + throwables.printStackTrace(); + } + return new ArrayList<>(); + } + + + /** + * 返回实体列 + * @param resultSet + * @param beanClass + * @param + * @return + */ + public List resultSetToBean(ResultSet resultSet, Class beanClass){ + Field[] fields = beanClass.getDeclaredFields(); + List beanList = new ArrayList<>(); + if (resultSet != null) { + try { + while (resultSet.next()) { + T object = (T) beanClass.newInstance(); + for (Field field : fields) { + String fieldName = field.getName(); + Method setField = beanClass.getMethod("set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1), field.getType()); + setField.invoke(object,resultSet.getObject(fieldName.toUpperCase())); + } + beanList.add(object); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return beanList; + } + +} diff --git a/src/main/java/com/demo/dto/util/SqlBuilderUtil.java b/src/main/java/com/demo/dto/util/SqlBuilderUtil.java new file mode 100644 index 0000000..3ba3e21 --- /dev/null +++ b/src/main/java/com/demo/dto/util/SqlBuilderUtil.java @@ -0,0 +1,85 @@ +package com.demo.dto.util; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author YenHex + * @since 2023/6/30 + **/ +public class SqlBuilderUtil { + + public static String STRING_AND = " and "; + public static String STRING_SPLIT = " ,"; + public static String KH_LEFT = "("; + public static String KH_RIGHT = ")"; + + /** equal condition */ + public static String buildEqualCondition(Object object,String alia,String[] ignoreColumns){ + return SqlClazzStorage.commentBuild(object,alia,true,true,true,STRING_AND,ignoreColumns); + } + + /** delete sql */ + public static String buildDeleteSql(Class clazz){ + return "delete from "+SqlClazzStorage.getTableName(clazz)+" "; + } + + /** delete sql */ + public static String buildSelectCountSql(Class clazz){ + return "select count(1) from "+SqlClazzStorage.getTableName(clazz)+" "; + } + + /** select sql */ + public static String buildSelectSql(Class clazz,String table,String alia,String[] ignoreColumns){ + String aliaTemp = alia!=null?" "+alia+" " : " "; + return "select " + SqlClazzStorage.commentBuild(clazz,alia,STRING_SPLIT, ignoreColumns) + " from "+ + SqlClazzStorage.getTableName(clazz, table)+aliaTemp; + } + + /** update sql */ + public static String buildUpdateSql(Object object,String table){ + return "update "+SqlClazzStorage.getTableName(object, table)+" set "+ + SqlClazzStorage.commentBuild(object,null,true,true,true,STRING_SPLIT, + //忽略id + new String[]{"id"} + ); + } + + /** insert sql */ + public static String buildInsertSql(Object object,String table){ + return "insert into " + SqlClazzStorage.getTableName(object,table) + + buildInsertColumns(object,true) + + " values " + + buildInsertValues( object,true); + } + + public static String buildBatchInsertSql(List list,String table){ + Object object = list.get(0); + String sql = "insert into " + SqlClazzStorage.getTableName(object,table) + + buildInsertColumns(object,false) + + " values "; + for (Object obj : list) { + sql = sql + buildInsertValues(obj,false)+STRING_SPLIT; + } + return sql.substring(0,sql.length()-STRING_SPLIT.length()); + } + + /** insert columns */ + private static String buildInsertColumns(Object object,boolean ignoreNull){ + return KH_LEFT+ SqlClazzStorage.commentBuild(object,null,ignoreNull, true,false,STRING_SPLIT,null) +KH_RIGHT; + } + + /** insert values */ + private static String buildInsertValues(Object object,boolean ignoreNull){ + return KH_LEFT+ + SqlClazzStorage.commentBuild(object,null,ignoreNull,false,true,STRING_SPLIT,null) + +KH_RIGHT; + } + + /** in(...) values */ + public static String buildInSql(List sqlId) { + String ids = sqlId.stream().map(a->"'"+a.toString()+"'").collect(Collectors.joining(",")); + return "("+ids+")"; + } + +} diff --git a/src/main/java/com/demo/dto/util/SqlClazzStorage.java b/src/main/java/com/demo/dto/util/SqlClazzStorage.java new file mode 100644 index 0000000..1c932b8 --- /dev/null +++ b/src/main/java/com/demo/dto/util/SqlClazzStorage.java @@ -0,0 +1,170 @@ +package com.demo.dto.util; + +import cn.hutool.core.util.ReflectUtil; +import com.demo.dto.model.SqlColumn; +import com.demo.dto.model.SqlTable; +import com.demo.util.WordUtil; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Field; + +/** + * @author YenHex + * @since 2023/6/30 + **/ +public class SqlClazzStorage { + + public static String STRING_EQUAL = "="; + + /** 获取表名 */ + public static String getTableName(Object object,String table){ + if(table!=null&&table.length()>0){ + return table; + }else { + //通过反射获取表名 + Class clazz = object.getClass(); + String tableName = WordUtil.toLine(clazz.getSimpleName()); + SqlTable sqlTable = getSqlTable(clazz.getAnnotations()); + if(sqlTable!=null&&sqlTable.value().length()>0){ + tableName = WordUtil.toLine(sqlTable.value()); + } + return tableName; + } + } + + /** 获取表名 */ + public static String getTableName(Class clazz){ + //通过反射获取表名 + String tableName = WordUtil.toLine(clazz.getSimpleName()); + SqlTable sqlTable = getSqlTable(clazz.getAnnotations()); + if(sqlTable!=null&&sqlTable.value().length()>0){ + tableName = WordUtil.toLine(sqlTable.value()); + } + return tableName; + } + + /** + * + * @param object + * @param alia + * @param ignoreNull + * @param loadColumn + * @param loadValue + * @param split and 或者 , + * @return + */ + public static String commentBuild(Object object,String alia,boolean ignoreNull,boolean loadColumn, + boolean loadValue,String split,String[] ignoreColumns){ + Class clazz = object.getClass(); + Field[] fields = clazz.getDeclaredFields(); + StringBuffer sql = new StringBuffer(); + alia = alia==null?"":alia+"."; + split = split==null?"":split; + for (Field field : fields) { + String columnName = WordUtil.toLine(field.getName()); + SqlColumn sqlColumn = getSqlColumn(field); + if(sqlColumn!=null){ + if(sqlColumn.ignore()){ + continue; + } + if(!sqlColumn.value().equals("")){ + columnName = sqlColumn.value(); + } + } + if(ignoreColumns!=null){ + boolean isIgnore = false; + for (String ignoreColumn : ignoreColumns) { + if(columnName.equals(ignoreColumn)){ + isIgnore = true; + break; + } + } + if(isIgnore){ + continue; + } + } + Object objectVal = ReflectUtil.getFieldValue(object, field.getName()); + if(ignoreNull&&objectVal==null){ + continue; + } + if(loadColumn){ + sql.append(alia).append(columnName); + } + if(loadColumn&&loadValue){ + sql.append(STRING_EQUAL); + } + if(loadValue){ + if(objectVal==null){ + sql.append(BeanFieldUtil.toValueString(objectVal,field)); + }else { + sql.append("'").append(BeanFieldUtil.toValueString(objectVal,field)).append("'"); + } + } + sql.append(split); + } + String sqlTemp = sql.toString(); + return sqlTemp.substring(0,sqlTemp.length()-split.length()); + } + + /** + * + * @param clazz + * @param alia + * @param split and 或者 , + * @return + */ + public static String commentBuild(Class clazz,String alia,String split,String[] ignoreColumns){ + Field[] fields = clazz.getDeclaredFields(); + StringBuffer sql = new StringBuffer(); + alia = alia==null?"":alia+"."; + split = split==null?"":split; + for (Field field : fields) { + String columnName = WordUtil.toLine(field.getName()); + SqlColumn sqlColumn = getSqlColumn(field); + if(sqlColumn!=null){ + if(sqlColumn.ignore()){ + continue; + } + if(!sqlColumn.value().equals("")){ + columnName = sqlColumn.value(); + } + } + if(ignoreColumns!=null){ + boolean isIgnore = false; + for (String ignoreColumn : ignoreColumns) { + if(columnName.equals(ignoreColumn)){ + isIgnore = true; + break; + } + } + if(isIgnore){ + continue; + } + } + sql.append(alia).append(columnName).append(split); + } + String sqlTemp = sql.toString(); + return sqlTemp.substring(0,sqlTemp.length()-split.length()); + } + + + private static SqlTable getSqlTable(Annotation[] annotations){ + for (Annotation annotation : annotations) { + if(annotation instanceof SqlTable){ + return (SqlTable)annotation; + } + } + return null; + } + + private static SqlColumn getSqlColumn(Field field){ + Annotation[] annotations = field.getAnnotations(); + for (Annotation annotation : annotations) { + if(annotation instanceof SqlColumn){ + return (SqlColumn)annotation; + } + } + return null; + } + +} diff --git a/src/main/java/com/demo/dto/util/SqlOptionContext.java b/src/main/java/com/demo/dto/util/SqlOptionContext.java new file mode 100644 index 0000000..425f34c --- /dev/null +++ b/src/main/java/com/demo/dto/util/SqlOptionContext.java @@ -0,0 +1,59 @@ +package com.demo.dto.util; + +import java.util.List; + +/** + * 原生JDBC工具类 + * @author JcYen + * @date 2021/6/4 + */ +public class SqlOptionContext{ + + private String sql; + + private JdbcExecutor jdbcExecutor; + + public SqlOptionContext(String sql,JdbcExecutor jdbcExecutor){ + this.sql = sql; + this.jdbcExecutor = jdbcExecutor; + } + + public String getString(){ + Object obj = jdbcExecutor.queryValue(sql); + if(obj!=null){ + return obj.toString(); + } + return null; + } + + public Integer getInt(){ + Object obj = jdbcExecutor.queryValue(sql); + if(obj!=null){ + return Integer.parseInt(obj.toString()); + } + return null; + } + + public T getOne(Class objectClass){ + return jdbcExecutor.queryOne(sql,objectClass); + } + + public List getList(Class objectClass){ + return jdbcExecutor.queryList(sql,objectClass); + } + + public String printBean(){ + //根据SQL打印Bean字段 + return null; + } + + public String printMySql(){ + //根据SQL打印Bean字段 + return null; + } + + public int execute(){ + return jdbcExecutor.execute(sql); + } + +} diff --git a/src/main/java/com/demo/jsl/InitBudgetSchedule.java b/src/main/java/com/demo/jsl/InitBudgetSchedule.java new file mode 100644 index 0000000..4a8d053 --- /dev/null +++ b/src/main/java/com/demo/jsl/InitBudgetSchedule.java @@ -0,0 +1,196 @@ +package com.demo.jsl; + +import com.demo.jsl.entity.schedule.TbsSchedule; +import com.demo.jsl.entity.schedule.TbsScheduleItem; +import lombok.SneakyThrows; +import org.junit.Test; +import org.noear.wood.DbContext; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.temporal.TemporalAdjusters; + +/** + * @author YenHex + * @since 2023/2/16 + */ +public class InitBudgetSchedule { + + public DbContext getJslDbContext() { + return new DbContext("test", "jdbc:mysql://192.168.0.9:3306/jsl_mall_qs_dev?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true", "kpjsl", "123456"); + } + + @Test + @SneakyThrows + public void init() { + int year = 2023; + DbContext jslDb = getJslDbContext(); + initMonth(year, jslDb, "(测试)", true); + initSeason(year, jslDb, "(测试)", true); + initYear(year, jslDb, "(测试)"); + } + + @SneakyThrows + public void initMonth(Integer year, DbContext jslDb, String prefix, boolean split) { + String tenantId = "001"; + Long startId = jslDb.sql("select count(1) from tbs_schedule").getCount() + 1; + if (split) { + for (int i = 1; i < 13; i++) { + long id = startId + i - 1; + String code = "Y" + year + "M" + i; + String name = prefix + year + "年" + getNumStr(i) + "月"; + //全年预算 + TbsSchedule schedule = new TbsSchedule(); + schedule.setId(id); + schedule.setCode(code); + schedule.setName(name); + schedule.setRemark(name); + schedule.setTenantId(tenantId); + jslDb.table("tbs_schedule").setEntity(schedule).insert(); + + TbsScheduleItem scheduleItem = new TbsScheduleItem(); + scheduleItem.setScheduleId(id); + scheduleItem.setItemName(code); + scheduleItem.setStartDate(getMonthFirstDate(year, i)); + scheduleItem.setEndDate(getMonthLastDate(year, i)); + scheduleItem.setTenantId("001"); + jslDb.table("tbs_schedule_item").setEntity(scheduleItem).insert(); + } + } else { + //全年预算 + TbsSchedule schedule = new TbsSchedule(); + schedule.setId(startId); + schedule.setCode("Y" + year + "M"); + schedule.setName(prefix + year + "全年各月"); + schedule.setRemark(prefix + year + "全年各月"); + schedule.setTenantId(tenantId); + jslDb.table("tbs_schedule").setEntity(schedule).insert(); + for (int i = 1; i < 13; i++) { + TbsScheduleItem scheduleItem = new TbsScheduleItem(); + scheduleItem.setScheduleId(startId); + scheduleItem.setItemName("Y" + year + "M" + i); + scheduleItem.setStartDate(getMonthFirstDate(year, i)); + scheduleItem.setEndDate(getMonthLastDate(year, i)); + scheduleItem.setTenantId("001"); + jslDb.table("tbs_schedule_item").setEntity(scheduleItem).insert(); + } + } + } + + @SneakyThrows + public void initYear(Integer year, DbContext jslDb, String prefix) { + String tenantId = "001"; + Long startId = jslDb.sql("select count(1) from tbs_schedule").getCount() + 1; + //全年预算 + TbsSchedule schedule = new TbsSchedule(); + schedule.setId(startId); + schedule.setCode("Y" + year); + schedule.setName(prefix + year + "年全年"); + schedule.setRemark(prefix + year + "年全年"); + schedule.setTenantId(tenantId); + jslDb.table("tbs_schedule").setEntity(schedule).insert(); + TbsScheduleItem scheduleItem = new TbsScheduleItem(); + scheduleItem.setScheduleId(startId); + scheduleItem.setItemName("Y" + year); + scheduleItem.setStartDate(getMonthFirstDate(year, 1)); + scheduleItem.setEndDate(getMonthLastDate(year, 12)); + scheduleItem.setTenantId("001"); + jslDb.table("tbs_schedule_item").setEntity(scheduleItem).insert(); + + } + + @SneakyThrows + public void initSeason(Integer year, DbContext jslDb, String prefix, boolean split) { + String tenantId = "001"; + Long startId = jslDb.sql("select count(id) from tbs_schedule").getCount() + 1; + if (split) { + for (int i = 1; i <= 4; i++) { + Long id = startId + i - 1; + //全年预算 + TbsSchedule schedule = new TbsSchedule(); + String code = "Y" + year + "Q" + i; + String numStr = this.getNumStr(i); + String name = prefix + year + "年第" + numStr + "季度"; + schedule.setId(id); + schedule.setCode(code); + schedule.setName(name); + schedule.setRemark(name); + schedule.setTenantId(tenantId); + jslDb.table("tbs_schedule").setEntity(schedule).insert(); + + TbsScheduleItem scheduleItem = new TbsScheduleItem(); + scheduleItem.setScheduleId(id); + scheduleItem.setItemName(code); + int startMonth = (i - 1) * 3 + 1; + int endMonth = i * 3; + scheduleItem.setStartDate(getMonthFirstDate(year, startMonth)); + scheduleItem.setEndDate(getMonthLastDate(year, endMonth)); + scheduleItem.setTenantId("001"); + jslDb.table("tbs_schedule_item").setEntity(scheduleItem).insert(); + } + } else { + //全年预算 + TbsSchedule schedule = new TbsSchedule(); + schedule.setId(startId); + schedule.setCode("Y" + year + "Q"); + schedule.setName(prefix + year + "全年四季"); + schedule.setRemark(prefix + year + "全年四季"); + schedule.setTenantId(tenantId); + jslDb.table("tbs_schedule").setEntity(schedule).insert(); + for (int i = 1; i <= 4; i++) { + String code = "Y" + year + "Q" + i; + String numStr = this.getNumStr(i); + //String name = prefix+year+"年第"+numStr+"季度"; + TbsScheduleItem scheduleItem = new TbsScheduleItem(); + scheduleItem.setScheduleId(startId); + scheduleItem.setItemName(code); + int startMonth = (i - 1) * 3 + 1; + int endMonth = i * 3; + scheduleItem.setStartDate(getMonthFirstDate(year, startMonth)); + scheduleItem.setEndDate(getMonthLastDate(year, endMonth)); + scheduleItem.setTenantId("001"); + jslDb.table("tbs_schedule_item").setEntity(scheduleItem).insert(); + } + } + } + + + private String getNumStr(int i) { + String numStr = ""; + if (i == 1) { + numStr = "一"; + } else if (i == 2) { + numStr = "二"; + } else if (i == 3) { + numStr = "三"; + } else if (i == 4) { + numStr = "四"; + } else if (i == 5) { + numStr = "五"; + } else if (i == 6) { + numStr = "六"; + } else if (i == 7) { + numStr = "七"; + } else if (i == 8) { + numStr = "八"; + } else if (i == 9) { + numStr = "九"; + } else if (i == 10) { + numStr = "十"; + } else if (i == 11) { + numStr = "十一"; + } else if (i == 12) { + numStr = "十二"; + } + return numStr; + } + + private LocalDateTime getMonthFirstDate(Integer year, Integer month) { + return LocalDate.of(year, month, 1).atStartOfDay(); + } + + private LocalDateTime getMonthLastDate(Integer year, Integer month) { + return LocalDate.of(year, month, 1).with(TemporalAdjusters.lastDayOfMonth()).atTime(23, 59, 59); + } + +} diff --git a/src/main/java/com/demo/jsl/ServiceMain.java b/src/main/java/com/demo/jsl/ServiceMain.java new file mode 100644 index 0000000..8d01f8b --- /dev/null +++ b/src/main/java/com/demo/jsl/ServiceMain.java @@ -0,0 +1,290 @@ +package com.demo.jsl; + +import com.demo.jsl.entity.channel.*; +import com.demo.jsl.entity.region.JslRegion; +import com.demo.jsl.entity.region.XltDealerArea; +import com.demo.jsl.entity.region.XltDealerCity; +import com.demo.jsl.entity.region.XltDealerProvince; +import com.demo.jsl.entity.supplier.JslSupplier; +import com.demo.jsl.entity.supplier.XltSupplier; +import com.demo.jsl.entity.supplier.dto.XltSupplierEmp; +import lombok.SneakyThrows; +import org.junit.Test; +import org.noear.wood.DbContext; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author YenHex + * @since 2023/1/9 + */ +public class ServiceMain { + + public DbContext getJslDbContext() { + return new DbContext("test", "jdbc:mysql://192.168.0.9:3306/jsl_mall_qs_dev2?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true", "kpjsl", "123456"); + } + + public DbContext getXltDbContext() { + return new DbContext("xlt", "jdbc:sqlserver://rm-wz93l107hc277n9ieco.sqlserver.rds.aliyuncs.com:3433;DatabaseName=xiaolutong", "qs_db_user", "Aa135246"); + } + + public DbContext getSeeYonDbContext() { + return new DbContext("oa", "jdbc:sqlserver://192.168.10.157:1433;DatabaseName=OAdata", "sa", "JSL2282125"); + } + + + @Test + public void syncChannel() throws Exception { + DbContext jslDb = getJslDbContext(); + DbContext xltDb = getXltDbContext(); + List quDaoOneList = xltDb + .sql("select id,name from emp_quDaoOne") + .getList(XltQuDaoOne.class); + List quDaoTwoList = xltDb + .sql("select id,name,shangji pid from emp_quDaotwo") + .getList(XltQuDaoTwo.class); + List regionList = jslDb.sql("select id,path_ids,path_names from bms_region2 where level = '3'").getList(JslRegion.class); + String prefix = "CH"; + long channelId = 100; + Map channelMap = new HashMap<>(); + for (XltQuDaoTwo quDaoTwo : quDaoTwoList) { + XltQuDaoOne quDaoOneTmp = null; + for (XltQuDaoOne quDaoOne : quDaoOneList) { + if (quDaoOne.getId().equals(quDaoTwo.getPid())) { + quDaoOneTmp = quDaoOne; + break; + } + } + JslChannel channel = new JslChannel(); + channel.setId(channelId); + channel.setChannelCode(prefix + channelId); + channel.setChannelName(quDaoTwo.getName()); + if (quDaoOneTmp != null) { + channel.setChannelType(quDaoOneTmp.getName()); + } else { + channel.setChannelType("其他渠道"); + } + channel.setTenantId("001"); + jslDb.table("bms_channel").setEntity(channel).insert(); + channelMap.put(quDaoTwo.getId(), channel); + channelId++; + } + String wdSql = "select wd.id,wd.name,wd.number_ code,wd.cid city_id,ds.quDaoTwo channel_id,ek" + + ".name type ,lv.WDLevelName level_name,wd.address " + + " from WangDian wd" + + " LEFT JOIN DealerSystem as ds ON wd.sysId = ds.id" + + " LEFT JOIN emp_keHuType as ek ON ds.keHuType = ek.id" + + " LEFT JOIN WDLevel as lv ON wd.wdLevel = lv.id"; + List wangDianList = xltDb + .sql(wdSql) + .getList(XltWangDian.class); + for (XltWangDian wangDian : wangDianList) { + JslChannel channel = channelMap.get(wangDian.getChannelId()); + if (channel == null) { + continue; + } + JslChannelPoint point = new JslChannelPoint(); + point.setChannelId(channel.getId()); + point.setChannelName(channel.getChannelName()); + point.setPointCode(wangDian.getCode()); + point.setPointName(wangDian.getName()); + point.setPointType(wangDian.getType()); + point.setAddress(wangDian.getAddress()); + point.setPointLevel(wangDian.getLevelName()); + point.setTenantId("001"); + for (JslRegion jslRegion : regionList) { + if (jslRegion.getId().equals(wangDian.getCityId())) { + point.setBizRegionPathIds(jslRegion.getPathIds()); + point.setBizRegionPath(jslRegion.getPathNames()); + break; + } + } + jslDb.table("bms_channel_point").setEntity(point).insert(); + } + } + + @Test + public void syncCustomer() throws Exception { + DbContext jslDb = getJslDbContext(); + DbContext xltDb = getXltDbContext(); + String sql = + "select d1.id,dealerName name,dealerNumber code,address,aid area_id,pid province_id,cid city_id " + + "from DealerConnTable d1 " + + "left join DealerCity d2 on d1.cid = d2.id " + + "left join DealerProvince d3 on d2.pid = d3.id " + + "left join DealerArea d4 on d3.aid = d4.id where d1.id in()"; + System.out.println(sql); + List xltSupplierList = xltDb + .sql(sql) + .getList(XltSupplier.class); + for (XltSupplier xltSupplier : xltSupplierList) { + JslSupplier jslSupplier = new JslSupplier(); + //jslSupplier.setId(supplierId); + //TODO: this is error ids +// jslSupplier.setRegionFirst(xltSupplier.getAreaId()); +// jslSupplier.setRegionSecond(xltSupplier.getProvinceId()); +// jslSupplier.setRegionThird(xltSupplier.getCityId()); +// jslSupplier.setRegionLast(xltSupplier.getCityId()); +// jslSupplier.setRegion2First(xltSupplier.getAreaId()); +// jslSupplier.setRegion2Second(xltSupplier.getProvinceId()); +// jslSupplier.setRegion2Third(xltSupplier.getCityId()); +// jslSupplier.setRegion2Last(xltSupplier.getCityId()); + jslSupplier.setAddress(xltSupplier.getAddress()); + jslSupplier.setName(xltSupplier.getName()); + jslSupplier.setCode(xltSupplier.getCode()); + jslSupplier.setPid("0"); + jslSupplier.setTenantId("001"); + jslSupplier.setXltId(xltSupplier.getId()); + jslDb.table("bms_supplier").setEntity(jslSupplier).insert(); + } + } + + @Test + @SneakyThrows + public void syncErrSupplierId() { + DbContext jslDb = getJslDbContext(); + DbContext xltDb = getXltDbContext(); + List jslRegions = jslDb.sql("select * from bms_region where del_flag=0").getList(JslRegion.class); + + String jslSupplierSql = "SELECT " + + " id,xlt_id xltid2," + + " region_first,region_second,region_third,region_last " + + " FROM " + + " `bms_supplier` " + + " where " + + " xlt_id is not null and length(region_first)>30"; + String xlt_sql = "SELECT " + + " d1.id, " + + " emp.name emp_name " + + " FROM " + + " DealerConnTable d1 " + + " LEFT JOIN DealerCity d2 ON d1.cid = d2.id " + + " LEFT JOIN DealerProvince d3 ON d2.pid = d3.id " + + " LEFT JOIN Employee emp ON emp.id = d3.shengP " + + " where d1.id ="; + List supplierList = jslDb.sql(jslSupplierSql).getList(JslSupplier.class); + for (JslSupplier supplier : supplierList) { + XltSupplierEmp supplierEmp = xltDb.sql(xlt_sql + "'" + supplier.getXltid2() + "'").getItem(XltSupplierEmp.class); + String emp_name = supplierEmp.getEmpName(); + if (emp_name != null) { + for (JslRegion jslRegion : jslRegions) { + if(emp_name.contains(jslRegion.getName())){ + String[] ids = jslRegion.getPathIds().split("_"); + if(ids.length==3){ + supplier.setRegionFirst(ids[0]); + supplier.setRegionSecond(ids[1]); + supplier.setRegionThird(ids[2]); + supplier.setRegionLast(ids[2]); + }else if(ids.length==2){ + supplier.setRegionFirst(ids[0]); + supplier.setRegionSecond(ids[1]); + supplier.setRegionThird("0"); + supplier.setRegionLast(ids[1]); + }else{ + supplier.setRegionFirst(ids[0]); + supplier.setRegionSecond("0"); + supplier.setRegionThird("0"); + supplier.setRegionLast(ids[0]); + } + } + } + if(supplier.getRegionFirst().length()<30){ + supplier.setXltid2(null); + jslDb.table("bms_supplier").setEntity(supplier).updateBy("id"); + }else { + supplier.setRegionFirst("0"); + supplier.setRegionSecond("0"); + supplier.setRegionThird("0"); + supplier.setRegionLast("0"); + supplier.setXltid2(null); + jslDb.table("bms_supplier").setEntity(supplier).updateBy("id"); + } + } + } + jslDb.close(); + xltDb.close(); + } + + + @Test + public void syncRegion() throws Exception { + String table = "bms_region"; + DbContext jslDb = getJslDbContext(); + DbContext xltDb = getXltDbContext(); + List areaList = xltDb.sql("select id,area from DealerArea").getList(XltDealerArea.class); + List provinceList = xltDb.sql("select id,province,aid from DealerProvince").getList(XltDealerProvince.class); + List cityList = xltDb.sql("select id,city,pid from DealerCity ").getList(XltDealerCity.class); + long regionId = 1000L; + for (XltDealerArea area : areaList) { + JslRegion region = new JslRegion(); + region.setId(area.getId()); + region.setName(area.getArea()); + region.setCode("AE" + regionId); + region.setPid("0"); + region.setLevel(1); + region.setPathIds(area.getId()); + region.setPathNames(area.getArea()); + region.setTenantId("001"); + jslDb.table(table).setEntity(region).insert(); + regionId++; + } + for (XltDealerProvince province : provinceList) { + XltDealerArea currArea = null; + for (XltDealerArea area : areaList) { + if (province.getAid().equals(area.getId())) { + currArea = area; + break; + } + } + if (currArea == null) { + System.out.println("province的Area为空:" + province.getId() + " " + province.getProvince()); + continue; + } + JslRegion region = new JslRegion(); + region.setId(province.getId()); + region.setName(province.getProvince()); + region.setCode("PV" + regionId); + region.setPid(province.getAid()); + region.setLevel(2); + String pathIds = currArea.getId() + "_" + province.getId(); + String pathNames = currArea.getArea() + "_" + province.getProvince(); + province.setTempIds(pathIds); + province.setTempNames(pathNames); + region.setPathIds(pathIds); + region.setPathNames(pathNames); + region.setTenantId("001"); + jslDb.table(table).setEntity(region).insert(); + regionId++; + } + for (XltDealerCity city : cityList) { + XltDealerProvince currProvince = null; + for (XltDealerProvince province : provinceList) { + if (city.getPid().equals(province.getId())) { + currProvince = province; + break; + } + } + if (currProvince == null) { + System.out.println("city的currProvince为空:" + city.getId() + " " + city.getCity()); + continue; + } + JslRegion region = new JslRegion(); + region.setId(city.getId()); + region.setName(city.getCity()); + region.setCode("CT" + regionId); + region.setPid(city.getPid()); + region.setLevel(3); + String pathIds = currProvince.getTempIds() + "_" + city.getId(); + String pathNames = currProvince.getTempNames() + "_" + city.getCity(); + region.setPathIds(pathIds); + region.setPathNames(pathNames); + region.setTenantId("001"); + jslDb.table(table).setEntity(region).insert(); + regionId++; + } + } + + +} diff --git a/src/main/java/com/demo/jsl/ServiceMain2.java b/src/main/java/com/demo/jsl/ServiceMain2.java new file mode 100644 index 0000000..c514ac0 --- /dev/null +++ b/src/main/java/com/demo/jsl/ServiceMain2.java @@ -0,0 +1,33 @@ +package com.demo.jsl; + +import org.noear.wood.DbContext; + +/** + * @author YenHex + * @since 2023/2/9 + */ +public class ServiceMain2 { + + final String EmptyString = ""; + final String TENANT_ID = "001"; + + DbContext jslCtx; + DbContext xltCtx; + + public DbContext getJslDbContext() { + if (jslCtx == null) { + jslCtx = new DbContext("test", "jdbc:mysql://192.168.0.9:3306/jsl_mall_qs_dev?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true", "kpjsl", "123456"); + } + return jslCtx; + } + + public DbContext getXltDbContext() { + if (xltCtx == null) { + //return new DbContext("xlt","jdbc:sqlserver://rm-wz93l107hc277n9ieco.sqlserver.rds.aliyuncs.com:3433;DatabaseName=ceshi","qs_db_user","Aa135246"); + xltCtx = new DbContext("xlt", "jdbc:sqlserver://rm-wz93l107hc277n9ieco.sqlserver.rds.aliyuncs.com:3433;DatabaseName=xiaolutong", "qs_db_user", "Aa135246"); + } + return xltCtx; + } + + +} diff --git a/src/main/java/com/demo/jsl/ServiceOld.java b/src/main/java/com/demo/jsl/ServiceOld.java new file mode 100644 index 0000000..d8de4d3 --- /dev/null +++ b/src/main/java/com/demo/jsl/ServiceOld.java @@ -0,0 +1,57 @@ +package com.demo.jsl; + +import com.demo.jsl.entity.dept.JslDept; +import com.demo.jsl.entity.dept.XltDept; +import org.noear.wood.DbContext; + +import java.util.List; + +/** + * @author YenHex + * @since 2023/1/10 + */ +public class ServiceOld { + + public DbContext getJslDbContext() { + return new DbContext("test", "jdbc:mysql://192.168.0.9:3306/jsl_mall_qs_test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true", "kpjsl", "123456"); + } + + public DbContext getXltDbContext() { + return new DbContext("xlt", "jdbc:sqlserver://rm-wz93l107hc277n9ieco.sqlserver.rds.aliyuncs.com:3433;DatabaseName=ceshi", "qs_db_user", "Aa135246"); + } + + public DbContext getSeeYonDbContext() { + return new DbContext("oa", "jdbc:sqlserver://192.168.10.7:1433;DatabaseName=OAdata", "sa", "JSL2282125"); + } + + + @Deprecated + public void syncDept() throws Exception { + DbContext jslDb = getJslDbContext(); + DbContext xltDb = getXltDbContext(); + List deptList = xltDb + .sql("select id,deptName name,superId pid,supervisor uid ,isSellDept sell_flag from department") + .getList(XltDept.class); + String prefix = "D"; + String prefix2 = "S"; + int codeIdx = 100; + for (XltDept xltDept : deptList) { + codeIdx++; + String codePre; + if (xltDept.getSellFlag() == null || xltDept.getSellFlag().equals(0)) { + codePre = prefix; + } else { + codePre = prefix2; + } + JslDept dept = new JslDept(); + dept.setId(xltDept.getId()); + dept.setName(xltDept.getName()); + dept.setCode(codePre + codeIdx); + dept.setParentId(xltDept.getPid() == null ? "0" : xltDept.getPid()); + dept.setMgrUserId(xltDept.getUid()); + dept.setTenantId("001"); + jslDb.table("sys_dept").setEntity(dept).insert(); + } + } + +} diff --git a/src/main/java/com/demo/jsl/entity/cate/JslGoodsCategory.java b/src/main/java/com/demo/jsl/entity/cate/JslGoodsCategory.java new file mode 100644 index 0000000..70608fa --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/cate/JslGoodsCategory.java @@ -0,0 +1,53 @@ +package com.demo.jsl.entity.cate; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/9 + */ +@Data +public class JslGoodsCategory { + + private Long id; + + private String xltId; + + /** + * (1:开启;0:关闭) + */ + private Integer enable; + + private String code; + + /** + * 父分类编号 + */ + private Long parentId; + + /** + * 名称 + */ + private String name; + + /** + * 排序 + */ + private Integer level; + + /** + * 等级路径id + */ + private String levelPath; + + /** + * 等级路径 + */ + private String levelPathNames; + + /** + * 所属租户 + */ + private String tenantId; + +} diff --git a/src/main/java/com/demo/jsl/entity/cate/XltGoodsCategory.java b/src/main/java/com/demo/jsl/entity/cate/XltGoodsCategory.java new file mode 100644 index 0000000..7c38998 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/cate/XltGoodsCategory.java @@ -0,0 +1,20 @@ +package com.demo.jsl.entity.cate; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/9 + */ +@Data +public class XltGoodsCategory { + + private String id; + private Integer level; + private String name; + private String pid; + private String code; + private Long tempId; + private Integer sival; + +} diff --git a/src/main/java/com/demo/jsl/entity/channel/BmsMasterUser.java b/src/main/java/com/demo/jsl/entity/channel/BmsMasterUser.java new file mode 100644 index 0000000..c2de60c --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/channel/BmsMasterUser.java @@ -0,0 +1,82 @@ +package com.demo.jsl.entity.channel; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/4/18 + */ +@Data +public class BmsMasterUser { + + /** + * id + */ + private Long id; + + /** + * 类型:channel、point、center + */ + private String type; + + /** + * 目标id + */ + private String targetId; + + /** + * 用户id + */ + private String userId; + + /** + * 主要负责人 + */ + private Integer masterFlag; + + /** + * 渠道 + */ + private String channelName; + + /** + * 渠道 + */ + private String channelCode; + + /** + * 网点 + */ + private String pointName; + + /** + * 网点 + */ + private String pointCode; + + /** + * 用户 + */ + private String userCode; + + /** + * 用户 + */ + private String userName; + + /** + * 成本中心 + */ + private String centerCode; + + /** + * 成本中心 + */ + private String centerName; + + /** + * 备注 + */ + private String remark; + +} diff --git a/src/main/java/com/demo/jsl/entity/channel/JslChannel.java b/src/main/java/com/demo/jsl/entity/channel/JslChannel.java new file mode 100644 index 0000000..11f92a9 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/channel/JslChannel.java @@ -0,0 +1,44 @@ +package com.demo.jsl.entity.channel; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/11 + */ +@Data +public class JslChannel { + + /** + * id + */ + private Long id; + + /** + * 渠道编码 + */ + private String channelCode; + + /** + * 渠道名称 + */ + private String channelName; + + /** + * 渠道类型(读取数据字典) + */ + private String channelType; + + /** + * 备注 + */ + private String remark; + + + /** + * 所属租户 + */ + private String tenantId; + + +} diff --git a/src/main/java/com/demo/jsl/entity/channel/JslChannelPoint.java b/src/main/java/com/demo/jsl/entity/channel/JslChannelPoint.java new file mode 100644 index 0000000..ede9987 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/channel/JslChannelPoint.java @@ -0,0 +1,96 @@ +package com.demo.jsl.entity.channel; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/11 + */ +@Data +public class JslChannelPoint { + + String shopArea; + Integer countCheckstand; + /** + * id + */ + private Long id; + /** + * 渠道名称 + */ + private Long channelId; + private String channelName; + /** + * 站点编码 + */ + private String pointCode; + /** + * 站点名称 + */ + private String pointName; + /** + * 站点等级(读取字典值) + */ + private String pointLevel; + /** + * 站点类型(读取字典值) + */ + private String pointType; + /** + * 详细地址 + */ + private String address; + /** + * 销售区域id + */ + private String saleRegionId; + /** + * 销售区域 + */ + private String saleRegionPath; + private String saleRegionPathIds; + /** + * 行政区域id + */ + private String bizRegionId; + /** + * 行政区域 + */ + private String bizRegionPath; + private String bizRegionPathIds; + /** + * 备注 + */ + private String remark; + private String mapAddress; + /** + * 所属租户 + */ + private String tenantId; + + public static JslChannelPoint toNewObject(JslChannelSourcePoint source) { + JslChannelPoint channelPoint = new JslChannelPoint(); +// channelPoint.setChannelId(source.getChannelId()); +// channelPoint.setChannelName(source.getChannelName()); + channelPoint.setPointCode(source.getPointCode()); + channelPoint.setPointName(source.getPointName()); + channelPoint.setShopArea(source.getShopArea()); + if (source.getCountCheckstand() != null) { + Integer s = Integer.parseInt(source.getCountCheckstand()); + channelPoint.setCountCheckstand(s); + } + channelPoint.setPointLevel(source.getPointLevel()); + channelPoint.setPointType(source.getPointType()); + channelPoint.setAddress(source.getAddress()); +// channelPoint.setSaleRegionId(source.getSaleRegionId()); +// channelPoint.setSaleRegionPath(source.getSaleRegionPath()); +// channelPoint.setSaleRegionPathIds(source.getSaleRegionPathIds()); +// channelPoint.setBizRegionId(source.getBizRegionId()); +// channelPoint.setBizRegionPath(source.getBizRegionPath()); +// channelPoint.setBizRegionPathIds(source.getBizRegionPathIds()); + channelPoint.setMapAddress(source.getMapAddress()); + channelPoint.setTenantId("001"); + return channelPoint; + } + +} diff --git a/src/main/java/com/demo/jsl/entity/channel/JslChannelSourcePoint.java b/src/main/java/com/demo/jsl/entity/channel/JslChannelSourcePoint.java new file mode 100644 index 0000000..30e2e4f --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/channel/JslChannelSourcePoint.java @@ -0,0 +1,57 @@ +package com.demo.jsl.entity.channel; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/11 + */ +@Data +public class JslChannelSourcePoint { + + String shopArea; + String countCheckstand; + private Integer id; + private String channelCode; + /** + * 站点编码 + */ + private String pointCode; + /** + * 站点名称 + */ + private String pointName; + /** + * 站点等级(读取字典值) + */ + private String pointLevel; + + /** + * 站点类型(读取字典值) + */ + private String pointType; + + /** + * 详细地址 + */ + private String address; + + private String mapAddress; + + private String provinceUser; + + private String cityUser; + + private String saleRegion; + + private String saleRegionMgr; + + private String pointUser; + + private String provinceName; + + private String cityName; + + private String areaName; + +} diff --git a/src/main/java/com/demo/jsl/entity/channel/JslPointUser.java b/src/main/java/com/demo/jsl/entity/channel/JslPointUser.java new file mode 100644 index 0000000..41f2eeb --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/channel/JslPointUser.java @@ -0,0 +1,16 @@ +package com.demo.jsl.entity.channel; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/4/13 + */ +@Data +public class JslPointUser { + + private String type; + private String targetId; + private String userId; + private String tenantId; +} diff --git a/src/main/java/com/demo/jsl/entity/channel/SupplierMgr.java b/src/main/java/com/demo/jsl/entity/channel/SupplierMgr.java new file mode 100644 index 0000000..48d97c7 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/channel/SupplierMgr.java @@ -0,0 +1,10 @@ +package com.demo.jsl.entity.channel; + +import lombok.Data; + +@Data +public class SupplierMgr { + String name; + String code; + String otherUserIds; +} diff --git a/src/main/java/com/demo/jsl/entity/channel/XltQuDaoOne.java b/src/main/java/com/demo/jsl/entity/channel/XltQuDaoOne.java new file mode 100644 index 0000000..6d6923e --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/channel/XltQuDaoOne.java @@ -0,0 +1,13 @@ +package com.demo.jsl.entity.channel; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/11 + */ +@Data +public class XltQuDaoOne { + String id; + String name; +} diff --git a/src/main/java/com/demo/jsl/entity/channel/XltQuDaoTwo.java b/src/main/java/com/demo/jsl/entity/channel/XltQuDaoTwo.java new file mode 100644 index 0000000..91e77c1 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/channel/XltQuDaoTwo.java @@ -0,0 +1,14 @@ +package com.demo.jsl.entity.channel; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/11 + */ +@Data +public class XltQuDaoTwo { + String id; + String name; + String pid; +} diff --git a/src/main/java/com/demo/jsl/entity/channel/XltWangDian.java b/src/main/java/com/demo/jsl/entity/channel/XltWangDian.java new file mode 100644 index 0000000..b30f72f --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/channel/XltWangDian.java @@ -0,0 +1,21 @@ +package com.demo.jsl.entity.channel; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/11 + */ +@Data +public class XltWangDian { + + String id; + String name; + String code; + String cityId; + String channelId; + String type; + String levelName; + String address; + +} diff --git a/src/main/java/com/demo/jsl/entity/costapply/JslActivity.java b/src/main/java/com/demo/jsl/entity/costapply/JslActivity.java new file mode 100644 index 0000000..f568237 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/costapply/JslActivity.java @@ -0,0 +1,133 @@ +package com.demo.jsl.entity.costapply; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 费用活动 实体类 + * + * @author YenHex + * @since 2022-11-08 + */ +@Data +public class JslActivity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private Long id; + + /** + * 编码 + */ + private String activityCode; + + /** + * 活动状态:0-待核销;1-审批中;2-完成;3-冻结;4-已释放 + */ + private Integer activityState; + + /** + * 费用申请id + */ + private Long costApplyId; + + /** + * 费用通过时间 + */ + private Date costPassTime; + + /** + * 费用通过标识,用于已申请费用活动列表 + */ + private Integer costPassFlag; + + /** + * 活动简述及目的 + */ + private String actTitle; + + /** + * 客户id + */ + private Long supplierId; + + /** + * 客户编码 + */ + private String supplierCode; + + /** + * 客户名称 + */ + private String supplierName; + + /** + * 活动开始时间 + */ + private Date actStartDate; + + /** + * 活动结束时间 + */ + private Date actEndDate; + + /** + * 预算开始时间 + */ + private Date preStartDate; + + /** + * 预算结束时间 + */ + private Date preEndDate; + + /** + * 预计核销时间 + */ + private Date preCheckDate; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 所属租户 + */ + private String tenantId; + + /** + * 完成标识 + */ + private Integer finishedFlag; + + /** + * 完成时间 + */ + private Date finishedTime; + + /** + * 合计金额 + */ + private BigDecimal totalAmount; + + /** + * 使用金额 + */ + private BigDecimal usedAmount; + + private String xltId; + +} + diff --git a/src/main/java/com/demo/jsl/entity/costapply/JslActivityCenter.java b/src/main/java/com/demo/jsl/entity/costapply/JslActivityCenter.java new file mode 100644 index 0000000..cb1decb --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/costapply/JslActivityCenter.java @@ -0,0 +1,99 @@ +package com.demo.jsl.entity.costapply; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 活动成本中心项 实体类 + * + * @author YenHex + * @since 2022-11-09 + */ +@Data +public class JslActivityCenter implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private Long id; + + /** + * 费用申请id + */ + private Long costApplyId; + + /** + * 活动id + */ + private Long activityId; + + /** + * 科目id + */ + private Long subjectId; + + /** + * 费用额度 + */ + private BigDecimal centerRate; + + /** + * 费用额度 + */ + private BigDecimal centerAmount; + + private BigDecimal usedAmount; + + /** + * 成本中心类型 + * center, + * customer, + * dept, + * bizRegion, + * saleRegion, + * saleman + */ + private String centerType; + + /** + * 成本中心id + */ + private String centerId; + + /** + * 成本中心编码 + */ + private String centerCode; + + /** + * 成本中心名称 + */ + private String centerName; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 最后更新时间 + */ + private LocalDateTime updateTime; + + /** + * 所属租户 + */ + private String tenantId; + +} + diff --git a/src/main/java/com/demo/jsl/entity/costapply/JslActivityCenterGoods.java b/src/main/java/com/demo/jsl/entity/costapply/JslActivityCenterGoods.java new file mode 100644 index 0000000..2f419b2 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/costapply/JslActivityCenterGoods.java @@ -0,0 +1,208 @@ +package com.demo.jsl.entity.costapply; + +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 JslActivityCenterGoods implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private Long id; + + private String centerGoodsCode; + + /** + * 费用申请id + */ + private Long costApplyId; + + /** + * 活动id + */ + private Long activityId; + + /** + * 活动编码 + */ + private String activityCode; + + /** + * 科目id + */ + private Long subjectId; + + /** + * 科目编码 + */ + private String subjectCode; + + /** + * 科目名称 + */ + private String subjectName; + + /** + * 费用额度 + */ + private BigDecimal centerGoodsAmount; + + /** + * 费用占比 + */ + private BigDecimal centerGoodsRate; + + /** + * 费用已用额度 + */ + private BigDecimal usedAmount; + + /** + * 成本中心类型 + */ + private String centerType; + + /** + * 成本中心id + */ + private String centerId; + + /** + * 成本中心编码 + */ + private String centerCode; + + /** + * 成本中心名称 + */ + private String centerName; + + /** + * 费用额度 + */ + private BigDecimal centerAmount; + + /** + * 费用占比 + */ + private BigDecimal centerRate; + + /** + * 目标类型(brand、category、series、spu、sku) + */ + private String targetType; + + /** + * 目标id + */ + private Long targetId; + + /** + * 目标编码 + */ + private String targetCode; + + /** + * 目标名称 + */ + private String targetName; + + /** + * 目标等级id路径 + */ + private String targetLevelPathIds; + + /** + * 目标等级名称路径 + */ + private String targetLevelPathNames; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 最后更新时间 + */ + private LocalDateTime updateTime; + + /** + * 所属租户 + */ + private String tenantId; + + /** + * 创建人 + */ + private String createBy; + + private String updateBy; + + + /** + * 活动开始时间 + */ + private Date actStartDate; + + /** + * 活动结束时间 + */ + private Date actEndDate; + + /** + * 预算开始时间 + */ + private Date preStartDate; + + /** + * 预算结束时间 + */ + private Date preEndDate; + + /** + * 预计核销时间 + */ + private Date preCheckDate; + + /** + * 模板唯一健 + */ + private String tmpUk; + + /** + * 客户id + */ + private Long supplierId; + + /** + * 客户编码 + */ + private String supplierCode; + + /** + * 客户名称 + */ + private String supplierName; + + +} + diff --git a/src/main/java/com/demo/jsl/entity/costapply/JslActivityGoods.java b/src/main/java/com/demo/jsl/entity/costapply/JslActivityGoods.java new file mode 100644 index 0000000..9854dd3 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/costapply/JslActivityGoods.java @@ -0,0 +1,80 @@ +package com.demo.jsl.entity.costapply; + +import lombok.Data; +import lombok.extern.slf4j.Slf4j; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 活动商品项 实体类 + * + * @author YenHex + * @since 2022-11-08 + */ +@Slf4j +@Data +public class JslActivityGoods implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private Long id; + + /** + * 费用申请id + */ + private Long costApplyId; + + /** + * 活动id + */ + private Long activityId; + + /** + * 目标类型(brand、category、series、spu、sku) + */ + private String targetType; + + /** + * 目标id + */ + private Long targetId; + + /** + * 目标编码 + */ + private String targetCode; + + /** + * 目标名称 + */ + private String targetName; + + /** + * 目标等级id路径 + */ + private String targetLevelPathIds; + + /** + * 目标等级名称路径 + */ + private String targetLevelPathNames; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + private String tenantId; + + +} + diff --git a/src/main/java/com/demo/jsl/entity/costapply/JslActivitySubject.java b/src/main/java/com/demo/jsl/entity/costapply/JslActivitySubject.java new file mode 100644 index 0000000..8cc554c --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/costapply/JslActivitySubject.java @@ -0,0 +1,106 @@ +package com.demo.jsl.entity.costapply; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 活动科目项 实体类 + * + * @author YenHex + * @since 2022-11-09 + */ +@Data +public class JslActivitySubject implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private Long id; + + /** + * 费用申请id + */ + private Long costApplyId; + + /** + * 活动id + */ + private Long activityId; + + /** + * 科目id + */ + private Long subjectId; + + /** + * 科目编码 + */ + private String subjectCode; + + /** + * 科目名称 + */ + private String subjectName; + + /** + * 费用额度 + */ + private BigDecimal amount; + + /** + * 费用额度 + */ + private BigDecimal usedAmount; + + /** + * 场次 + */ + private Integer countSession; + + /** + * 人数 + */ + private Integer countPerson; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 最后更新时间 + */ + private LocalDateTime updateTime; + + /** + * 所属租户 + */ + private String tenantId; + + /** + * 创建人 + */ + private String createBy; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 逻辑删除标记(0:显示;1:隐藏) + */ + private String delFlag; + +} + diff --git a/src/main/java/com/demo/jsl/entity/costapply/JslCostApply.java b/src/main/java/com/demo/jsl/entity/costapply/JslCostApply.java new file mode 100644 index 0000000..ac357a5 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/costapply/JslCostApply.java @@ -0,0 +1,123 @@ +package com.demo.jsl.entity.costapply; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * 费用申请 实体类 + * + * @author YenHex + * @since 2022-11-09 + */ +@Data +public class JslCostApply implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private Long id; + + private String code; + + /** + * 主题 + */ + private String chargeTheme; + + /** + * 客户id + */ + private String supplierId; + + /** + * 客户编码 + */ + private String supplierCode; + + /** + * 客户名称 + */ + private String supplierName; + + /** + * 状态:0=未发布;1=审批中;2=待执行;3=完成;4-被驳回 + */ + private Integer chargeState; + + /** + * 备注 + */ + private String remark; + + /** + * 申请人 + */ + private String userId; + + /** + * 用户编码 + */ + private String userCode; + + /** + * 用户名称 + */ + private String userName; + + private String syFormId; + + private String syFlowId; + + /** + * 合同类型:0->无;1->有合同 + */ + private Integer contractFlag; + + /** + * 创建时间 + */ + private Date createTime; + private Date passTime; + + private Date submitTime; + + /** + * 最后更新时间 + */ + private LocalDateTime updateTime; + + /** + * 所属租户 + */ + private String tenantId; + + /** + * 统计活动数量 + */ + private Integer totalActivity; + + /** + * 统计所有活动申请的金额 + */ + private BigDecimal totalActivityAmount; + + /** + * 统计所有活动使用的金额 + */ + private BigDecimal totalActivityUsedAmount; + + /** + * 0-无关 + * 1-未同步 + * 2-已同步 + */ + private Integer xltSync; + +} + diff --git a/src/main/java/com/demo/jsl/entity/costapply/TbsActivityCenterGoodsSplit.java b/src/main/java/com/demo/jsl/entity/costapply/TbsActivityCenterGoodsSplit.java new file mode 100644 index 0000000..fe17651 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/costapply/TbsActivityCenterGoodsSplit.java @@ -0,0 +1,273 @@ +package com.demo.jsl.entity.costapply; + +import com.demo.util.dto.DateSplitDTO; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * 实体类 + * + * @author YenHex + * @since 2023-03-24 + */ +@Data +public class TbsActivityCenterGoodsSplit implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private Long id; + + /** + * 活动费用明细 + */ + private Long activityCenterGoodsId; + + /** + * 年月 + */ + private Integer yearMonth; + + /** + * 天数 + */ + private Integer days; + + /** + * 开始日期 + */ + private Date starDate; + + /** + * 结束日期 + */ + private Date endDate; + + private BigDecimal splitAmount; + + private BigDecimal splitUsedAmount; + + /** + * 成本明细编码 + */ + private String centerGoodsCode; + + /** + * 费用申请id + */ + private Long costApplyId; + + /** + * 活动id + */ + private Long activityId; + + /** + * 活动编码 + */ + private String activityCode; + + /** + * 科目id + */ + private Long subjectId; + + /** + * 科目编码 + */ + private String subjectCode; + + /** + * 科目名称 + */ + private String subjectName; + + /** + * 成本中心类型 + */ + private String centerType; + + /** + * 成本中心id + */ + private String centerId; + + /** + * 成本中心编码 + */ + private String centerCode; + + /** + * 成本中心名称 + */ + private String centerName; + + /** + * 成本中心金额 + */ + private BigDecimal centerAmount; + + /** + * 成本中心占比 + */ + private BigDecimal centerRate; + + /** + * 费用额度 + */ + private BigDecimal centerGoodsAmount; + + /** + * 费用占比 + */ + private BigDecimal centerGoodsRate; + + /** + * 已用费用 + */ + private BigDecimal usedAmount; + + /** + * 目标类型(brand、category、series、spu、sku) + */ + private String targetType; + + /** + * 目标id + */ + private Long targetId; + + /** + * 目标编码 + */ + private String targetCode; + + /** + * 目标名称 + */ + private String targetName; + + /** + * 目标等级路径 + */ + private String targetLevelPathIds; + + /** + * 目标等级路径 + */ + private String targetLevelPathNames; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 最后更新时间 + */ + private LocalDateTime updateTime; + + /** + * 所属租户 + */ + private String tenantId; + + /** + * 活动开始时间 + */ + private Date actStartDate; + + /** + * 活动结束时间 + */ + private Date actEndDate; + + /** + * 预算开始时间 + */ + private Date preStartDate; + + /** + * 预算结束时间 + */ + private Date preEndDate; + + /** + * 预计核销时间 + */ + private Date preCheckDate; + + /** + * 客户id + */ + private Long supplierId; + + /** + * 客户编码 + */ + private String supplierCode; + + /** + * 客户名称 + */ + private String supplierName; + + + public static TbsActivityCenterGoodsSplit toNewObject(JslActivityCenterGoods source, DateSplitDTO dateSplit) { + TbsActivityCenterGoodsSplit activityCenterGoodsSplit = new TbsActivityCenterGoodsSplit(); + //activityCenterGoodsSplit.setId(); + activityCenterGoodsSplit.setActivityCenterGoodsId(source.getId()); + activityCenterGoodsSplit.setYearMonth(dateSplit.getYearMonth()); + activityCenterGoodsSplit.setDays(dateSplit.getDays()); + activityCenterGoodsSplit.setStarDate(dateSplit.getStartDate()); + activityCenterGoodsSplit.setEndDate(dateSplit.getEndDate()); + activityCenterGoodsSplit.setCenterGoodsCode(source.getCenterGoodsCode()); + activityCenterGoodsSplit.setCostApplyId(source.getCostApplyId()); + activityCenterGoodsSplit.setActivityId(source.getActivityId()); + activityCenterGoodsSplit.setActivityCode(source.getActivityCode()); + activityCenterGoodsSplit.setSubjectId(source.getSubjectId()); + activityCenterGoodsSplit.setSubjectCode(source.getSubjectCode()); + activityCenterGoodsSplit.setSubjectName(source.getSubjectName()); + activityCenterGoodsSplit.setCenterType(source.getCenterType()); + activityCenterGoodsSplit.setCenterId(source.getCenterId()); + activityCenterGoodsSplit.setCenterCode(source.getCenterCode()); + activityCenterGoodsSplit.setCenterName(source.getCenterName()); + activityCenterGoodsSplit.setCenterAmount(source.getCenterAmount()); + activityCenterGoodsSplit.setCenterRate(source.getCenterRate()); + activityCenterGoodsSplit.setCenterGoodsAmount(source.getCenterGoodsAmount()); + activityCenterGoodsSplit.setCenterGoodsRate(source.getCenterGoodsRate()); + activityCenterGoodsSplit.setUsedAmount(source.getUsedAmount()); + activityCenterGoodsSplit.setTargetType(source.getTargetType()); + activityCenterGoodsSplit.setTargetId(source.getTargetId()); + activityCenterGoodsSplit.setTargetCode(source.getTargetCode()); + activityCenterGoodsSplit.setTargetName(source.getTargetName()); + activityCenterGoodsSplit.setTargetLevelPathIds(source.getTargetLevelPathIds()); + activityCenterGoodsSplit.setTargetLevelPathNames(source.getTargetLevelPathNames()); + activityCenterGoodsSplit.setRemark(source.getRemark()); + activityCenterGoodsSplit.setCreateTime(source.getCreateTime()); + activityCenterGoodsSplit.setUpdateTime(source.getUpdateTime()); + activityCenterGoodsSplit.setTenantId(source.getTenantId()); + activityCenterGoodsSplit.setActStartDate(source.getActStartDate()); + activityCenterGoodsSplit.setActEndDate(source.getActEndDate()); + activityCenterGoodsSplit.setPreStartDate(source.getPreStartDate()); + activityCenterGoodsSplit.setPreEndDate(source.getPreEndDate()); + activityCenterGoodsSplit.setPreCheckDate(source.getPreCheckDate()); + activityCenterGoodsSplit.setSupplierId(source.getSupplierId()); + activityCenterGoodsSplit.setSupplierCode(source.getSupplierCode()); + activityCenterGoodsSplit.setSupplierName(source.getSupplierName()); + return activityCenterGoodsSplit; + } + +} + diff --git a/src/main/java/com/demo/jsl/entity/costapply/XltCost.java b/src/main/java/com/demo/jsl/entity/costapply/XltCost.java new file mode 100644 index 0000000..cdd49f1 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/costapply/XltCost.java @@ -0,0 +1,35 @@ +package com.demo.jsl.entity.costapply; + +import lombok.Data; + +import java.util.Date; + +/** + * @author YenHex + * @since 2023/3/15 + */ +@Data +public class XltCost { + + private String code; + private String title; + + private String regionId; + private String provinceId; + private String cityId; + + private Date createDate; + private Date commitDate; + private Date passDate; + private String remark; + private String remark2; + + private String userId; + private String userName; + private String userCode; + + private String cusId; + private String cusName; + private String cusCode; + +} diff --git a/src/main/java/com/demo/jsl/entity/costapply/XltCostItem.java b/src/main/java/com/demo/jsl/entity/costapply/XltCostItem.java new file mode 100644 index 0000000..e90c8db --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/costapply/XltCostItem.java @@ -0,0 +1,59 @@ +package com.demo.jsl.entity.costapply; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * @author YenHex + * @since 2023/3/17 + */ +@Data +public class XltCostItem { + + private String id; + + private String costItemCode; + + private String costCode; + + private Date reportStartTime; + + private Date reportEndTime; + + private Integer countSession; + + private Integer countPerson; + + private String remark; + + private String cateLv1; + + private String cateLv2; + + private String cateLv3; + + private String spuId; + + private Date actStartTime; + private Date actEndTime; + private Date preCheckDate; + + private BigDecimal money; + private BigDecimal checkMoney; + private String productRemark; + + private String subjectXltId; + private String subjectCode; + private String subjectName; + + private String cusId; + private String cusCode; + private String cusName; + + private String centerId; + private String centerName; + private String centerCode; + +} diff --git a/src/main/java/com/demo/jsl/entity/dept/JslDept.java b/src/main/java/com/demo/jsl/entity/dept/JslDept.java new file mode 100644 index 0000000..fdae378 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/dept/JslDept.java @@ -0,0 +1,19 @@ +package com.demo.jsl.entity.dept; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/10 + */ +@Data +public class JslDept { + + private String id; + private String name; + private String code; + private String parentId; + private String mgrUserId; + private String tenantId; + +} diff --git a/src/main/java/com/demo/jsl/entity/dept/SeeYonDept.java b/src/main/java/com/demo/jsl/entity/dept/SeeYonDept.java new file mode 100644 index 0000000..5b85bf5 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/dept/SeeYonDept.java @@ -0,0 +1,18 @@ +package com.demo.jsl.entity.dept; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/10 + */ +@Data +public class SeeYonDept { + Long id; + String name; + String code; + String path; + Integer len; + + +} diff --git a/src/main/java/com/demo/jsl/entity/dept/XltDept.java b/src/main/java/com/demo/jsl/entity/dept/XltDept.java new file mode 100644 index 0000000..f705ed0 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/dept/XltDept.java @@ -0,0 +1,18 @@ +package com.demo.jsl.entity.dept; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/10 + */ +@Data +public class XltDept { + + private String id; + private String name; + private String pid; + private String uid; + private Integer sellFlag; + +} diff --git a/src/main/java/com/demo/jsl/entity/goods/JslGoodSpecValue.java b/src/main/java/com/demo/jsl/entity/goods/JslGoodSpecValue.java new file mode 100644 index 0000000..bf99880 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/goods/JslGoodSpecValue.java @@ -0,0 +1,29 @@ +package com.demo.jsl.entity.goods; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/2/10 + */ +@Data +public class JslGoodSpecValue { + + /** + * PK + */ + private Long id; + + /** + * 规格Id + */ + private Long specId; + + /** + * 名称 + */ + private String name; + + private String tenantId; + +} diff --git a/src/main/java/com/demo/jsl/entity/goods/JslGoodSpu.java b/src/main/java/com/demo/jsl/entity/goods/JslGoodSpu.java new file mode 100644 index 0000000..b1e85aa --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/goods/JslGoodSpu.java @@ -0,0 +1,75 @@ +package com.demo.jsl.entity.goods; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/2/10 + */ +@Data +public class JslGoodSpu { + + /** + * PK + */ + private Long id; + + /** + * 商品编码 + */ + private String spuCode; + + /** + * 商品名字 + */ + private String name; + + /** + * 一级分类、品牌ID + */ + private String categoryFirst; + + /** + * 二级分类、类目ID + */ + private String categorySecond; + + /** + * 三级分类、系列ID + */ + private String categoryThird; + + /** + * 最后一级分类 + */ + private String categoryLast; + + /** + * 是否上架(1是 0否) + */ + private Integer shelf; + + /** + * 销量 + */ + private Integer saleNum; + + + /** + * 产品口味(非sku规格值) + */ + private String tasteValue; + + /** + * 所属租户 + */ + private String tenantId; + + private String xltId; + + /** + * 可投放费用标识 + */ + private Integer costFlag; + +} diff --git a/src/main/java/com/demo/jsl/entity/goods/JslGoodsSku.java b/src/main/java/com/demo/jsl/entity/goods/JslGoodsSku.java new file mode 100644 index 0000000..2c1df6d --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/goods/JslGoodsSku.java @@ -0,0 +1,110 @@ +package com.demo.jsl.entity.goods; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * sku 实体类 + * + * @author YenHex + * @since 2022-10-09 + */ +@Data +public class JslGoodsSku implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * PK + */ + private Long id; + + /** + * sku编码 + */ + private String skuCode; + + /** + * 商品Id + */ + private Long spuId; + + /** + * 图片 + */ + private String picUrl; + + /** + * 销售价格 + */ + private BigDecimal salesPrice; + + /** + * 市场价 + */ + private BigDecimal marketPrice; + + /** + * 成本价 + */ + private BigDecimal costPrice; + + /** + * 规格值 + */ + private String specInfos; + + /** + * 库存 + */ + private Integer stock; + + /** + * 重量(kg) + */ + private BigDecimal weight; + + /** + * 体积(m³) + */ + private BigDecimal volume; + + /** + * 是否启用1、是;0否 + */ + private Integer enable; + + /** + * 单位id + */ + private Long unitId; + + /** + * 单位 + */ + private String unitName; + + /** + * 版本号 + */ + private Integer version; + + /** + * 备注 + */ + private String remark; + + private String tenantId; + + + private String delFlag; + + /** + * 可投放费用标识 + */ + private Integer costFlag; + +} + diff --git a/src/main/java/com/demo/jsl/entity/goods/JslGoodsSkuSpecValue.java b/src/main/java/com/demo/jsl/entity/goods/JslGoodsSkuSpecValue.java new file mode 100644 index 0000000..74094d2 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/goods/JslGoodsSkuSpecValue.java @@ -0,0 +1,46 @@ +package com.demo.jsl.entity.goods; + +import lombok.Data; + +import java.io.Serializable; + +/** + * sku规格值 实体类 + * + * @author YenHex + * @since 2022-10-09 + */ +@Data +public class JslGoodsSkuSpecValue implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * PK + */ + private Long id; + + /** + * spu_id + */ + private Long spuId; + + /** + * sku_id + */ + private Long skuId; + + /** + * 规格值id + */ + private Long specValueId; + + /** + * 排序字段 + */ + private Integer sort; + + private String tenantId; + +} + diff --git a/src/main/java/com/demo/jsl/entity/goods/JslSpuSpec.java b/src/main/java/com/demo/jsl/entity/goods/JslSpuSpec.java new file mode 100644 index 0000000..a7a5e57 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/goods/JslSpuSpec.java @@ -0,0 +1,25 @@ +package com.demo.jsl.entity.goods; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/2/10 + */ +@Data +public class JslSpuSpec { + + private Long id; + + /** + * PK + */ + private Long spuId; + + /** + * 规格Id + */ + private Long specId; + private String tenantId; + +} diff --git a/src/main/java/com/demo/jsl/entity/goods/XltGoods.java b/src/main/java/com/demo/jsl/entity/goods/XltGoods.java new file mode 100644 index 0000000..915416b --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/goods/XltGoods.java @@ -0,0 +1,24 @@ +package com.demo.jsl.entity.goods; + +import lombok.Data; +import lombok.ToString; + +/** + * @author YenHex + * @since 2023/2/9 + */ +@Data +@ToString +public class XltGoods { + + + String id; + String code; + String name; + String bgSku; + String spuId; + String tasteSku; + Double price; + Integer stopval; + +} diff --git a/src/main/java/com/demo/jsl/entity/goods/XltSpu.java b/src/main/java/com/demo/jsl/entity/goods/XltSpu.java new file mode 100644 index 0000000..d6d9db4 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/goods/XltSpu.java @@ -0,0 +1,19 @@ +package com.demo.jsl.entity.goods; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/2/9 + */ +@Data +public class XltSpu { + + private String id; + private Integer level; + private String name; + private String pid; + private String code; + private Long tempId; + +} diff --git a/src/main/java/com/demo/jsl/entity/pay/PayPayment.java b/src/main/java/com/demo/jsl/entity/pay/PayPayment.java new file mode 100644 index 0000000..ffc3ef3 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/pay/PayPayment.java @@ -0,0 +1,122 @@ +package com.demo.jsl.entity.pay; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * 支付 实体类 + * + * @author YenHex + * @since 2022-12-15 + */ +@Data +public class PayPayment implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 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 Date payTime; + + /** + * 费用申请id + */ + private Long costApplyId; + + /** + * 取消标识 + * 不再支付列表:0-冻结;1-解冻 + * 支付列表:0-正常;1-取消 + **/ + private Integer cancelFlag; + + /** + * 取消时间 + */ + private LocalDateTime cancelTime; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 所属租户 + */ + private String tenantId; + + +} + diff --git a/src/main/java/com/demo/jsl/entity/pay/PayPaymentItem.java b/src/main/java/com/demo/jsl/entity/pay/PayPaymentItem.java new file mode 100644 index 0000000..4d15971 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/pay/PayPaymentItem.java @@ -0,0 +1,110 @@ +package com.demo.jsl.entity.pay; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 支付明细项 实体类 + * + * @author YenHex + * @since 2022-12-15 + */ +@Data +public class PayPaymentItem implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private Long id; + + /** + * 支付类型 + * pay - 支付 + * unPay - 不再支付 + **/ + private String payType; + + /** + * 支付id + */ + private Long paymentId; + + /** + * 供应商id + */ + private Long supplierId; + + /** + * 支付金额 + */ + private BigDecimal itemPayAmount; + + /** + * 核销id + */ + private Long verificationId; + + /** + * 核销科目项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 Date createTime; + + private String tenantId; + +} + diff --git a/src/main/java/com/demo/jsl/entity/region/JslRegion.java b/src/main/java/com/demo/jsl/entity/region/JslRegion.java new file mode 100644 index 0000000..7f00de8 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/region/JslRegion.java @@ -0,0 +1,49 @@ +package com.demo.jsl.entity.region; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/9 + */ +@Data +public class JslRegion { + + /** + * id + */ + private String id; + + /** + * 名称 + */ + private String name; + + /** + * 编码 + */ + private String code; + + /** + * 父级ID + */ + private String pid; + + /** + * 层级 + */ + private Integer level; + + /** + * 祖级id + */ + private String pathIds; + + /** + * 祖级id + */ + private String pathNames; + + private String tenantId; + +} diff --git a/src/main/java/com/demo/jsl/entity/region/SorRegion.java b/src/main/java/com/demo/jsl/entity/region/SorRegion.java new file mode 100644 index 0000000..3460619 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/region/SorRegion.java @@ -0,0 +1,24 @@ +package com.demo.jsl.entity.region; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/4/6 + */ +@Data +public class SorRegion { + + private String areaId; + + private String area; + + private String cityId; + + private String city; + + private String provinceId; + + private String province; + +} diff --git a/src/main/java/com/demo/jsl/entity/region/XltDealerArea.java b/src/main/java/com/demo/jsl/entity/region/XltDealerArea.java new file mode 100644 index 0000000..907508c --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/region/XltDealerArea.java @@ -0,0 +1,16 @@ +package com.demo.jsl.entity.region; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/9 + */ +@Data +public class XltDealerArea { + + String id; + + String area; + +} diff --git a/src/main/java/com/demo/jsl/entity/region/XltDealerCity.java b/src/main/java/com/demo/jsl/entity/region/XltDealerCity.java new file mode 100644 index 0000000..b47c4b7 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/region/XltDealerCity.java @@ -0,0 +1,14 @@ +package com.demo.jsl.entity.region; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/9 + */ +@Data +public class XltDealerCity { + String id; + String city; + String pid; +} diff --git a/src/main/java/com/demo/jsl/entity/region/XltDealerProvince.java b/src/main/java/com/demo/jsl/entity/region/XltDealerProvince.java new file mode 100644 index 0000000..b98b327 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/region/XltDealerProvince.java @@ -0,0 +1,19 @@ +package com.demo.jsl.entity.region; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/9 + */ +@Data +public class XltDealerProvince { + + String id; + String province; + String aid; + + String tempIds; + String tempNames; + +} diff --git a/src/main/java/com/demo/jsl/entity/schedule/TbsSchedule.java b/src/main/java/com/demo/jsl/entity/schedule/TbsSchedule.java new file mode 100644 index 0000000..8ead13d --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/schedule/TbsSchedule.java @@ -0,0 +1,42 @@ +package com.demo.jsl.entity.schedule; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 考核期 实体类 + * + * @author YenHex + * @since 2022-11-08 + */ +@Data +public class TbsSchedule implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private Long id; + + /** + * 考核名称 + */ + private String code; + + /** + * 考核编码 + */ + private String name; + + /** + * 备注 + */ + private String remark; + + + private String tenantId; + +} + diff --git a/src/main/java/com/demo/jsl/entity/schedule/TbsScheduleItem.java b/src/main/java/com/demo/jsl/entity/schedule/TbsScheduleItem.java new file mode 100644 index 0000000..ad31e60 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/schedule/TbsScheduleItem.java @@ -0,0 +1,55 @@ +package com.demo.jsl.entity.schedule; + +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 考核时间项 实体类 + * + * @author YenHex + * @since 2022-11-08 + */ +@Data +public class TbsScheduleItem implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private Long id; + + /** + * 考核id + */ + private Long scheduleId; + + /** + * 考核编码 + */ + private String itemName; + + /** + * 开始时间 + */ + private LocalDateTime startDate; + + /** + * 结束时间 + */ + private LocalDateTime endDate; + + /** + * 备注 + */ + private String remark; + + /** + * 所属租户 + */ + private String tenantId; + +} + diff --git a/src/main/java/com/demo/jsl/entity/subject/JslSubject.java b/src/main/java/com/demo/jsl/entity/subject/JslSubject.java new file mode 100644 index 0000000..0751e9f --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/subject/JslSubject.java @@ -0,0 +1,21 @@ +package com.demo.jsl.entity.subject; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/9 + */ +@Data +public class JslSubject { + + private Long id; + private String xltId; + private String subjectName; + private String subjectCode; + private Long pid; + private Integer level; + private String pathNames; + private String tenantId; + +} diff --git a/src/main/java/com/demo/jsl/entity/subject/XltSubject.java b/src/main/java/com/demo/jsl/entity/subject/XltSubject.java new file mode 100644 index 0000000..bf48483 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/subject/XltSubject.java @@ -0,0 +1,22 @@ +package com.demo.jsl.entity.subject; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/9 + */ +@Data +public class XltSubject { + + private String id; + + private String costName; + + private String number; + + private String pid; + + private Integer num; + +} diff --git a/src/main/java/com/demo/jsl/entity/supplier/JslSupplier.java b/src/main/java/com/demo/jsl/entity/supplier/JslSupplier.java new file mode 100644 index 0000000..2669a8e --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/supplier/JslSupplier.java @@ -0,0 +1,161 @@ +package com.demo.jsl.entity.supplier; + +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +/** + * @author YenHex + * @since 2023/1/10 + */ +@Data +public class JslSupplier { + + /** + * id + */ + private Long id; + + /** + * 一级区域ID + */ + private String regionFirst; + + /** + * 二级区域ID + */ + private String regionSecond; + + /** + * 三级区域ID + */ + private String regionThird; + + /** + * 四级区域ID + */ + private String regionFourthly; + + /** + * 最子级区域ID + */ + private String regionLast; + + /** + * 行政一级区域ID + */ + private String region2First; + + /** + * 行政二级区域ID + */ + private String region2Second; + + /** + * 行政三级区域ID + */ + private String region2Third; + + /** + * 行政四级区域ID + */ + private String region2Fourthly; + + /** + * 行政最子级区域ID + */ + private String region2Last; + + /** + * 详细地址 + */ + private String address; + + /** + * 名称 + */ + private String name; + + /** + * 客户编码 + */ + private String code; + + /** + * 父级id + */ + private String pid; + + private String parentCode; + + /** + * 负责人 + */ + private String userId; + + /** + * 负责人 + */ + private String userCode; + + /** + * 负责人 + */ + private String userName; + + private String[] otherUserIds; + + private String otherUserNames; + + private String otherUserCodes; + + /** + * 所属账套 + */ + private String belong; + + /** + * 租户id + */ + private String tenantId; + + private String xltId; + + private String xltid2; + + public String handleSaleRegionId(){ + if(isValid(this.getRegionLast())){ + return this.getRegionLast(); + }else if(isValid(this.getRegionFourthly())){ + return this.getRegionFourthly(); + }else if(isValid(this.getRegionThird())){ + return this.getRegionThird(); + }else if(isValid(this.getRegionSecond())){ + return this.getRegionSecond(); + }else if(isValid(this.getRegionFirst())){ + return this.getRegionFirst(); + }else { + return "0"; + } + } + + public String handleBizRegionId(){ + if(isValid(this.getRegion2Last())){ + return this.getRegion2Last(); + }else if(isValid(this.getRegion2Fourthly())){ + return this.getRegion2Fourthly(); + }else if(isValid(this.getRegion2Third())){ + return this.getRegion2Third(); + }else if(isValid(this.getRegion2Second())){ + return this.getRegion2Second(); + }else if(isValid(this.getRegion2First())){ + return this.getRegion2First(); + }else { + return "0"; + } + } + + private boolean isValid(String region){ + return StringUtils.isNotEmpty(region)&&!"0".equals(region); + } + +} diff --git a/src/main/java/com/demo/jsl/entity/supplier/XltSupplier.java b/src/main/java/com/demo/jsl/entity/supplier/XltSupplier.java new file mode 100644 index 0000000..630ce84 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/supplier/XltSupplier.java @@ -0,0 +1,20 @@ +package com.demo.jsl.entity.supplier; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/11 + */ +@Data +public class XltSupplier { + + String id; + String name; + String code; + String address; + String areaId; + String provinceId; + String cityId; + +} diff --git a/src/main/java/com/demo/jsl/entity/supplier/dto/XltSupplierEmp.java b/src/main/java/com/demo/jsl/entity/supplier/dto/XltSupplierEmp.java new file mode 100644 index 0000000..1265104 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/supplier/dto/XltSupplierEmp.java @@ -0,0 +1,16 @@ +package com.demo.jsl.entity.supplier.dto; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/6/13 + */ +@Data +public class XltSupplierEmp { + + private String id; + + private String empName; + +} diff --git a/src/main/java/com/demo/jsl/entity/test/TestDemo.java b/src/main/java/com/demo/jsl/entity/test/TestDemo.java new file mode 100644 index 0000000..c4fdb3d --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/test/TestDemo.java @@ -0,0 +1,17 @@ +package com.demo.jsl.entity.test; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author YenHex + * @since 2023/3/17 + */ +@Data +public class TestDemo implements Serializable { + + private Long id; + private String testName; + +} diff --git a/src/main/java/com/demo/jsl/entity/user/ExcelData0508.java b/src/main/java/com/demo/jsl/entity/user/ExcelData0508.java new file mode 100644 index 0000000..fb9aa5b --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/user/ExcelData0508.java @@ -0,0 +1,16 @@ +package com.demo.jsl.entity.user; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/5/8 + */ +@Data +public class ExcelData0508 { + + String code; + String name; + String mobile; + +} diff --git a/src/main/java/com/demo/jsl/entity/user/ExcelUserRole.java b/src/main/java/com/demo/jsl/entity/user/ExcelUserRole.java new file mode 100644 index 0000000..0fd64b0 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/user/ExcelUserRole.java @@ -0,0 +1,16 @@ +package com.demo.jsl.entity.user; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/4/21 + */ +@Data +public class ExcelUserRole { + + private String empNo; + private String empName; + private String parentRid; + +} diff --git a/src/main/java/com/demo/jsl/entity/user/JslPost.java b/src/main/java/com/demo/jsl/entity/user/JslPost.java new file mode 100644 index 0000000..f525b0e --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/user/JslPost.java @@ -0,0 +1,44 @@ +package com.demo.jsl.entity.user; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/5/8 + */ +@Data +public class JslPost { + + /** + * id + */ + private String id; + + /** + * 名称 + */ + private String postName; + + /** + * 编码 + */ + private String postCode; + + private String pid; + + /** + * id路径 + */ + private String pathIds; + + /** + * 名称路径 + */ + private String pathNames; + + /** + * 备注 + */ + private String remark; + +} diff --git a/src/main/java/com/demo/jsl/entity/user/JslPostUser.java b/src/main/java/com/demo/jsl/entity/user/JslPostUser.java new file mode 100644 index 0000000..babc184 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/user/JslPostUser.java @@ -0,0 +1,62 @@ +package com.demo.jsl.entity.user; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/5/8 + */ +@Data +public class JslPostUser { + + /** + * 用户id + */ + private String userId; + + /** + * 用户编码 + */ + private String userCode; + + /** + * 用户名称 + */ + private String userName; + + /** + * 岗位id + */ + private String postId; + + /** + * 岗位名称 + */ + private String postName; + + /** + * 岗位编码 + */ + private String postCode; + + /** + * 岗位pid + */ + private String pid; + + /** + * id路径 + */ + private String pathIds; + + /** + * 名称路径 + */ + private String pathNames; + + /** + * 备注 + */ + private String remark; + +} diff --git a/src/main/java/com/demo/jsl/entity/user/JslUser.java b/src/main/java/com/demo/jsl/entity/user/JslUser.java new file mode 100644 index 0000000..b01d1c8 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/user/JslUser.java @@ -0,0 +1,90 @@ +package com.demo.jsl.entity.user; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/10 + */ +@Data +public class JslUser { + + /** + * id + */ + private String id; + + /** + * 手机号 + */ + private String mobile; + + /** + * 账号 + */ + private String account; + + /** + * 昵称 + */ + private String name; + + /** + * 编号/工号 + */ + private String code; + + /** + * 密码 + */ + private String password; + + + /** + * 部门ID + */ + private String deptId; + + /** + * 职位ID + */ + private String positionId; + + /** + * 系统登录权限【0->停用;1->启用】 + */ + private Integer loginEnable; + + /** + * 在职状态【0->离职;1->在职】 + */ + private Integer servingState; + + /** + * 是否销售人员 + */ + private Integer salesFlag; + + /** + * 身份证号码 + */ + private String identityNo; + + /** + * 备注 + */ + private String remark; + + /** + * 致远登陆账户 + */ + private String syAccount; + + /** + * 致远用户id + */ + private String syUserId; + + private String tenantId; + +} diff --git a/src/main/java/com/demo/jsl/entity/user/SyUser.java b/src/main/java/com/demo/jsl/entity/user/SyUser.java new file mode 100644 index 0000000..58f3d65 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/user/SyUser.java @@ -0,0 +1,19 @@ +package com.demo.jsl.entity.user; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/10 + */ +@Data +public class SyUser { + + Long id; + String name; + String code; + Long deptId; + Long postId; + String mobile; + +} diff --git a/src/main/java/com/demo/jsl/entity/user/SysUserSales.java b/src/main/java/com/demo/jsl/entity/user/SysUserSales.java new file mode 100644 index 0000000..2fda36b --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/user/SysUserSales.java @@ -0,0 +1,37 @@ +package com.demo.jsl.entity.user; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 实体类 + * + * @author YenHex + * @since 2022-10-12 + */ +@Data +public class SysUserSales implements Serializable { + + /** + * 用户id + */ + private String userId; + + /** + * 父级id + */ + private String pid; + + + /** + * 租户id + */ + @JsonIgnore + @JsonProperty + private String tenantId; + +} + diff --git a/src/main/java/com/demo/jsl/entity/user/XltRole.java b/src/main/java/com/demo/jsl/entity/user/XltRole.java new file mode 100644 index 0000000..ca3f394 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/user/XltRole.java @@ -0,0 +1,17 @@ +package com.demo.jsl.entity.user; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/4/21 + */ +@Data +public class XltRole { + + private String id; + private String roleName; + private String pid; + private String remark; + +} diff --git a/src/main/java/com/demo/jsl/entity/user/XltUser.java b/src/main/java/com/demo/jsl/entity/user/XltUser.java new file mode 100644 index 0000000..850bfdf --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/user/XltUser.java @@ -0,0 +1,21 @@ +package com.demo.jsl.entity.user; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/10 + */ +@Data +public class XltUser { + + String id; + String numNo; + String name; + String identitycard; + String posts; + String deptid; + Integer state; + String mobile; + +} diff --git a/src/main/java/com/demo/jsl/entity/user/XltUserRole.java b/src/main/java/com/demo/jsl/entity/user/XltUserRole.java new file mode 100644 index 0000000..5e95042 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/user/XltUserRole.java @@ -0,0 +1,17 @@ +package com.demo.jsl.entity.user; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/4/21 + */ +@Data +public class XltUserRole { + + private String roleid; + private String num; + private String name; + private String mobile; + +} diff --git a/src/main/java/com/demo/jsl/entity/verifi/VtbVerification.java b/src/main/java/com/demo/jsl/entity/verifi/VtbVerification.java new file mode 100644 index 0000000..b0c3106 --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/verifi/VtbVerification.java @@ -0,0 +1,116 @@ +package com.demo.jsl.entity.verifi; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 核销 实体类 + * + * @author YenHex + * @since 2022-11-24 + */ +@Data +public class VtbVerification implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private Long id; + + /** + * 核销编码 + */ + private String verificationCode; + + /** + * 活动id + */ + private Long costApplyId; + private Long activityId; + + /** + * 政策项id + */ + private Long policyItemId; + + /** + * 政策项编码 + */ + private String policyItemCode; + + + /** + * 核销状态 + */ + private Integer verificationState; + + /** + * 核销通过时间 + */ + private Date finishedTime; + + /** + * 支付状态:0-未支付;1-已支付 + */ + private Integer paymentState; + + /** + * 金额 + */ + private BigDecimal amount; + + /** + * 申请时金额记录 + */ + private BigDecimal amountRecord; + + private String syFormId; + + private String syFlowId; + + /** + * 客户id + */ + private Long supplierId; + + /** + * 客户编码 + */ + private String supplierCode; + + /** + * 客户名称 + */ + private String supplierName; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private Date createTime; + + private String tenantId; + + private String userId; + + /** + * 用户编码 + */ + private String userCode; + + /** + * 用户名称 + */ + private String userName; + +} + diff --git a/src/main/java/com/demo/jsl/entity/verifi/VtbVerificationSubject.java b/src/main/java/com/demo/jsl/entity/verifi/VtbVerificationSubject.java new file mode 100644 index 0000000..e0ee10b --- /dev/null +++ b/src/main/java/com/demo/jsl/entity/verifi/VtbVerificationSubject.java @@ -0,0 +1,185 @@ +package com.demo.jsl.entity.verifi; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 核销科目费用 实体类 + * + * @author YenHex + * @since 2022-11-24 + */ +@Data +public class VtbVerificationSubject implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private Long id; + + /** + * 科目核销编码 + */ + private String verificationSubCode; + + /** + * 核算id + */ + private Long verificationId; + + /** + * 费用申请id + */ + private Long costApplyId; + + /** + * 活动id + */ + private Long activityId; + + /** + * 政策项id + */ + private Long policyItemId; + + /** + * 政策项编码 + */ + private String policyItemCode; + + /** + * 科目id + */ + private Long subjectId; + + /** + * 科目编码 + */ + private String subjectCode; + + /** + * 科目名称 + */ + private String subjectName; + + /** + * 客户id + */ + private Long supplierId; + + /** + * 客户编码 + */ + private String supplierCode; + + /** + * 客户名称 + */ + private String supplierName; + + /** + * 本次核销额 + */ + private BigDecimal usedAmount; + + /** + * 申请时本次核销额 + */ + private BigDecimal usedAmountRecord; + + /** + * 已支付核销费用 + */ + private BigDecimal payAmount; + + /** + * 支付完成标识 + */ + private Integer payFinishedFlag; + + /** + * 场次 + */ + private Integer countSession; + + /** + * 人数 + */ + private Integer countPerson; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 最后更新时间 + */ + private LocalDateTime updateTime; + + /** + * 所属租户 + */ + private String tenantId; + + /** + * 创建人 + */ + private String createBy; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 逻辑删除标记(0:显示;1:隐藏) + */ + private String delFlag; + + /** + * 是否有效(0:否;1:是) + */ + private Integer effectiveFlag; + + /** + * 表单id + */ + private Long formId; + + /** + * 表单标题 + */ + private String formTitle; + + /** + * 表单版本 + */ + private Integer formVersion; + + /** + * 表单内容 + */ + private String formContext; + + /** + * 表单内容值 + */ + private String formContextValue; + + /** + * 可更变的最大金额 + */ + private BigDecimal maxChangeAmount; +} + diff --git a/src/main/java/com/demo/jsl/service/BmsService.java b/src/main/java/com/demo/jsl/service/BmsService.java new file mode 100644 index 0000000..d35d356 --- /dev/null +++ b/src/main/java/com/demo/jsl/service/BmsService.java @@ -0,0 +1,14 @@ +package com.demo.jsl.service; + +/** + * @author YenHex + * @since 2023/3/16 + */ +public interface BmsService { + + /** + * 同步科目 + */ + void syncSubject(); + +} diff --git a/src/main/java/com/demo/jsl/service/ChannelPointService.java b/src/main/java/com/demo/jsl/service/ChannelPointService.java new file mode 100644 index 0000000..d72b56a --- /dev/null +++ b/src/main/java/com/demo/jsl/service/ChannelPointService.java @@ -0,0 +1,30 @@ +package com.demo.jsl.service; + +/** + * @author YenHex + * @since 2023/4/13 + */ +public interface ChannelPointService { + + /** + * 同步渠道 + * 2023年4月13日 + */ + void syncChannel(); + + /** + * 同步网点 + * 2023年4月13日 + */ + void syncPoint(); + + void syncPointMgr(); + + void syncSupplierMgr(); + + void jslMasterUser_userId(); + + void jslMasterUser_pointId(); + + void initByGaoDe(); +} diff --git a/src/main/java/com/demo/jsl/service/GoodsService.java b/src/main/java/com/demo/jsl/service/GoodsService.java new file mode 100644 index 0000000..01edf55 --- /dev/null +++ b/src/main/java/com/demo/jsl/service/GoodsService.java @@ -0,0 +1,13 @@ +package com.demo.jsl.service; + +/** + * @author YenHex + * @since 2023/4/6 + */ +public interface GoodsService { + + void syncCategory(); + + void syncGoods(); + +} diff --git a/src/main/java/com/demo/jsl/service/RegionService.java b/src/main/java/com/demo/jsl/service/RegionService.java new file mode 100644 index 0000000..37a7aad --- /dev/null +++ b/src/main/java/com/demo/jsl/service/RegionService.java @@ -0,0 +1,11 @@ +package com.demo.jsl.service; + +/** + * @author YenHex + * @since 2023/4/6 + */ +public interface RegionService { + + void syncBizRegion(); + +} diff --git a/src/main/java/com/demo/jsl/service/SysService.java b/src/main/java/com/demo/jsl/service/SysService.java new file mode 100644 index 0000000..f92eed5 --- /dev/null +++ b/src/main/java/com/demo/jsl/service/SysService.java @@ -0,0 +1,40 @@ +package com.demo.jsl.service; + +/** + * @author YenHex + * @since 2023/4/4 + */ +public interface SysService { + + /** + * 岗位 + * + * @throws Exception + */ + void syncPost() throws Exception; + + /** + * 部门 + * + * @throws Exception + */ + void syncDept() throws Exception; + + /** + * 用户 + * + * @throws Exception + */ + void syncUser() throws Exception; + + /** + * 同步用户上下级 + */ + void syncUserSaleRelate(); + + + void syncInitUserMobile(); + + void syncUserRole(); + +} diff --git a/src/main/java/com/demo/jsl/service/impl/BmsServiceImpl.java b/src/main/java/com/demo/jsl/service/impl/BmsServiceImpl.java new file mode 100644 index 0000000..d41cc90 --- /dev/null +++ b/src/main/java/com/demo/jsl/service/impl/BmsServiceImpl.java @@ -0,0 +1,88 @@ +package com.demo.jsl.service.impl; + +import com.demo.jsl.entity.subject.JslSubject; +import com.demo.jsl.entity.subject.XltSubject; +import com.demo.jsl.service.BmsService; +import lombok.SneakyThrows; +import org.junit.Test; +import org.noear.wood.DbContext; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author YenHex + * @since 2023/3/16 + */ +public class BmsServiceImpl implements BmsService { + + DbContext jslCtx; + DbContext xltCtx; + + public DbContext getJslDbContext() { + if (jslCtx == null) { + jslCtx = new DbContext("test", "jdbc:mysql://192.168.0.9:3306/jsl_mall_qs_dev?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true", "kpjsl", "123456"); + } + return jslCtx; + } + + public DbContext getXltDbContext() { + if (xltCtx == null) { + //return new DbContext("xlt","jdbc:sqlserver://rm-wz93l107hc277n9ieco.sqlserver.rds.aliyuncs.com:3433;DatabaseName=ceshi","qs_db_user","Aa135246"); + xltCtx = new DbContext("xlt", "jdbc:sqlserver://rm-wz93l107hc277n9ieco.sqlserver.rds.aliyuncs.com:3433;DatabaseName=xiaolutong", "qs_db_user", "Aa135246"); + } + return xltCtx; + } + + public DbContext getSeeYonDbContext() { + return new DbContext("oa", "jdbc:sqlserver://192.168.10.7:1433;DatabaseName=OAdata", "sa", "JSL2282125"); + } + + + @Test + @SneakyThrows + @Override + public void syncSubject() { + DbContext jslDb = getJslDbContext(); + DbContext xltDb = getXltDbContext(); + + String sql2 = "select id,name as cost_name,number,parentCostTypeMain_id as pid,level_ as num from Cost_Type_Main order by level_"; + List xltSubjects1 = xltDb.sql(sql2).getList(XltSubject.class); + + String sql = "select id,costnameForSales as cost_name,number,parentCostTypeMain as pid,3 as num from costtype"; + List xltSubjects2 = xltDb.sql(sql).getList(XltSubject.class); + Map idMap = new HashMap<>(); + Map xltSubjectHashMap = new HashMap<>(); + long id = 0; + xltSubjects1.addAll(xltSubjects2); + for (XltSubject xltSubject : xltSubjects1) { + id++; + String xltId = xltSubject.getId(); + idMap.put(xltId, id); + xltSubjectHashMap.put(xltId, xltSubject); + Long pid = idMap.get(xltSubject.getPid()) != null ? idMap.get(xltSubject.getPid()) : 0L; + JslSubject jslSubject = new JslSubject(); + jslSubject.setId(id); + jslSubject.setXltId(xltSubject.getId()); + jslSubject.setSubjectName(xltSubject.getCostName()); + jslSubject.setSubjectCode(xltSubject.getNumber()); + jslSubject.setPid(pid); + jslSubject.setLevel(xltSubject.getNum()); + if (pid != 0L) { + XltSubject p1 = xltSubjectHashMap.get(xltSubject.getPid()); + if (p1.getPid() == null) { + jslSubject.setPathNames(p1.getCostName() + "_" + xltSubject.getCostName()); + } else { + XltSubject p2 = xltSubjectHashMap.get(p1.getPid()); + jslSubject.setPathNames(p2.getCostName() + "_" + p1.getCostName() + "_" + xltSubject.getCostName()); + } + } else { + jslSubject.setPathNames(xltSubject.getCostName()); + } + jslSubject.setTenantId("001"); + jslDb.table("bms_subject").setEntity(jslSubject).insert(); + } + } + +} diff --git a/src/main/java/com/demo/jsl/service/impl/ChannelPointServiceImpl.java b/src/main/java/com/demo/jsl/service/impl/ChannelPointServiceImpl.java new file mode 100644 index 0000000..34af63c --- /dev/null +++ b/src/main/java/com/demo/jsl/service/impl/ChannelPointServiceImpl.java @@ -0,0 +1,432 @@ +package com.demo.jsl.service.impl; + +import cn.hutool.http.HttpUtil; +import cn.hutool.http.Method; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import com.demo.jsl.entity.channel.*; +import com.demo.jsl.entity.region.JslRegion; +import com.demo.jsl.entity.supplier.JslSupplier; +import com.demo.jsl.entity.user.JslUser; +import com.demo.jsl.service.ChannelPointService; +import com.demo.util.DSUtil; +import com.demo.util.SetData; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.SneakyThrows; +import org.junit.Test; +import org.noear.wood.DbContext; + +import java.sql.SQLException; +import java.util.List; + +/** + * @author YenHex + * @since 2023/4/13 + */ +@NoArgsConstructor +@Data +public class ChannelPointServiceImpl implements ChannelPointService { + + final String TENANT_ID = "001"; + + public static void main(String[] args) { +// String key = "b947f906d786ddc849dc5d482849b488"; +// String address = "贵阳市花溪大道北段130号"; +// String url = "https://restapi.amap.com/v3/geocode/geo?key="+key+"&address="+address; +// String result= HttpUtil.createRequest(Method.GET, url).execute().body(); +// System.out.println(result); + + + String json = "{\"status\":\"1\",\"info\":\"OK\",\"infocode\":\"10000\",\"count\":\"1\",\"geocodes\":[{\"formatted_address\":\"贵州省贵阳市南明区花溪大道北段130号\",\"country\":\"中国\",\"province\":\"贵州省\",\"citycode\":\"0851\",\"city\":\"贵阳市\",\"district\":\"南明区\",\"township\":[],\"neighborhood\":{\"name\":[],\"type\":[]},\"building\":{\"name\":[],\"type\":[]},\"adcode\":\"520102\",\"street\":\"花溪大道北段\",\"number\":\"130号\",\"location\":\"106.699671,26.570208\",\"level\":\"门牌号\"}]}"; + + + System.out.println(1); + + } + + public DbContext getJslDbContext() { + return new DbContext("test", "jdbc:mysql://192.168.0.9:3306/jsl_mall_qs_test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true", "kpjsl", "123456"); + } + + @Test + @Override + @SneakyThrows + public void syncChannel() { + DbContext dbContext = getJslDbContext(); + String sql = "select 所属系统编号 as channel_code ,所属系统 as channel_name ,二级渠道 as channel_type,'001' as tenant_id" + + " FROM excel_wd GROUP BY 所属系统编号,所属系统,二级渠道"; + List jslChannelList = dbContext.sql(sql).getList(JslChannel.class); + for (JslChannel channel : jslChannelList) { + dbContext.table("bms_channel").setEntity(channel).insert(); + } + } + + @Test + @Override + @SneakyThrows + public void syncPoint() { + DbContext dbContext = getJslDbContext(); + String sql = " select " + + "id, " + + "`所属系统编号` as `channel_code`, " + + "网点编号 as `point_code`, " + + "网点名称 as `point_name`, " + + "`店面面积` as shop_area, " + + "收银台数 as count_checkstand, " + + "`网点等级` as point_level, " + + "`网点类型` as point_type, " + + "`详细地址` as address, " + + "`定位地址` as map_address, " + + "`省份负责人` as province_user, " + + "`城市负责人` as city_user, " + + "`所属分区` as sale_region, " + + "`分区负责人` as sale_region_mgr, " + + "`业务人员` as point_user, " + + "`行政省` as province_name, " + + "`行政市` as city_name, " + + "`行政区县` as area_name " + + " from excel_wd "; + List sourcePointList = dbContext.sql(sql).getList(JslChannelSourcePoint.class); + + String sql2 = "select id,channel_code,channel_name from bms_channel"; + List channelList = dbContext.sql(sql2).getList(JslChannel.class); + + + String sql3 = "select id,name,code,pid,level,path_ids,path_names from bms_region where level = 2 "; + List saleRegionList = dbContext.sql(sql3).getList(JslRegion.class); + + for (JslChannelSourcePoint sourcePoint : sourcePointList) { + System.out.println("id=" + sourcePoint.getId()); + JslChannelPoint channelPoint = JslChannelPoint.toNewObject(sourcePoint); + + JslChannel channel = this.getChannel(sourcePoint.getChannelCode(), channelList); + channelPoint.setChannelId(channel.getId()); + channelPoint.setChannelName(channel.getChannelName()); + + //格式化 + String areaName = sourcePoint.getAreaName(); + if (areaName != null) { + if (areaName.contains("市辖区")) { + areaName = "市辖区"; + } + } + if (areaName != null && sourcePoint.getProvinceName() != null) { + String where = "where name = '" + areaName + "'and path_names like '" + sourcePoint.getProvinceName() + "%'"; + String sql4 = "select id,path_ids,path_names from bms_region2 " + where; + JslRegion bizRegion = dbContext.sql(sql4).getItem(JslRegion.class); + if (bizRegion != null) { + channelPoint.setBizRegionId(bizRegion.getId()); + channelPoint.setBizRegionPath(bizRegion.getPathNames()); + channelPoint.setBizRegionPathIds(bizRegion.getPathIds()); + } + } + channelPoint.setChannelId(channel.getId()); + channelPoint.setChannelName(channel.getChannelName()); + initSaleRegion(saleRegionList, sourcePoint.getProvinceName(), sourcePoint.getSaleRegionMgr(), channelPoint); + + dbContext.table("bms_channel_point").setEntity(channelPoint).insert(); + + } + + } + + @Test + @Override + @SneakyThrows + public void syncPointMgr() { + DbContext dbContext = getJslDbContext(); + String sql = " select " + + "id, " + + "`所属系统编号` as `channel_code`, " + + "网点编号 as `point_code`, " + + "网点名称 as `point_name`, " + + "`店面面积` as shop_area, " + + "收银台数 as count_checkstand, " + + "`网点等级` as point_level, " + + "`网点类型` as point_type, " + + "`详细地址` as address, " + + "`定位地址` as map_address, " + + "`省份负责人` as province_user, " + + "`城市负责人` as city_user, " + + "`所属分区` as sale_region, " + + "`分区负责人` as sale_region_mgr, " + + "`业务人员` as point_user, " + + "`行政省` as province_name, " + + "`行政市` as city_name, " + + "`行政区县` as area_name " + + " from excel_wd where `业务人员` like concat('%',',','%') "; + List sourcePointList = dbContext.sql(sql).getList(JslChannelSourcePoint.class); + for (JslChannelSourcePoint sourcePoint : sourcePointList) { + String sql2 = "select id,point_code from bms_channel_point where point_code='" + sourcePoint.getPointCode() + "'"; + JslChannelPoint channelPoint = dbContext.sql(sql2).getItem(JslChannelPoint.class); + Long pointId = channelPoint.getId(); + //this.saveMgrUser(dbContext, sourcePoint.getProvinceUser(),pointId); + //this.saveMgrUser(dbContext, sourcePoint.getCityUser(),pointId); + //this.saveMgrUser(dbContext, sourcePoint.getSaleRegionMgr(),pointId); + //this.saveMgrUser(dbContext, sourcePoint.getPointUser(),pointId); + String[] uname = sourcePoint.getPointUser().split(","); + for (String userName : uname) { + this.saveMgrUser(dbContext, userName, pointId); + } + } + } + + private void saveMgrUser(DbContext dbContext, String name, Long pointId) throws SQLException { + String sql3 = "select id,name from sys_user where name='" + name + "'"; + JslUser jslUser = dbContext.sql(sql3).getItem(JslUser.class); + if (jslUser == null || jslUser.getId() == null) { + return; + } + JslPointUser pointUser = new JslPointUser(); + pointUser.setType("point"); + pointUser.setTargetId(pointId + ""); + pointUser.setUserId(jslUser.getId()); + pointUser.setTenantId("001"); + dbContext.table("bms_master_user").setEntity(pointUser).insert(); + } + + private JslRegion initSaleRegion(List saleRegionList, String province, String areaMgr, JslChannelPoint channelPoint) { + if (province == null || province.length() < 1) { + return null; + } + if (areaMgr == null || areaMgr.length() < 1) { + return null; + } + for (JslRegion jslRegion : saleRegionList) { + if (jslRegion.getName().contains(province) && jslRegion.getName().contains(areaMgr)) { + channelPoint.setSaleRegionId(jslRegion.getId()); + channelPoint.setSaleRegionPath(jslRegion.getPathNames()); + channelPoint.setSaleRegionPathIds(jslRegion.getPathIds()); + return jslRegion; + } + } + return null; + } + + private JslChannel getChannel(String code, List channelList) { + for (JslChannel channel : channelList) { + if (channel.getChannelCode().equals(code)) { + return channel; + } + } + return null; + } + + @Test + @Override + @SneakyThrows + public void syncSupplierMgr() { + DbContext dbContext = getJslDbContext(); + String sql = "select name,other_user_ids,code from bms_supplier where other_user_ids is not null"; + List jslUserList = dbContext.sql(sql).getList(SupplierMgr.class); + + for (int i = 0; i < jslUserList.size(); i++) { + + System.out.println("jslUserList" + i); + SupplierMgr supplierMgr = jslUserList.get(i); + String sql2 = " select id, 网点编号 as `point_code` from excel_wd" + + " where `所属经销商` like concat('%','" + supplierMgr.getName() + "','%') and `所属经销商编号` like concat('%','" + supplierMgr.getCode() + "','%') "; + List sourcePointList = dbContext.sql(sql2).getList(JslChannelSourcePoint.class); + + String[] userIds = supplierMgr.getOtherUserIds().split(","); + + System.out.println("jslUserList" + i + " user" + userIds.length + " sourcePointList:" + sourcePointList.size()); + for (String userId : userIds) { + for (JslChannelSourcePoint sourcePoint : sourcePointList) { + String sql3 = "select id,point_code from bms_channel_point where point_code='" + sourcePoint.getPointCode() + "'"; + JslChannelPoint channelPoint = dbContext.sql(sql3).getItem(JslChannelPoint.class); + Long pointId = channelPoint.getId(); + JslPointUser pointUser = new JslPointUser(); + pointUser.setType("point"); + pointUser.setTargetId(pointId + ""); + pointUser.setUserId(userId); + pointUser.setTenantId("001"); + dbContext.table("bms_master_user").setEntity(pointUser).insert(); + } + } + } + } + + @Test + @Override + @SneakyThrows + public void jslMasterUser_userId() { + DbContext dbContext = getJslDbContext(); + List userIdList = dbContext.sql("SELECT user_id FROM `bms_master_user` group by user_id").getArray(); + for (String userId : userIdList) { + JslUser jslUser = dbContext.sql("select name,code from sys_user where id = ?", userId).getItem(JslUser.class); + if (jslUser.getName() == null) { + System.out.println(userId); + } + //String sql = "update bms_master_user set user_code=?,user_name=? where user_id = ? and type='point'"; + //dbContext.sql(sql,jslUser.getCode(),jslUser.getName(),userId).execute(); + } + } + + @Test + @Override + @SneakyThrows + public void jslMasterUser_pointId() { + DbContext dbContext = getJslDbContext(); + String srp1 = "省"; + String src2 = "市"; + String sra3 = "区"; + List userIdList = dbContext.sql("SELECT id,address FROM `bms_supplier` where belong is null and address != '' limit 10000 ").getList(JslSupplier.class); + for (JslSupplier jslSupplier : userIdList) { + String address = jslSupplier.getAddress(); + boolean provinceIdx = address.contains(srp1); + boolean cityIdx = address.contains(src2); + boolean areaIdx = address.contains(sra3); + int idxPr = address.indexOf(srp1); + int idxCi = address.indexOf(src2); + int idxAr = address.indexOf(sra3); + if (provinceIdx && cityIdx && areaIdx) { + if (idxAr < idxCi || idxCi < idxPr) { + continue; + } + String prov = address.substring(0, idxPr + 1); + String city = address.substring(idxPr + 1, idxCi + 1); + String area = address.substring(idxCi + 1, idxAr + 1); + //System.out.println(prov+" "+city+" "+area); + String sql = "SELECT path_ids FROM `bms_region2`" + + " where level=3 and path_names like '%" + city + "%' and path_names like '%" + area + "%'"; + Object obj = dbContext.sql(sql).getValue(); + if (obj != null) { + String[] regionIds = obj.toString().split("_"); + JslSupplier upd = new JslSupplier(); + upd.setId(jslSupplier.getId()); + upd.setRegion2First(regionIds[0]); + upd.setRegion2Second(regionIds[1]); + upd.setRegion2Third(regionIds[2]); + upd.setRegion2Last(regionIds[2]); + upd.setBelong("ok"); + dbContext.table("bms_supplier").setEntity(upd).updateBy("id"); + } + } else if (cityIdx && areaIdx) { + try { + if (idxCi > idxAr) { + continue; + } + String city = address.substring(0, idxCi + 1); + String area = address.substring(idxCi + 1, idxAr + 1); + String sql = "SELECT path_ids FROM `bms_region2`" + + " where level=3 and path_names like '%" + city + "%' and path_names like '%" + area + "%'"; + Object obj = dbContext.sql(sql).getValue(); + if (obj != null) { + String[] regionIds = obj.toString().split("_"); + JslSupplier upd = new JslSupplier(); + upd.setId(jslSupplier.getId()); + upd.setRegion2First(regionIds[0]); + upd.setRegion2Second(regionIds[1]); + upd.setRegion2Third(regionIds[2]); + upd.setRegion2Last(regionIds[2]); + upd.setBelong("ok"); + dbContext.table("bms_supplier").setEntity(upd).updateBy("id"); + } + } catch (SQLException e) { + System.out.println("ex1 " + address); + } + } else if (provinceIdx && cityIdx) { + int idxC2 = idxCi + address.substring(idxCi + 1).indexOf(src2); + if (idxC2 != -1) { + if (idxC2 < idxCi || idxCi < idxPr) { + continue; + } + System.out.println(address); + String prov = address.substring(0, idxPr + 1); + String city = address.substring(idxPr + 1, idxCi + 1); + String area = address.substring(idxCi + 1, idxC2 + 1); + + System.out.println(prov + " " + city + " " + area); + String sql = "SELECT path_ids FROM `bms_region2`" + + " where level=3 and path_names like '%" + city + "%' and path_names like '%" + area + "%'"; + Object obj = dbContext.sql(sql).getValue(); + if (obj != null) { + String[] regionIds = obj.toString().split("_"); + JslSupplier upd = new JslSupplier(); + upd.setId(jslSupplier.getId()); + upd.setRegion2First(regionIds[0]); + upd.setRegion2Second(regionIds[1]); + upd.setRegion2Third(regionIds[2]); + upd.setRegion2Last(regionIds[2]); + upd.setBelong("ok"); + dbContext.table("bms_supplier").setEntity(upd).updateBy("id"); + } + } + } + } + } + + @SneakyThrows + @Override + @Test + public void initByGaoDe() { + String key = "b947f906d786ddc849dc5d482849b488"; + //DbContext dbContext = new DbContext("test","jdbc:mysql://183.56.249.148:3306/jsl_cost_base?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true","root","@Jsl2282125"); + DbContext dbContext = DSUtil.getQsDev2(); + List supplierList = dbContext.sql("SELECT id,address FROM `bms_supplier` where length(region2_first) >30 and address is not null and address != '' ").getList(JslSupplier.class); + for (JslSupplier jslSupplier : supplierList) { + String address = jslSupplier.getAddress(); + if (address.length() < 3) { + continue; + } + String url = "https://restapi.amap.com/v3/geocode/geo?key=" + key + "&address=" + address; + String json = HttpUtil.createRequest(Method.GET, url).execute().body(); + JSONObject jsonObject = new JSONObject(json); + JSONArray array = jsonObject.getJSONArray("geocodes"); + String jsonMain = null; + JSONObject jsonObjectMain = null; + try { + jsonMain = array.get(0).toString(); + jsonObjectMain = new JSONObject(jsonMain); + } catch (Exception e) { + System.err.println(json); + } + if (jsonMain == null || jsonObjectMain == null) { + System.err.println(jsonMain); + return; + } + String city = jsonObjectMain.getStr("city"); + String dis = jsonObjectMain.getStr("district"); + if (city == null || dis == null) { + System.err.println(jsonMain); + return; + } + String sql = "SELECT path_ids FROM `bms_region2`" + + " where level=3 and path_names like '%" + city + "%' and path_names like '%" + dis + "%'"; + Object obj = dbContext.sql(sql).getValue(); + if (obj == null) { + String sql2 = "SELECT path_ids FROM `bms_region2`" + + " where level=3 and name = '市辖区' and path_names like '%" + city + "%' limit 1"; + obj = dbContext.sql(sql2).getValue(); + } + if (obj != null) { + String[] regionIds = obj.toString().split("_"); + JslSupplier upd = new JslSupplier(); + upd.setId(jslSupplier.getId()); + upd.setRegion2First(regionIds[0]); + upd.setRegion2Second(regionIds[1]); + upd.setRegion2Third(regionIds[2]); + upd.setRegion2Last(regionIds[2]); + upd.setBelong("ok"); + dbContext.table("bms_supplier").setEntity(upd).updateBy("id"); + System.out.println("ok " + upd.getId()); + } else { + JslSupplier upd = new JslSupplier(); + upd.setId(jslSupplier.getId()); + upd.setRegion2First("0"); + upd.setRegion2Second("0"); + upd.setRegion2Third("0"); + upd.setRegion2Last("0"); + dbContext.table("bms_supplier").setEntity(upd).updateBy("id"); + SetData.supplierIds.add(address); + } + } + for (String supplierId : SetData.supplierIds) { + System.err.println(supplierId); + } + } + + +} diff --git a/src/main/java/com/demo/jsl/service/impl/GoodsServiceImpl.java b/src/main/java/com/demo/jsl/service/impl/GoodsServiceImpl.java new file mode 100644 index 0000000..4c1287b --- /dev/null +++ b/src/main/java/com/demo/jsl/service/impl/GoodsServiceImpl.java @@ -0,0 +1,429 @@ +package com.demo.jsl.service.impl; + +import com.demo.jsl.entity.cate.JslGoodsCategory; +import com.demo.jsl.entity.cate.XltGoodsCategory; +import com.demo.jsl.entity.goods.*; +import com.demo.jsl.service.GoodsService; +import com.demo.util.StringUtils; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.SneakyThrows; +import org.junit.Test; +import org.noear.wood.DbContext; + +import java.math.BigDecimal; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +/** + * @author YenHex + * @since 2023/4/6 + */ +public class GoodsServiceImpl implements GoodsService { + + final String EmptyString = ""; + final String TENANT_ID = "001"; + final String[] ADDRESS_LIST = new String[]{"江西", "开平", "广州", "福建", "淮北", "湖北", "安阳", "东莞", "南京", "河南", "云浮", "产", "厂"}; + final String sqlCountJslSpecValue = "SELECT `id` FROM `goods_spec_value` where spec_id=? and name=?"; + + public DbContext getJslDbContext() { + return new DbContext("test", "jdbc:mysql://192.168.0.9:3306/jsl_mall_qs_dev2?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true", "kpjsl", "123456"); + } + + public DbContext getXltDbContext() { + return new DbContext("xlt", "jdbc:sqlserver://rm-wz93l107hc277n9ieco.sqlserver.rds.aliyuncs.com:3433;DatabaseName=xiaolutong", "qs_db_user", "Aa135246"); + } + + @Test + @Override + @SneakyThrows + public void syncCategory() { + syncCategoryDF(); + DbContext jslDb = getJslDbContext(); + DbContext xltDb = getXltDbContext(); + String sql = "select id,level_ level,seriesName name,parentSeries_id pid,seriesNumber as code,isval sival from emp_product_series_ where level_=? "; + List xltCategoryList_0 = xltDb.sql(sql, 0).getList(XltGoodsCategory.class); + List xltCategoryList_1 = xltDb.sql(sql, 1).getList(XltGoodsCategory.class); + List xltCategoryList_2 = xltDb.sql(sql, 2).getList(XltGoodsCategory.class); + //品牌B、品类C、系列S + Long cateId = 101L; + for (int i = 0; i < xltCategoryList_0.size(); i++) { + XltGoodsCategory xltCategory = xltCategoryList_0.get(i); + xltCategory.setTempId(cateId); + JslGoodsCategory category = new JslGoodsCategory(); + category.setId(cateId); + category.setXltId(xltCategory.getId()); + category.setEnable(xltCategory.getSival().equals(0) ? 1 : 0); + category.setCode("B" + cateId); + category.setParentId(0L); + category.setName(xltCategory.getName()); + category.setLevel(1); + category.setLevelPathNames(xltCategory.getName()); + category.setTenantId("001"); + category.setLevelPath(category.getId() + ""); + jslDb.table("goods_category").setEntity(category).insert(); + cateId++; + } + //品类 + for (XltGoodsCategory xltCategory : xltCategoryList_1) { + xltCategory.setTempId(cateId); + XltGoodsCategory parentCate = null; + for (XltGoodsCategory xltGoodsCategory : xltCategoryList_0) { + if (xltGoodsCategory.getId().equals(xltCategory.getPid())) { + parentCate = xltGoodsCategory; + } + } + if (parentCate == null) { + System.out.println("匹配失败1:cateId=" + xltCategory.getId()); + continue; + } + JslGoodsCategory category = new JslGoodsCategory(); + category.setId(cateId); + category.setXltId(xltCategory.getId()); + category.setEnable(xltCategory.getSival().equals(0) ? 1 : 0); + category.setCode("C" + cateId); + category.setParentId(parentCate.getTempId()); + category.setName(xltCategory.getName()); + category.setLevel(2); + category.setLevelPathNames(parentCate.getName() + "_" + xltCategory.getName()); + category.setTenantId("001"); + category.setLevelPath(parentCate.getTempId() + "_" + category.getId()); + jslDb.table("goods_category").setEntity(category).insert(); + cateId++; + } + //系列 + for (XltGoodsCategory xltCategory : xltCategoryList_2) { + xltCategory.setTempId(cateId); + XltGoodsCategory parentCate = null; + XltGoodsCategory parentCate2 = null; + for (XltGoodsCategory xltGoodsCategory : xltCategoryList_1) { + if (xltGoodsCategory.getId().equals(xltCategory.getPid())) { + parentCate = xltGoodsCategory; + } + } + if (parentCate == null) { + System.out.println("匹配失败2:cateId=" + xltCategory.getId()); + continue; + } + for (XltGoodsCategory xltGoodsCategory : xltCategoryList_0) { + if (xltGoodsCategory.getId().equals(parentCate.getPid())) { + parentCate2 = xltGoodsCategory; + } + } + if (parentCate2 == null) { + System.out.println("匹配失败3:cateId2=" + xltCategory.getId()); + continue; + } + JslGoodsCategory category = new JslGoodsCategory(); + category.setId(cateId); + category.setXltId(xltCategory.getId()); + category.setEnable(xltCategory.getSival().equals(0) ? 1 : 0); + if (xltCategory.getCode() == null) { + category.setCode("S" + cateId); + } else { + category.setCode(xltCategory.getCode()); + } + category.setParentId(parentCate.getTempId()); + category.setName(xltCategory.getName()); + category.setLevel(3); + category.setLevelPathNames(parentCate2.getName() + "_" + parentCate.getName() + "_" + xltCategory.getName()); + category.setTenantId("001"); + category.setLevelPath(parentCate2.getTempId() + "_" + parentCate.getTempId() + "_" + category.getId()); + jslDb.table("goods_category").setEntity(category).insert(); + cateId++; + } + } + + /** + * 检测命名规则错误的 + */ + @Test + @SneakyThrows + public void check() { + DbContext xltDb = getXltDbContext(); + String sql4Product = "SELECT " + + "id, " + + "proNo as code, " + + "product as name, " + + "spec as price, " + + "proWeight as weight, " + + "chestCasing as bg_sku, " + + "productSeries as spu_id, " + + "taste as taste_sku, " + + "factoryPriceChest as price " + + "FROM Product where isval = 0"; + List goodsList = xltDb.sql(sql4Product).getList(XltGoods.class); + for (XltGoods xltGoods : goodsList) { + splitName(xltGoods); + } + } + + @Test + @Override + @SneakyThrows + public void syncGoods() { + DbContext xltDb = getXltDbContext(); + DbContext jslDb = getJslDbContext(); + String sql4Product = "SELECT " + + "id, " + + "proNo as code, " + + "product as name, " + + "spec as price, " + + "proWeight as weight, " + + "chestCasing as bg_sku, " + + "productSeries as spu_id, " + + "taste as taste_sku, " + + "factoryPriceChest as price, " + + "isval as stopval " + + //"FROM Product where isval = 0 and [product] not LIKE '%停用%'"; + "FROM Product "; + String sqlCountJslSku = "SELECT count(1) FROM `goods_sku` where sku_code=?"; + String sql4XltSpu = "select id,level_ level,seriesName name,parentSeries_id pid,seriesNumber as code from emp_product_series_ where id = ?"; + String sql4CountSku = "SELECT count(1) FROM Product WHERE productSeries =?"; + List goodsList = xltDb.sql(sql4Product).getList(XltGoods.class); + //循环SKU + int count = 0; + for (XltGoods xltGoods : goodsList) { + count++; + System.out.println(count + "/" + goodsList.size()); + Integer shelf = xltGoods.getStopval() != null && xltGoods.getStopval().equals(0) ? 1 : 0; + String goodsTitle = xltGoods.getName(); + if (goodsTitle.contains("删除")) { + continue; + } + //判断商品编码是否存在 + long count4Spu = jslDb.sql(sqlCountJslSku, xltGoods.getCode()).getCount(); + if (count4Spu > 0) { + continue; + } + GoodsNameDto goodsNameDto = splitName(xltGoods); + String address = "待定"; + String packageSku = xltGoods.getBgSku(); + //当对象为空,则无匹配的产地, + if (goodsNameDto != null) { + address = goodsNameDto.getAddress(); + if (address.contains("开平")) { + address = "开平"; + } + packageSku = goodsNameDto.getBagSku().equals(EmptyString) ? + xltGoods.getBgSku() : xltGoods.getBgSku() + goodsNameDto.getBagSku(); + } else { + //如果只有一个sku,则默认开平 + long countSku = xltDb.sql(sql4CountSku, xltGoods.getSpuId()).getCount(); + if (countSku == 1L) { + address = "开平"; + } + } + String tasteSku = xltGoods.getTasteSku(); + if (tasteSku == null || packageSku == null || tasteSku.length() < 1 || packageSku.length() < 1) { + if (tasteSku == null || tasteSku.length() < 1) { + tasteSku = "默认"; + } + if (packageSku == null || packageSku.length() < 1) { + packageSku = "默认"; + } + } + //判断是否已保存spu,返回spuId + String sql4JslSpu = "select id from goods_spu where xlt_id = ?"; + Long spuId = jslDb.sql(sql4JslSpu, xltGoods.getSpuId()).getDataItem().getLong("id"); + if (spuId == null) { + //加载销路通spu + XltSpu xltSpu = xltDb.sql(sql4XltSpu, xltGoods.getSpuId()).getItem(XltSpu.class); + spuId = StringUtils.genShortLong(); + String xltSpuId = xltSpu.getId(); + JslGoodSpu goodSpu = new JslGoodSpu(); + goodSpu.setId(spuId); + goodSpu.setSpuCode(xltSpu.getCode()); + goodSpu.setName(xltSpu.getName()); + goodSpu.setTasteValue(tasteSku); + goodSpu.setTenantId(TENANT_ID); + goodSpu.setCostFlag(1); + goodSpu.setShelf(shelf); + goodSpu.setXltId(xltSpuId); + //加载类目,如果类目找不到,默认转入到待定类目 + JslGoodsCategory category = jslDb.sql("select level_path from goods_category where xlt_id = ?", xltSpu.getPid()).getItem(JslGoodsCategory.class); + if (category != null && category.getLevelPath() != null) { + String[] cateIdList = category.getLevelPath().split("_"); + if (cateIdList.length == 3) { + goodSpu.setCategoryFirst(cateIdList[0]); + goodSpu.setCategorySecond(cateIdList[1]); + goodSpu.setCategoryThird(cateIdList[2]); + goodSpu.setCategoryLast(cateIdList[2]); + } else { + goodSpu.setCategoryFirst("1"); + goodSpu.setCategorySecond("2"); + goodSpu.setCategoryThird("3"); + goodSpu.setCategoryLast("3"); + } + } else { + goodSpu.setCategoryFirst("1"); + goodSpu.setCategorySecond("2"); + goodSpu.setCategoryThird("3"); + goodSpu.setCategoryLast("3"); + } + + //保存spu + jslDb.table("goods_spu").setEntity(goodSpu).insert(); + } + //保存sku + JslGoodsSku goodsSku = new JslGoodsSku(); + goodsSku.setId(StringUtils.genShortLong()); + goodsSku.setSkuCode(xltGoods.getCode()); + goodsSku.setSpuId(spuId); + goodsSku.setPicUrl(""); + goodsSku.setSpecInfos(packageSku + ";" + tasteSku + ";" + address); + BigDecimal price = new BigDecimal(xltGoods.getPrice()); + goodsSku.setSalesPrice(price); + goodsSku.setMarketPrice(price); + goodsSku.setCostPrice(price); + goodsSku.setCostFlag(1); + goodsSku.setEnable(shelf); + goodsSku.setTenantId(TENANT_ID); + jslDb.table("goods_sku").setEntity(goodsSku).insert(); + //保存spec + List specValueIds = new ArrayList<>(); + specValueIds.add(initSpecValue(jslDb, 3L, address)); + specValueIds.add(initSpecValue(jslDb, 2L, packageSku)); + specValueIds.add(initSpecValue(jslDb, 1L, tasteSku)); + for (long i = 1; i < 4; i++) { + JslSpuSpec spuSpec = new JslSpuSpec(); + spuSpec.setSpuId(spuId); + spuSpec.setSpecId(i); + spuSpec.setTenantId(TENANT_ID); + jslDb.table("goods_spu_spec").setEntity(spuSpec).insert(); + } + //保存sku与规格值 + for (Long specValueId : specValueIds) { + JslGoodsSkuSpecValue skuSpecValue = new JslGoodsSkuSpecValue(); + skuSpecValue.setSpuId(spuId); + skuSpecValue.setSkuId(goodsSku.getId()); + skuSpecValue.setSpecValueId(specValueId); + skuSpecValue.setTenantId(TENANT_ID); + jslDb.table("goods_sku_spec_value").setEntity(skuSpecValue).insert(); + } + + } + } + + private GoodsNameDto splitName(XltGoods xltGoods) { + final String name = xltGoods.getName(); + String productName = name.replace("厂", "产"); + String defaultAddress = null; + for (String address : ADDRESS_LIST) { + if (productName.contains(address)) { + defaultAddress = address; + } + } + if (defaultAddress == null) { + System.err.println("============未命中产地====》" + xltGoods); + return null; + } + productName = productName.replace("(", "(").replace(")", ")"); + String address = EmptyString; + if (productName.contains("(")) { + address = productName.substring(productName.lastIndexOf("(")).trim(); + productName = productName.replace(address, ""); + } + String bagSku = EmptyString; + if (productName.contains("(")) { + bagSku = productName.substring(productName.lastIndexOf("(")).trim(); + } + address = address.replace("(", EmptyString).replace(")", EmptyString); + if (address.contains(defaultAddress)) { + address = address.replace("产", ""); + return new GoodsNameDto(productName, address, bagSku); + } else { + if (productName.contains("产")) { + String[] tmps = productName.split("\\("); + for (String tmp : tmps) { + if (tmp.contains(")")) { + String[] tmps2 = tmp.split("\\)"); + for (String tmp2 : tmps2) { + if (tmp2.contains("产")) { + tmp2 = tmp2.replace("产", ""); + return new GoodsNameDto(productName, tmp2, bagSku); + } + } + } + + } + } + System.err.println("============未命中产地====》" + xltGoods); + } + return null; + } + + /** + * 初始化规格值 + * + * @param jslDb + * @param specId + * @param specValueName + * @throws SQLException + */ + private Long initSpecValue(DbContext jslDb, Long specId, String specValueName) throws SQLException { + Long specValueId = jslDb.sql(sqlCountJslSpecValue, specId, specValueName).getDataItem().getLong("id"); + if (specValueId == null) { + JslGoodSpecValue specValue = new JslGoodSpecValue(); + specValueId = StringUtils.genShortLong(); + specValue.setId(specValueId); + specValue.setTenantId("001"); + specValue.setSpecId(specId); + specValue.setName(specValueName); + jslDb.table("goods_spec_value").setEntity(specValue).insert(); + return specValueId; + } + return specValueId; + } + + @SneakyThrows + private void syncCategoryDF() { + DbContext jslDb = getJslDbContext(); + JslGoodsCategory category = new JslGoodsCategory(); + category.setId(1L); + category.setEnable(1); + category.setCode("B000"); + category.setParentId(0L); + category.setName("未分组"); + category.setLevel(1); + category.setLevelPathNames("未分组"); + category.setTenantId("001"); + category.setLevelPath("1"); + jslDb.table("goods_category").setEntity(category).insert(); + + JslGoodsCategory category2 = new JslGoodsCategory(); + category2.setId(2L); + category2.setEnable(1); + category2.setCode("C000"); + category2.setParentId(0L); + category2.setName("未分组"); + category2.setLevel(2); + category2.setLevelPathNames("未分组"); + category2.setTenantId("001"); + category2.setLevelPath("1_2"); + jslDb.table("goods_category").setEntity(category2).insert(); + + JslGoodsCategory category3 = new JslGoodsCategory(); + category3.setId(3L); + category3.setEnable(1); + category3.setCode("S000"); + category3.setParentId(0L); + category3.setName("未分组"); + category3.setLevel(3); + category3.setLevelPathNames("未分组"); + category3.setTenantId("001"); + category3.setLevelPath("1_2_3"); + jslDb.table("goods_category").setEntity(category3).insert(); + + } + + @Getter + @AllArgsConstructor + private static class GoodsNameDto { + String productName; + String address; + String bagSku; + } + +} diff --git a/src/main/java/com/demo/jsl/service/impl/RegionServiceImpl.java b/src/main/java/com/demo/jsl/service/impl/RegionServiceImpl.java new file mode 100644 index 0000000..c8a74ec --- /dev/null +++ b/src/main/java/com/demo/jsl/service/impl/RegionServiceImpl.java @@ -0,0 +1,91 @@ +package com.demo.jsl.service.impl; + +import com.demo.jsl.entity.region.JslRegion; +import com.demo.jsl.entity.region.SorRegion; +import com.demo.jsl.service.RegionService; +import lombok.SneakyThrows; +import org.junit.Test; +import org.noear.wood.DbContext; + +import java.util.List; + +/** + * @author YenHex + * @since 2023/4/6 + */ +public class RegionServiceImpl implements RegionService { + + public DbContext getJslDbContext() { + return new DbContext("test", "jdbc:mysql://192.168.0.9:3306/jsl_mall_qs_test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true", "kpjsl", "123456"); + } + + @Test + @Override + @SneakyThrows + public void syncBizRegion() { + DbContext dbContext = getJslDbContext(); + List provinceList = dbContext.sql("select province_id, province from test_province").getList(SorRegion.class); + String sqlCity = "SELECT" + + " city_id ," + + " city," + + " pro.province_id," + + " pro.province " + + "FROM " + + " `test_city` city " + + " LEFT JOIN `test_province` pro ON pro.province_id = city.fatherID"; + String areaSql = "SELECT " + + " area_id, " + + " area, " + + " city_id , " + + " city, " + + " pro.province_id, " + + " pro.province " + + "FROM " + + " `test_area` area " + + " LEFT JOIN `test_city` city ON city.city_id = area.fatherID " + + " LEFT JOIN `test_province` pro ON pro.province_id = city.fatherID;"; + List cityList = dbContext.sql(sqlCity).getList(SorRegion.class); + List areaList = dbContext.sql(areaSql).getList(SorRegion.class); + for (SorRegion sorRegion : provinceList) { + JslRegion region = new JslRegion(); + region.setId(sorRegion.getProvinceId()); + region.setName(sorRegion.getProvince()); + region.setCode(sorRegion.getProvinceId()); + region.setPid("0"); + region.setLevel(1); + region.setPathIds(sorRegion.getProvinceId()); + region.setPathNames(sorRegion.getProvince()); + region.setTenantId("001"); + dbContext.table("bms_region2").setEntity(region).insert(); + } + + for (SorRegion sorRegion : cityList) { + JslRegion region = new JslRegion(); + region.setId(sorRegion.getCityId()); + region.setName(sorRegion.getCity()); + region.setCode(sorRegion.getCityId()); + region.setPid(sorRegion.getProvinceId()); + region.setLevel(2); + region.setPathIds(sorRegion.getProvinceId() + "_" + sorRegion.getCityId()); + region.setPathNames(sorRegion.getProvince() + "_" + sorRegion.getCity()); + region.setTenantId("001"); + dbContext.table("bms_region2").setEntity(region).insert(); + } + + for (SorRegion sorRegion : areaList) { + JslRegion region = new JslRegion(); + region.setId(sorRegion.getAreaId()); + region.setName(sorRegion.getArea()); + region.setCode(sorRegion.getAreaId()); + region.setPid(sorRegion.getCityId()); + region.setLevel(3); + region.setPathIds(sorRegion.getProvinceId() + "_" + sorRegion.getCityId() + "_" + sorRegion.getAreaId()); + region.setPathNames(sorRegion.getProvince() + "_" + sorRegion.getCity() + "_" + sorRegion.getArea()); + region.setTenantId("001"); + dbContext.table("bms_region2").setEntity(region).insert(); + } + + } + + +} diff --git a/src/main/java/com/demo/jsl/service/impl/SysServiceImpl.java b/src/main/java/com/demo/jsl/service/impl/SysServiceImpl.java new file mode 100644 index 0000000..75be21f --- /dev/null +++ b/src/main/java/com/demo/jsl/service/impl/SysServiceImpl.java @@ -0,0 +1,432 @@ +package com.demo.jsl.service.impl; + +import com.demo.jsl.entity.dept.JslDept; +import com.demo.jsl.entity.dept.SeeYonDept; +import com.demo.jsl.entity.user.*; +import com.demo.jsl.service.SysService; +import com.demo.util.StringUtils; +import lombok.SneakyThrows; +import org.junit.Test; +import org.noear.wood.DbContext; + +import java.sql.SQLException; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * @author YenHex + * @since 2023/4/4 + */ +public class SysServiceImpl implements SysService { + + DbContext jslCtx; + DbContext xltCtx; + + public DbContext getJslDbContext() { + if (jslCtx == null) { + jslCtx = new DbContext("test", "jdbc:mysql://192.168.0.9:3306/jsl_mall_qs_dev?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true", "kpjsl", "123456"); + } + return jslCtx; + } + + public DbContext getXltDbContext() { + if (xltCtx == null) { + //return new DbContext("xlt","jdbc:sqlserver://rm-wz93l107hc277n9ieco.sqlserver.rds.aliyuncs.com:3433;DatabaseName=ceshi","qs_db_user","Aa135246"); + xltCtx = new DbContext("xlt", "jdbc:sqlserver://rm-wz93l107hc277n9ieco.sqlserver.rds.aliyuncs.com:3433;DatabaseName=xiaolutong", "qs_db_user", "Aa135246"); + } + return xltCtx; + } + + public DbContext getSeeYonDbContext() { + return new DbContext("oa", "jdbc:sqlserver://192.168.10.157:1433;DatabaseName=OAdata", "sa", "JSL2282125"); + } + + + @Test + @Override + public void syncPost() throws Exception { + DbContext jslDb = getJslDbContext(); + DbContext seeYonDb = getSeeYonDbContext(); + + } + + @Override + @Test + public void syncDept() throws Exception { + DbContext jslDb = getJslDbContext(); + DbContext seeYonDb = getSeeYonDbContext(); + List deptList = seeYonDb + .sql("SELECT id,name,code,path,len(PATH) len FROM [dbo].[ORG_UNIT] where is_deleted=0 and IS_INTERNAL=1 and IS_ENABLE = 1 ORDER BY len(PATH),SORT_ID") + .getList(SeeYonDept.class); + Map> seeYonDeptMap = deptList.stream().collect(Collectors.groupingBy(SeeYonDept::getLen)); + for (int i = 4; i < 44; i += 4) { + List parentDeptList = seeYonDeptMap.get(i - 4); + List currDeptList = seeYonDeptMap.get(i); + if (currDeptList == null) { + continue; + } + for (SeeYonDept seeYonDept : currDeptList) { + String pCode = seeYonDept.getPath().substring(0, seeYonDept.getPath().length() - 4); + SeeYonDept parentDept = null; + if (parentDeptList != null) { + for (SeeYonDept dept : parentDeptList) { + if (dept.getPath().equals(pCode)) { + parentDept = dept; + break; + } + } + } + JslDept dept = new JslDept(); + dept.setId(seeYonDept.getId() + ""); + dept.setName(seeYonDept.getName()); + if (seeYonDept.getCode() == null || seeYonDept.getCode().length() < 1) { + dept.setCode("DP" + i); + } else { + dept.setCode(seeYonDept.getCode()); + } + dept.setParentId(parentDept == null ? "0" : parentDept.getId().toString()); + dept.setTenantId("001"); + jslDb.table("sys_dept").setEntity(dept).insert(); + } + } + + } + + + @Test + @Override + public void syncUser() throws Exception { + DbContext jslDb = getJslDbContext(); + DbContext seeYonDb = getSeeYonDbContext(); + String sql = + "select o2.id,code,name,ORG_DEPARTMENT_ID dept_id, ORG_POST_ID post_id,EXT_ATTR_1 mobile " + + "from ORG_PRINCIPAL o1 " + + "inner join ORG_MEMBER o2 on o1.MEMBER_ID = o2.id " + + "where ORG_DEPARTMENT_ID != '-1' and o2.IS_DELETED=0 and o2.state = 1"; + List syUserList = seeYonDb + .sql(sql) + .getList(SyUser.class); + List postList = jslDb.sql("select * from sys_post").getList(JslPost.class); + for (SyUser syUser : syUserList) { + if (syUser.getCode() == null || syUser.getCode().length() < 1) { + continue; + } + JslUser jslUser = new JslUser(); + jslUser.setId(syUser.getId() + ""); + jslUser.setMobile(syUser.getMobile()); + jslUser.setAccount(syUser.getCode()); + jslUser.setName(syUser.getName()); + jslUser.setCode(syUser.getCode()); + jslUser.setPassword(""); + jslUser.setDeptId(syUser.getDeptId() + ""); + + jslUser.setLoginEnable(1); + jslUser.setServingState(1); + jslUser.setSalesFlag(0); + //jslUser.setIdentityNo(); + jslUser.setSyAccount(syUser.getCode()); + jslUser.setSyUserId(syUser.getId() + ""); + jslUser.setTenantId("001"); + try { + jslDb.table("sys_user").setEntity(jslUser).insert(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + } + + + @Test + @Override + @SneakyThrows + public void syncInitUserMobile() { + DbContext proMallCtx = new DbContext("test", "jdbc:mysql://183.56.249.148:3306/jsl_cost_base?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true", "root", "@Jsl2282125"); + List data0508List = proMallCtx.sql("SELECT * FROM excel_shee").getList(ExcelData0508.class); + for (ExcelData0508 data0508 : data0508List) { + String code = data0508.getCode(); + JslUser jslUser = proMallCtx.sql("select id,account,mobile,code from sys_user where account = ?", code).getItem(JslUser.class); + if (jslUser == null) { + jslUser = new JslUser(); + jslUser.setId(data0508.getCode()); + jslUser.setMobile(data0508.getMobile()); + jslUser.setAccount(code); + jslUser.setCode(code); + jslUser.setName(data0508.getName()); + jslUser.setTenantId("001"); + proMallCtx.table("sys_user").setEntity(jslUser).insert(); + } else { + proMallCtx.sql("update sys_user set mobile = ? where id = ?", data0508.getMobile(), jslUser.getId()).execute(); + } + } + } + + @Test + @Override + @SneakyThrows + public void syncUserSaleRelate() { + DbContext xltCtx = getXltDbContext(); + DbContext devMallCtx = new DbContext("test", "jdbc:mysql://183.56.249.148:3306/jsl_cost_base?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true", "root", "@Jsl2282125"); + List userRoles = devMallCtx.sql( + "select empNo emp_no,empName emp_name, parentRoleId parent_rid from excel_sheet1").getList(ExcelUserRole.class); + for (ExcelUserRole userRole : userRoles) { + String sql1 = "SELECT role.roleid,emp.numNo as num,emp.name,emp.mobileTel as mobile FROM UserRole role " + + " LEFT JOIN sysuser ON role.userID = sysuser.id" + + " LEFT JOIN Employee emp ON emp.id = sysuser.employeeID where role.roleid = '" + userRole.getParentRid() + "'"; + List xltUserRoles = xltCtx.sql(sql1).getList(XltUserRole.class); + for (XltUserRole xltUserRoleParent : xltUserRoles) { + String num1 = userRole.getEmpNo(); + String numParent = xltUserRoleParent.getNum(); + String jslUserId = this.getJslUserByCode(num1, devMallCtx); + if (jslUserId == null) { +// jslUserId = IdUtil.nanoId(); +// JslUser jslUser = new JslUser(); +// jslUser.setId(jslUserId); +// jslUser.setAccount(userRole.getEmpNo()); +// jslUser.setMobile(""); +// jslUser.setName(userRole.getEmpName()); +// jslUser.setCode(userRole.getEmpNo()); +// jslUser.setPassword(""); +// jslUser.setDeptId(""); +// jslUser.setLoginEnable(1); +// jslUser.setServingState(1); +// jslUser.setSalesFlag(0); +// //jslUser.setIdentityNo(); +// jslUser.setTenantId("001"); +// devMallCtx.table("sys_user").setEntity(jslUser).insert(); + continue; + } + String jslUserParentId = this.getJslUserByCode(numParent, devMallCtx); + if (jslUserParentId == null) { + jslUserParentId = this.getJslUserByMobile(xltUserRoleParent.getMobile(), devMallCtx); + } + if (jslUserParentId == null) { +// jslUserParentId = IdUtil.nanoId(); +// JslUser jslUser = new JslUser(); +// jslUser.setId(jslUserParentId); +// jslUser.setAccount(xltUserRoleParent.getNum()); +// jslUser.setMobile(""); +// jslUser.setName(xltUserRoleParent.getName()); +// jslUser.setCode(xltUserRoleParent.getNum()); +// jslUser.setPassword(""); +// jslUser.setDeptId(""); +// jslUser.setLoginEnable(1); +// jslUser.setServingState(1); +// jslUser.setSalesFlag(0); +// //jslUser.setIdentityNo(); +// jslUser.setTenantId("001"); +// devMallCtx.table("sys_user").setEntity(jslUser).insert(); + continue; + } + SysUserSales sysUserSales = new SysUserSales(); + sysUserSales.setUserId(jslUserId); + sysUserSales.setPid(jslUserParentId); + sysUserSales.setTenantId("001"); + try { + devMallCtx.table("sys_user_sales").setEntity(sysUserSales).insert(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + + + } + + @Test + public void print111() { + String sqlsy = + "select o2.id,code,name,ORG_DEPARTMENT_ID dept_id, ORG_POST_ID post_id,EXT_ATTR_1 mobile " + + "from ORG_PRINCIPAL o1 " + + "inner join ORG_MEMBER o2 on o1.MEMBER_ID = o2.id " + + "where ORG_DEPARTMENT_ID != '-1' and o2.IS_DELETED=0 and o2.state = 1 and name = ?"; + System.out.println(sqlsy); + } + + @Test + @SneakyThrows + @Override + public void syncUserRole() { + DbContext jslCtx = new DbContext("test", "jdbc:mysql://192.168.0.9:3306/jsl_mall_qs_dev?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true", "kpjsl", "123456"); + //DbContext jslCtx = new DbContext("test","jdbc:mysql://183.56.249.148:3306/jsl_cost_base?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true","root","@Jsl2282125"); + DbContext seeYonDb = getSeeYonDbContext(); + DbContext xltCtx = getXltDbContext(); + String sqlMgr = "SELECT Employee.numNo num,Employee.name,UserRole.roleID roleid FROM UserRole" + + " LEFT JOIN SysUser ON SysUser.ID = UserRole.userID" + + " LEFT JOIN Employee ON Employee.ID = SysUser.employeeID where Employee.status_ = '1'"; + List xltUserRoles = xltCtx.sql(sqlMgr).getList(XltUserRole.class); + Map> xltUserRolesMapByRid = xltUserRoles.stream().collect(Collectors.groupingBy(XltUserRole::getRoleid)); + String sql = "SELECT id,roleName role_name,superID pid,remark FROM [dbo].[Role] WHERE (superID is null or superID = '') and isval = '0'"; + List xltRoles = xltCtx.sql(sql).getList(XltRole.class); + Set errList = new HashSet<>(); + for (XltRole rootRole : xltRoles) { + List currRoleUsers = xltUserRolesMapByRid.get(rootRole.getId()); + String sql2 = "SELECT id,roleName role_name,superID pid FROM [dbo].[Role] WHERE superID =? and isval = '0'"; + List childRoles = xltCtx.sql(sql2, rootRole.getId()).getList(XltRole.class); + boolean noMgr = currRoleUsers == null || currRoleUsers.size() < 1; + if (childRoles.size() < 1 && noMgr) { + continue; + } + JslPost parPost = new JslPost(); + parPost.setId(rootRole.getId()); + parPost.setPostCode("R" + StringUtils.get1000Add()); + parPost.setPostName(rootRole.getRoleName()); + parPost.setPid("0"); + parPost.setPathIds(rootRole.getId()); + parPost.setPathNames(rootRole.getRoleName()); + parPost.setRemark(rootRole.getRemark()); + jslCtx.table("sys_post").setEntity(parPost).insert(); + if (currRoleUsers != null) { + for (XltUserRole roleUser : currRoleUsers) { + String userId = null; + userId = getUserIdAndInitUser(jslCtx, seeYonDb, roleUser); + if (userId == null) { + String err = roleUser.getNum() + "+++" + roleUser.getName(); + errList.add(err); + continue; + } + JslPostUser jslPostUser = new JslPostUser(); + jslPostUser.setUserId(userId); + jslPostUser.setUserCode(roleUser.getNum()); + jslPostUser.setUserName(roleUser.getName()); + jslPostUser.setPostId(parPost.getId()); + jslPostUser.setPostName(parPost.getPostName()); + jslPostUser.setPostCode(parPost.getPostCode()); + jslPostUser.setPid(parPost.getPid()); + jslPostUser.setPathIds(parPost.getPathIds()); + jslPostUser.setPathNames(parPost.getPathNames()); + jslCtx.table("sys_post_user").setEntity(jslPostUser).insert(); + } + } + doChildPost(childRoles, parPost, xltUserRolesMapByRid, jslCtx, errList, seeYonDb); + } + errList.forEach(System.out::println); + } + + private String getUserIdAndInitUser(DbContext jslCtx, DbContext seeYonDb, XltUserRole roleUser) throws Exception { + String userId = null; + try { + userId = this.getJslUserByCode(roleUser.getNum(), jslCtx); + } catch (Exception e) { + e.printStackTrace(); + } + if (userId == null) { + String sqlsy = + "select o2.id,code,name,ORG_DEPARTMENT_ID dept_id, ORG_POST_ID post_id,EXT_ATTR_1 mobile " + + "from ORG_PRINCIPAL o1 " + + "inner join ORG_MEMBER o2 on o1.MEMBER_ID = o2.id " + + "where ORG_DEPARTMENT_ID != '-1' and o2.IS_DELETED=0 and o2.state = 1 and name = ?"; + List syUserList = seeYonDb + .sql(sqlsy, roleUser.getName()) + .getList(SyUser.class); + for (SyUser syUser : syUserList) { + userId = this.getJslUserByCode(syUser.getCode(), jslCtx); + if (userId != null) { + return userId; + } + } + SyUser syUser = null; + if (syUserList.size() == 1) { + syUser = syUserList.get(0); + + } else if (syUserList.size() > 1) { + if (roleUser.getNum() == null || roleUser.getNum().length() < 5) { + return null; + } + String num = roleUser.getNum().substring(roleUser.getNum().length() - 4); + for (SyUser syUser2 : syUserList) { + String num2 = syUser2.getCode().substring(syUser2.getCode().length() - 4); + if (num.equals(num2)) { + syUser = syUser2; + break; + } + } + } + if (syUser != null) { + userId = syUser.getId() + ""; + //设置编码替换旧编码 + roleUser.setNum(syUser.getCode()); + //新增用户 + System.out.println("新增用户 code:" + syUser.getCode() + " name:" + syUser.getName()); + JslUser jslUser = new JslUser(); + jslUser.setId(syUser.getId() + ""); + jslUser.setMobile(syUser.getMobile()); + jslUser.setAccount(syUser.getCode()); + jslUser.setName(syUser.getName()); + jslUser.setCode(syUser.getCode()); + jslUser.setPassword(""); + jslUser.setDeptId(syUser.getDeptId() + ""); + jslUser.setLoginEnable(1); + jslUser.setServingState(1); + jslUser.setSalesFlag(0); + jslUser.setSyAccount(syUser.getCode()); + jslUser.setSyUserId(syUser.getId() + ""); + jslUser.setTenantId("001"); + jslCtx.table("sys_user").setEntity(jslUser).insert(); + } + } + return userId; + } + + + @SneakyThrows + public void doChildPost(List childRoles, JslPost parPost, Map> xltUserRolesMapByRid, DbContext jslCtx, Set errList, DbContext seeYonDb) { + for (XltRole childRole : childRoles) { + JslPost cPost = new JslPost(); + cPost.setId(childRole.getId()); + cPost.setPostCode("C" + StringUtils.get1000Add()); + cPost.setPostName(childRole.getRoleName()); + cPost.setPid(parPost.getId()); + cPost.setPathIds(parPost.getPathIds() + "_" + childRole.getId()); + cPost.setPathNames(parPost.getPathNames() + "_" + childRole.getRoleName()); + cPost.setRemark(childRole.getRemark()); + jslCtx.table("sys_post").setEntity(cPost).insert(); + + List currRoleUsers = xltUserRolesMapByRid.get(childRole.getId()); + String sql2 = "SELECT id,roleName role_name,superID pid FROM [dbo].[Role] WHERE superID =? and isval = '0'"; + List childRoles2 = xltCtx.sql(sql2, cPost.getId()).getList(XltRole.class); + boolean noMgr = currRoleUsers == null || currRoleUsers.size() < 1; + if (childRoles2.size() < 1 && noMgr) { + continue; + } + //设置权限 + if (currRoleUsers != null) { + for (XltUserRole roleUser : currRoleUsers) { + String userId = getUserIdAndInitUser(jslCtx, seeYonDb, roleUser); + if (userId == null) { + String err = roleUser.getNum() + "+++" + roleUser.getName(); + errList.add(err); + continue; + } + JslPostUser jslPostUser = new JslPostUser(); + jslPostUser.setUserId(userId); + jslPostUser.setUserCode(roleUser.getNum()); + jslPostUser.setUserName(roleUser.getName()); + jslPostUser.setPostId(cPost.getId()); + jslPostUser.setPostName(cPost.getPostName()); + jslPostUser.setPostCode(cPost.getPostCode()); + jslPostUser.setPid(cPost.getPid()); + jslPostUser.setPathIds(cPost.getPathIds()); + jslPostUser.setPathNames(cPost.getPathNames()); + jslCtx.table("sys_post_user").setEntity(jslPostUser).insert(); + } + } + doChildPost(childRoles2, cPost, xltUserRolesMapByRid, jslCtx, errList, seeYonDb); + } + } + + + public String getJslUserByCode(String code, DbContext devMallCtx) throws Exception { + JslUser jslUser = devMallCtx.sql("select id from sys_user where code = ?", code).getItem(JslUser.class); + return jslUser.getId(); + } + + public String getJslUserByMobile(String mobile, DbContext devMallCtx) throws Exception { + JslUser jslUser = devMallCtx.sql("select id from sys_user where mobile = ?", mobile).getItem(JslUser.class); + return jslUser.getId(); + } + +} diff --git a/src/main/java/com/demo/t20230616/CenterInfoDto.java b/src/main/java/com/demo/t20230616/CenterInfoDto.java new file mode 100644 index 0000000..ee25d93 --- /dev/null +++ b/src/main/java/com/demo/t20230616/CenterInfoDto.java @@ -0,0 +1,17 @@ +package com.demo.t20230616; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/6/16 + **/ +@Data +public class CenterInfoDto { + + String id; + String code; + String name; + String type; + +} diff --git a/src/main/java/com/demo/t20230616/CodeNameDTO.java b/src/main/java/com/demo/t20230616/CodeNameDTO.java new file mode 100644 index 0000000..cbc2319 --- /dev/null +++ b/src/main/java/com/demo/t20230616/CodeNameDTO.java @@ -0,0 +1,16 @@ +package com.demo.t20230616; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/6/16 + **/ +@Data +public class CodeNameDTO { + + String code; + + String name; + +} diff --git a/src/main/java/com/demo/t20230616/JslBmsCenter.java b/src/main/java/com/demo/t20230616/JslBmsCenter.java new file mode 100644 index 0000000..7466515 --- /dev/null +++ b/src/main/java/com/demo/t20230616/JslBmsCenter.java @@ -0,0 +1,16 @@ +package com.demo.t20230616; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/6/16 + **/ +@Data +public class JslBmsCenter { + + Long id; + String code; + String name; + +} diff --git a/src/main/java/com/demo/t20230616/JslBmsCostCenter.java b/src/main/java/com/demo/t20230616/JslBmsCostCenter.java new file mode 100644 index 0000000..2fa26e6 --- /dev/null +++ b/src/main/java/com/demo/t20230616/JslBmsCostCenter.java @@ -0,0 +1,47 @@ +package com.demo.t20230616; + +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.time.LocalDateTime; +import java.util.List; + +/** + * 成本中心 实体类 + * @author YenHex + * @since 2022-11-11 + */ +@Data +public class JslBmsCostCenter implements Serializable { + + private static final long serialVersionUID = 1L; + + /** id */ + private Long id; + + /** 编码 */ + private String code; + + /** 名称 */ + private String name; + + /** 层级 */ + private Integer level; + + /** 父级节点 */ + private Long pid; + + + /** 备注 */ + private String remark; + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + + +} + diff --git a/src/main/java/com/demo/t20230616/JslBmsSupplier.java b/src/main/java/com/demo/t20230616/JslBmsSupplier.java new file mode 100644 index 0000000..df61045 --- /dev/null +++ b/src/main/java/com/demo/t20230616/JslBmsSupplier.java @@ -0,0 +1,28 @@ +package com.demo.t20230616; + +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +/** + * @author YenHex + * @since 2023/1/10 + */ +@Data +public class JslBmsSupplier { + + /** + * id + */ + private Long id; + + /** + * 名称 + */ + private String name; + + /** + * 客户编码 + */ + private String code; + +} diff --git a/src/main/java/com/demo/t20230616/JslGoodsCategory.java b/src/main/java/com/demo/t20230616/JslGoodsCategory.java new file mode 100644 index 0000000..19676f5 --- /dev/null +++ b/src/main/java/com/demo/t20230616/JslGoodsCategory.java @@ -0,0 +1,43 @@ +package com.demo.t20230616; + +import lombok.Data; +import java.io.Serializable; + +/** + * 分类 实体类 + * @author YenHex + * @since 2022-10-09 + */ +@Data +public class JslGoodsCategory implements Serializable { + + private static final long serialVersionUID = 1L; + + /** PK */ + private Long id; + + /** (1:开启;0:关闭) */ + private Integer enable; + + private String code; + + /** 父分类编号 */ + private Long parentId; + + /** 名称 */ + private String name; + + /** 等级路径id */ + private String levelPath; + + /** 等级路径 */ + private String levelPathNames; + + /** 描述 */ + private String description; + + /** 排序 */ + private Integer sort; + +} + diff --git a/src/main/java/com/demo/t20230616/JslTbsBudget.java b/src/main/java/com/demo/t20230616/JslTbsBudget.java new file mode 100644 index 0000000..bf29e16 --- /dev/null +++ b/src/main/java/com/demo/t20230616/JslTbsBudget.java @@ -0,0 +1,76 @@ +package com.demo.t20230616; + +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.time.LocalDateTime; +import java.util.List; + +/** + * 预算 实体类 + * @author YenHex + * @since 2022-11-12 + */ +@Data +public class JslTbsBudget implements Serializable { + + private static final long serialVersionUID = 1L; + + /** id */ + private Long id; + + /** 预算编码 */ + private String budgetCode; + + /** 费用启用状态 0/1 */ + private Integer budgetState; + + /** 科目id */ + private Long subjectId; + + /** 科目编码 */ + private String subjectCode; + + /** 科目名称 */ + private String subjectName; + + /** 成本中心id */ + private String centerId; + + private String centerType; + + /** 成本中心编码 */ + private String centerCode; + + /** 成本中心名称 */ + private String centerName; + + /** 考核期id */ + private Long scheduleId; + + /** 考核期编码 */ + private String scheduleCode; + + /** 考核期名称 */ + private String scheduleName; + + /** 备注 */ + private String remark; + + /** 条件标识 */ + private Integer conditionFlag; + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + + /** 逻辑删除标记(0:显示;1:隐藏) */ + @JsonIgnore + @JsonProperty + private String delFlag; + +} + diff --git a/src/main/java/com/demo/t20230616/JslTbsBudgetCondition.java b/src/main/java/com/demo/t20230616/JslTbsBudgetCondition.java new file mode 100644 index 0000000..5a56764 --- /dev/null +++ b/src/main/java/com/demo/t20230616/JslTbsBudgetCondition.java @@ -0,0 +1,51 @@ +package com.demo.t20230616; + +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.time.LocalDateTime; + +/** + * 预算条件 实体类 + * @author YenHex + * @since 2022-11-12 + */ +@Data +public class JslTbsBudgetCondition implements Serializable { + + private static final long serialVersionUID = 1L; + + /** id */ + private Long id; + + /** 预算id */ + private Long budgetId; + + /** 目标类型(brand、category、series、spu、sku) */ + private String targetType; + + /** 目标id */ + private Long targetId; + + /** 目标编码 */ + private String targetCode; + + /** 目标名称 */ + private String targetName; + + /** 目标等级路径 */ + private String targetLevelPathIds; + + /** 目标等级路径 */ + private String targetLevelPathNames; + + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + +} + diff --git a/src/main/java/com/demo/t20230616/JslTbsScheduleItemBudget.java b/src/main/java/com/demo/t20230616/JslTbsScheduleItemBudget.java new file mode 100644 index 0000000..eae18f1 --- /dev/null +++ b/src/main/java/com/demo/t20230616/JslTbsScheduleItemBudget.java @@ -0,0 +1,62 @@ +package com.demo.t20230616; + +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 JslTbsScheduleItemBudget implements Serializable { + + private static final long serialVersionUID = 1L; + + /** id */ + private Long id; + + /** 考核id */ + private Long scheduleId; + + /** 考核项id */ + private Long scheduleItemId; + + /** 考核编码 */ + private String itemName; + + /** 开始时间 */ + private String startDate; + + /** 结束时间 */ + private String endDate; + + /** 预算id */ + private Long budgetId; + + /** 预算金额 */ + private BigDecimal budgetAmount; + + /** 备注 */ + private String remark; + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + + + /** 逻辑删除标记(0:显示;1:隐藏) */ + @JsonIgnore + @JsonProperty + private String delFlag; + + +} + diff --git a/src/main/java/com/demo/t20230616/SyncBudget.java b/src/main/java/com/demo/t20230616/SyncBudget.java new file mode 100644 index 0000000..562cdd2 --- /dev/null +++ b/src/main/java/com/demo/t20230616/SyncBudget.java @@ -0,0 +1,251 @@ +package com.demo.t20230616; +import java.math.BigDecimal; +import java.sql.SQLException; +import java.time.LocalDateTime; + +import cn.hutool.core.util.IdUtil; +import com.demo.cost.TbsMapper; +import com.demo.cost.entity.JslBmsRegion; +import com.demo.util.SetData; +import lombok.SneakyThrows; +import org.junit.Test; +import org.noear.wood.DbContext; + +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * @author YenHex + * @since 2023/6/16 + **/ +public class SyncBudget { + + /** + * insert table + */ + private final String tbs_budget = "tbs_budget"; + private final String tbs_budget_condition = "tbs_budget_condition"; + private final String tbs_schedule_item_budget = "tbs_schedule_item_budget"; + private final String bms_cost_center = "bms_cost_center"; + + @Test + @SneakyThrows + public void resetName(){ + + DbContext dbContext = TbsMapper.getJslDbContext(); + String sql = "SELECT month_title,cus_name,cus_code,cate_name, amount,number,concat(cus_name,'_',cate_name) combo FROM `excel_xlt_budget`"; + List xltBudgetList = dbContext.sql(sql).getList(XltBudget.class); + + String sql_sale_region = "select * from bms_region where del_flag = 0"; + List saleRegionList = dbContext.sql(sql_sale_region).getList(JslBmsRegion.class); + + String sql_center = "select * from bms_cost_center where del_flag = 0"; + List bmsCenterList = dbContext.sql(sql_center).getList(JslBmsCenter.class); + + String sql_cate = "select * from goods_category where del_flag = 0 and enable = 1"; + List goodsCategoryList = dbContext.sql(sql_cate).getList(JslGoodsCategory.class); + + String sql_supplier = "select * from bms_supplier where del_flag = 0 and code = ?"; + + for (XltBudget xltBudget : xltBudgetList) { + //销售区 + for (JslBmsRegion bmsRegion : saleRegionList) { + String userName = bmsRegion.getName().replace("销售区域", ""); + if (xltBudget.getCusName().contains(userName)) { + xltBudget.setTempUkName(bmsRegion.getName()); + break; + } + } + //自定义 + if(xltBudget.getTempUkName()==null){ + for (JslBmsCenter bmsCenter : bmsCenterList) { + if(xltBudget.getCusName().contains(bmsCenter.getName())){ + xltBudget.setTempUkName(bmsCenter.getName()); + break; + } + } + } + if(xltBudget.getTempUkName()==null&&xltBudget.getCusCode().contains("MDC")){ + xltBudget.setTempUkName(xltBudget.getCusName()); + SetData.supplierIds.add(xltBudget.getCusName()+"_"+xltBudget.getCusCode()); + } + //客户 + if(xltBudget.getTempUkName()==null) { + xltBudget.setTempUkName(xltBudget.getCusCode()); + } + //xltBudget.setTempUkName(xltBudget.getCusCode()); + } + + //初始化自定义MDC成本中心 + if(SetData.supplierIds.size()>0){ + for (String coboCenter : SetData.supplierIds) { + String[] coboCenters = coboCenter.split("_"); + String centerName = coboCenters[0]; + if(centerName.contains("季度")){ + centerName = centerName.split("季度")[1]; + System.out.println("centerName"+centerName); + } + JslBmsCostCenter costCenter = new JslBmsCostCenter(); + costCenter.setCode(coboCenters[1]); + costCenter.setName(centerName); + costCenter.setLevel(1); + costCenter.setPid(0L); + costCenter.setRemark(""); + costCenter.setTenantId("001"); + try { + dbContext.table(bms_cost_center).setEntity(costCenter).insert(); + } catch (SQLException throwables) { + throwables.printStackTrace(); + } + } + System.out.println("重新运行"); + return; + } + //初始化自定义MDC成本中心 END + + //if(1==1){return;} + + Map> groupMap = xltBudgetList.stream().filter(a->a.getTempUkName()!=null) + .collect(Collectors.groupingBy(a->a.getTempUkName()+"_"+a.getCateName())); + + for (String keyValue : groupMap.keySet()) { + String[] keyVals = keyValue.split("_"); + String keyName = keyVals[0]; + String cateName = keyVals[1]; + JslGoodsCategory currCategory = null; + for (JslGoodsCategory category : goodsCategoryList) { + if(category.getName().contains(cateName)){ + currCategory = category; + break; + } + } + if(currCategory==null){ + System.err.println("castName 错误:"+cateName); + continue; + } + //匹配的预算 + CenterInfoDto centerDto = null; + + //销售区域 + for (JslBmsRegion bmsRegion : saleRegionList) { + String userName = bmsRegion.getName().replace("销售区域", ""); + if (keyName.contains(userName)) { + centerDto = new CenterInfoDto(); + centerDto.setId(bmsRegion.getId()); + centerDto.setCode(bmsRegion.getCode()); + centerDto.setName(bmsRegion.getName()); + centerDto.setType("saleRegion"); + break; + } + } + //成本中心 + if(centerDto==null){ + for (JslBmsCenter bmsCenter : bmsCenterList) { + if(keyName.contains(bmsCenter.getName())){ + centerDto = new CenterInfoDto(); + centerDto.setId(bmsCenter.getId()+""); + centerDto.setCode(bmsCenter.getCode()); + centerDto.setName(bmsCenter.getName()); + centerDto.setType("center"); + break; + } + } + } + //客户 + if(centerDto==null){ + JslBmsSupplier supplier = dbContext.sql(sql_supplier,keyName).getItem(JslBmsSupplier.class); + if(supplier==null||supplier.getName()==null){ + System.out.println("客户不存在:"+keyName); + continue; + } + centerDto = new CenterInfoDto(); + centerDto.setId(supplier.getId()+""); + centerDto.setCode(supplier.getCode()); + centerDto.setName(supplier.getName()); + centerDto.setType("customer"); + } + + List xltBudgetTmpList = groupMap.get(keyValue); + + Map> groupTmpMap = xltBudgetTmpList.stream().collect(Collectors.groupingBy(XltBudget::getMonthTitle)); + + JslTbsBudget tbsBudget = new JslTbsBudget(); + tbsBudget.setBudgetCode("2023"+centerDto.getName()+cateName); + tbsBudget.setBudgetState(0); + tbsBudget.setSubjectId(0L); + tbsBudget.setSubjectCode(""); + tbsBudget.setSubjectName(""); + tbsBudget.setCenterId(centerDto.getId()); + tbsBudget.setCenterType(centerDto.getType()); + tbsBudget.setCenterCode(centerDto.getCode()); + tbsBudget.setCenterName(centerDto.getName()); + tbsBudget.setScheduleId(1L); + tbsBudget.setScheduleCode("2023season"); + tbsBudget.setScheduleName("2023年季度预算"); + tbsBudget.setConditionFlag(1); + tbsBudget.setTenantId("001"); + long tbsBudgetId = dbContext.table(tbs_budget).setEntity(tbsBudget).insert(); + + JslTbsBudgetCondition condition = new JslTbsBudgetCondition(); + condition.setBudgetId(tbsBudgetId); + condition.setTargetType("brand"); + condition.setTargetId(currCategory.getId()); + condition.setTargetCode(currCategory.getCode()); + condition.setTargetName(currCategory.getName()); + condition.setTargetLevelPathIds(currCategory.getLevelPath()); + condition.setTargetLevelPathNames(currCategory.getLevelPathNames()); + condition.setTenantId("001"); + dbContext.table(tbs_budget_condition).setEntity(condition).insert(); + + for (int i = 1; i < 5; i++) { + String monthTitle = null; + for (String monthTitleVale : groupTmpMap.keySet()) { + if(monthTitleVale.contains(""+i)){ + monthTitle = monthTitleVale; + } + } + monthTitle = monthTitle==null? i+"" :monthTitle; + + JslTbsScheduleItemBudget itemBudget = new JslTbsScheduleItemBudget(); + //itemBudget.setId(0L); + itemBudget.setScheduleId(2L); + itemBudget.setTenantId("001"); + List xltBudgets = groupTmpMap.get(monthTitle); + BigDecimal totalAmount = BigDecimal.ZERO; + if(xltBudgets!=null){ + for (XltBudget xltBudget : xltBudgets) { + totalAmount = totalAmount.add(new BigDecimal(xltBudget.getAmount())); + } + } + itemBudget.setBudgetAmount(totalAmount); + if(monthTitle.contains("1")){ + itemBudget.setItemName("2023第1季度"); + itemBudget.setStartDate("2023-01-01"); + itemBudget.setEndDate("2023-03-31"); + itemBudget.setScheduleItemId(2L); + }else if(monthTitle.contains("2")){ + itemBudget.setItemName("2023第2季度"); + itemBudget.setStartDate("2023-04-01"); + itemBudget.setEndDate("2023-06-30"); + itemBudget.setScheduleItemId(3L); + }else if(monthTitle.contains("3")){ + itemBudget.setItemName("2023第3季度"); + itemBudget.setStartDate("2023-07-01"); + itemBudget.setEndDate("2023-09-30"); + itemBudget.setScheduleItemId(4L); + }else if(monthTitle.contains("4")){ + itemBudget.setItemName("2023第4季度"); + itemBudget.setStartDate("2023-10-01"); + itemBudget.setEndDate("2023-12-31"); + itemBudget.setScheduleItemId(5L); + } + itemBudget.setBudgetId(tbsBudgetId); + dbContext.table(tbs_schedule_item_budget).setEntity(itemBudget).insert(); + } + } + + } +} diff --git a/src/main/java/com/demo/t20230616/XltBudget.java b/src/main/java/com/demo/t20230616/XltBudget.java new file mode 100644 index 0000000..b8a100e --- /dev/null +++ b/src/main/java/com/demo/t20230616/XltBudget.java @@ -0,0 +1,24 @@ +package com.demo.t20230616; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author YenHex + * @since 2023/6/16 + **/ +@Data +public class XltBudget { + + private String monthTitle; + private String cusName; + private String cusCode; + private String cateName; + private String amount; + private String number; + private String combo; + + private String tempUkName; + +} diff --git a/src/main/java/com/demo/t20230621/BudgetMathMain.java b/src/main/java/com/demo/t20230621/BudgetMathMain.java new file mode 100644 index 0000000..47ee8fb --- /dev/null +++ b/src/main/java/com/demo/t20230621/BudgetMathMain.java @@ -0,0 +1,301 @@ +package com.demo.t20230621; + +import com.demo.SqlIdUtil; +import com.demo.cost.TbsMapper; +import lombok.SneakyThrows; +import org.junit.Test; +import org.noear.wood.DbContext; + +import java.util.List; + +/** + * @author YenHex + * @since 2023/6/21 + **/ +public class BudgetMathMain { + + + + @Test + @SneakyThrows + public void matchMain(){ + DbContext dbContext = TbsMapper.getJslDbContext(); + //检索完全匹配的预算 + String sql_match = "SELECT " + + " cost_apply_id " + + " ,count(1) `total_act` " + + " ,SUM( CASE WHEN (tmp.budget_item_id IS NOT NULL AND tmp.condition_id IS NOT NULL) THEN 1 ELSE 0 END ) as `match_flag` " + + "FROM " + + " ( " + + " SELECT " + + " i.id budget_item_id, " + + " c.id condition_id, " + + " ca.id cost_apply_id, " + + " g.sync_budget = 1 `currentYear` " + + " 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 ca ON ca.id = g.cost_apply_id " + + " WHERE " + + " ca.xlt_sync = 2 " + + " AND ca.new_budget_sync != 3 " + + " ) tmp " + + "GROUP BY " + + " tmp.cost_apply_id " + + "HAVING " + + " count(1) = SUM( CASE WHEN (tmp.budget_item_id IS NOT NULL AND tmp.condition_id IS NOT NULL AND tmp.currentYear=1) THEN 1 ELSE 0 END ) "; + if(1==1){ + System.out.println(sql_match); + return; + } + List costIds = dbContext.sql(sql_match).getArray("cost_apply_id"); + if(costIds.size()<1){ + System.out.println("无需匹配:costIds.size()<1"); + System.out.println(sql_match); + return; + } + //设置临时状态=>2 + String ids = SqlIdUtil.buildSqlIdString(costIds); + String sql_update_cost_match_state = "update tbs_cost_apply set budget_sync = 2 where id in "+ids ; + dbContext.sql(sql_update_cost_match_state).execute(); + + //移除历史数据 + dbContext.sql("delete from tbs_budget_log where cost_apply_id in "+ids).execute(); + dbContext.sql("delete from tbs_budget_cost_item where cost_apply_id in "+ids).execute(); + + //匹配预算,插入预算log表 + String sql_insert_log = "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 " + + " b.budget_sync = '2'"; + dbContext.sql(sql_insert_log).execute(); + + String sql_insert_item = "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 " + + " a.new_budget_sync != '3'"; + dbContext.sql(sql_insert_item).execute(); + + //设置临时状态=>2 + String sql_update_cost_match_state_success = "update tbs_cost_apply set budget_sync = 1 where budget_sync = 2"; + dbContext.sql(sql_update_cost_match_state_success).execute(); + + } + +} diff --git a/src/main/java/com/demo/t20230627/KLGoods.java b/src/main/java/com/demo/t20230627/KLGoods.java new file mode 100644 index 0000000..cb3381f --- /dev/null +++ b/src/main/java/com/demo/t20230627/KLGoods.java @@ -0,0 +1,47 @@ +package com.demo.t20230627; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/6/27 + **/ +@Data +public class KLGoods { + + private String cateId1; + + private String cateId2; + + private String cateId3; + + private String spuId; + + /** + * 口味id + */ + private String spv1Id; + + private String skuCode; + + private String skuName; + + private String spuName; + + private String cateLv3; + + private String cateLv2; + + private String cateLv1; + + private String packSpecVal; + + private String price; + + private String costLimit; + + private String orderLimit; + + private String tasteSpecVal; + +} diff --git a/src/main/java/com/demo/t20230627/KangLiSync.java b/src/main/java/com/demo/t20230627/KangLiSync.java new file mode 100644 index 0000000..0cf63a8 --- /dev/null +++ b/src/main/java/com/demo/t20230627/KangLiSync.java @@ -0,0 +1,91 @@ +package com.demo.t20230627; + +import com.demo.cost.TbsMapper; +import com.demo.dto.DaoContext; +import com.demo.jsl.entity.goods.JslGoodSpu; +import com.demo.t20230616.JslGoodsCategory; +import com.demo.util.SetData; +import lombok.SneakyThrows; +import org.junit.Test; +import org.noear.wood.DbContext; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author YenHex + * @since 2023/6/27 + **/ +public class KangLiSync { + + @Test + @SneakyThrows + public void syncMain(){ + DbContext dbContext = TbsMapper.getJslDbContext(); + String sql_kl_goods = "SELECT " + + "cate1.id cate_id1, " + + "cate2.id cate_id2, " + + "cate3.id cate_id3, " + + "spu.id spu_id, " + + "spv1.id spv1_id, " + + "kl.* " + + "FROM `excel_kl_goods` kl " + + "LEFT JOIN goods_category cate1 on kl.cate_lv1 = cate1.`name` " + + "LEFT JOIN goods_category cate2 on kl.cate_lv2 = cate2.`name` " + + "LEFT JOIN goods_category cate3 on kl.cate_lv3 = cate3.`name` " + + "left join goods_sku sku on sku.sku_code = kl.sku_code " + + "left join goods_spu spu on spu.`name` = kl.spu_name " + + "left join goods_spec_value spv1 on spv1.`name` = kl.taste_spec_val " + + "where " + + " sku.sku_code is null "; + List klGoodsList = dbContext.sql(sql_kl_goods).getList(KLGoods.class); + + for (KLGoods klGoods : klGoodsList) { + if(klGoods.getSpuId()==null){ + JslGoodSpu goodSpu = new JslGoodSpu(); + goodSpu.setId(0L); + goodSpu.setSpuCode(""); + goodSpu.setName(""); + goodSpu.setCategoryFirst(""); + goodSpu.setCategorySecond(""); + goodSpu.setCategoryThird(""); + goodSpu.setCategoryLast(""); + goodSpu.setShelf(0); + goodSpu.setSaleNum(0); + goodSpu.setTasteValue(""); + goodSpu.setTenantId("001"); + goodSpu.setCostFlag(0); + }else { + //之间保存sku及其属性 + + } + + } + + + } + + @SneakyThrows + private void extracted(List cateList,int level) { + String sql_cate1_goods = "select * from goods_category where level = "+level; + List categoryList = TbsMapper.getJslDbContext().sql(sql_cate1_goods).getList(JslGoodsCategory.class); + for (String cate : cateList) { + if(cate==null){ + continue; + } + boolean notExist = true; + for (JslGoodsCategory category : categoryList) { + if(cate.equals(category.getName())){ + notExist = false; + break; + } + } + if(notExist){ + //System.out.println(level+" "+cate); + SetData.supplierIds.add(cate); + } + } + } + +} diff --git a/src/main/java/com/demo/t20230702/JslTbsScheduleItemBudgetSync.java b/src/main/java/com/demo/t20230702/JslTbsScheduleItemBudgetSync.java new file mode 100644 index 0000000..6314602 --- /dev/null +++ b/src/main/java/com/demo/t20230702/JslTbsScheduleItemBudgetSync.java @@ -0,0 +1,78 @@ +package com.demo.t20230702; + +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; + +/** + * 预算考核期项 实体类 + * @author YenHex + * @since 2022-11-08 + */ +@Data +public class JslTbsScheduleItemBudgetSync implements Serializable { + + private static final long serialVersionUID = 1L; + + + /** 成本中心id */ + private String centerId; + + private String centerType; + + /** 成本中心编码 */ + private String centerCode; + + /** 成本中心名称 */ + private String centerName; + + private String budgetCode; + + + + + /** id */ + private Long id; + + /** 考核id */ + private Long scheduleId; + + /** 考核项id */ + private Long scheduleItemId; + + /** 考核编码 */ + private String itemName; + + /** 开始时间 */ + private LocalDateTime startDate; + + /** 结束时间 */ + private LocalDateTime endDate; + + /** 预算id */ + private Long budgetId; + + /** 预算金额 */ + private BigDecimal budgetAmount; + + /** 备注 */ + private String remark; + + /** 所属租户 */ + @JsonIgnore + @JsonProperty + private String tenantId; + + + /** 逻辑删除标记(0:显示;1:隐藏) */ + @JsonIgnore + @JsonProperty + private String delFlag; + + +} + diff --git a/src/main/java/com/demo/t20230702/XltDiscountBudget.java b/src/main/java/com/demo/t20230702/XltDiscountBudget.java new file mode 100644 index 0000000..797b5be --- /dev/null +++ b/src/main/java/com/demo/t20230702/XltDiscountBudget.java @@ -0,0 +1,22 @@ +package com.demo.t20230702; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author YenHex + * @since 2023/7/2 + **/ +@Data +public class XltDiscountBudget { + + BigDecimal realMoney; + Integer seasonNum; + String k1; + String k2; + String k3; + String k4; + String seriesName; + +} diff --git a/src/main/java/com/demo/t20230703/MatchActCenter.java b/src/main/java/com/demo/t20230703/MatchActCenter.java new file mode 100644 index 0000000..015f057 --- /dev/null +++ b/src/main/java/com/demo/t20230703/MatchActCenter.java @@ -0,0 +1,24 @@ +package com.demo.t20230703; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/7/3 + **/ +@Data +public class MatchActCenter { + + String costApplyId; + + String activityId; + + String centerType; + + String centerId; + + String centerCode; + + String centerName; + +} diff --git a/src/main/java/com/demo/t20230703/SyncMatchActCenter.java b/src/main/java/com/demo/t20230703/SyncMatchActCenter.java new file mode 100644 index 0000000..5062e44 --- /dev/null +++ b/src/main/java/com/demo/t20230703/SyncMatchActCenter.java @@ -0,0 +1,36 @@ +package com.demo.t20230703; + +import com.demo.cost.TbsMapper; +import com.demo.dto.util.SqlBuilderUtil; +import com.demo.dto.util.SqlClazzStorage; +import lombok.SneakyThrows; +import org.junit.Test; +import org.noear.wood.DbContext; + +import java.util.List; + +/** + * @author YenHex + * @since 2023/7/2 + **/ +public class SyncMatchActCenter { + + @Test + @SneakyThrows + public void tmain(){ + DbContext jslDbContext = TbsMapper.getJslDbContext(); + String sql_match = "select * from excel_activity_match_center"; + List matchActCenterList = jslDbContext.sql(sql_match).getList(MatchActCenter.class); + for (MatchActCenter matchActCenter : matchActCenterList) { + String updateSetParams = SqlClazzStorage.commentBuild(matchActCenter,null,true,true,true," ,", + new String[]{"activity_id","cost_apply_id"} + ); + String updateSetSql = "update tbs_activity_center set "+updateSetParams+" where activity_id = "+matchActCenter.getActivityId(); + String updateSetSql2 = "update tbs_activity_center_goods set "+updateSetParams+" where activity_id = "+matchActCenter.getActivityId(); + jslDbContext.sql(updateSetSql).execute(); + jslDbContext.sql(updateSetSql2).execute(); + } + + } + +} diff --git a/src/main/java/com/demo/test/ChartAxisColumn.java b/src/main/java/com/demo/test/ChartAxisColumn.java new file mode 100644 index 0000000..d0fee30 --- /dev/null +++ b/src/main/java/com/demo/test/ChartAxisColumn.java @@ -0,0 +1,27 @@ +package com.demo.test; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/2/17 + */ +@Data +public class ChartAxisColumn { + + /** + * 列Id + */ + Long columnId; + + /** + * 列名 + */ + String columnName; + + /** + * 系列坐标值合计 + */ + Double total; + +} diff --git a/src/main/java/com/demo/test/ChartDataVo.java b/src/main/java/com/demo/test/ChartDataVo.java new file mode 100644 index 0000000..46217b5 --- /dev/null +++ b/src/main/java/com/demo/test/ChartDataVo.java @@ -0,0 +1,24 @@ +package com.demo.test; + +import lombok.Data; + +import java.util.List; + +/** + * @author YenHex + * @since 2023/2/17 + */ +@Data +public class ChartDataVo { + + /** + * 列(饼状图的主要参数) + */ + List axisColumns; + + /** + * 系列 + */ + List seriesItem; + +} diff --git a/src/main/java/com/demo/test/ChartGroupItem.java b/src/main/java/com/demo/test/ChartGroupItem.java new file mode 100644 index 0000000..604af30 --- /dev/null +++ b/src/main/java/com/demo/test/ChartGroupItem.java @@ -0,0 +1,22 @@ +package com.demo.test; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/2/17 + */ +@Data +public class ChartGroupItem { + + /** + * 组id + */ + private Long groupId; + + /** + * 组名 + */ + private String groupName; + +} diff --git a/src/main/java/com/demo/test/ChartSeriesItem.java b/src/main/java/com/demo/test/ChartSeriesItem.java new file mode 100644 index 0000000..35ec0fb --- /dev/null +++ b/src/main/java/com/demo/test/ChartSeriesItem.java @@ -0,0 +1,36 @@ +package com.demo.test; + +import lombok.Data; + +import java.util.List; + +/** + * @author YenHex + * @since 2023/2/17 + */ +@Data +public class ChartSeriesItem { + + /** + * 列Id + */ + Long columnId; + + /** + * 列名 + */ + String columnName; + /** + * 值列表(列对应axisColumns) + */ + List values; + /** + * 组id + */ + private Long groupId; + /** + * 组名 + */ + private String groupName; + +} diff --git a/src/main/java/com/demo/test/PrintChart.java b/src/main/java/com/demo/test/PrintChart.java new file mode 100644 index 0000000..eec4ef6 --- /dev/null +++ b/src/main/java/com/demo/test/PrintChart.java @@ -0,0 +1,25 @@ +package com.demo.test; + +/** + * @author YenHex + * @since 2023/2/17 + */ +public class PrintChart { + + + public static void main(String[] args) { + //eg. 统计1-6年纪每个班年纪学生柱状图 + for (int i = 1; i < 7; i++) { + ChartSeriesItem seriesItem = new ChartSeriesItem(); + seriesItem.setColumnId(new Long(i)); + seriesItem.setColumnName("小学" + i + "年级"); + for (int j = 0; j < 2; j++) { + if (j == 0) { + + } + } + } + + } + +} diff --git a/src/main/java/com/demo/util/CollectionUtil.java b/src/main/java/com/demo/util/CollectionUtil.java new file mode 100644 index 0000000..bd0f9fa --- /dev/null +++ b/src/main/java/com/demo/util/CollectionUtil.java @@ -0,0 +1,135 @@ +package com.demo.util; + +import java.util.*; + +/** + * 常用数据工具类 + * + * @Author JcYen + * @Date 2019/5/23 + * @Version 1.0 + */ +public class CollectionUtil { + + private CollectionUtil() { + super(); + } + + /** + * 判断一个集合是否为空 + */ + public static boolean isEmpty(Collection col) { + if (col == null || col.isEmpty()) { + return true; + } + return false; + } + + public static List setToList(Set colSet) { + if (colSet == null || colSet.isEmpty()) { + return new ArrayList<>(); + } + List rs = new ArrayList<>(colSet); + return rs; + } + + /** + * 判断一个集合是否不为空 + */ + public static boolean isNotEmpty(Collection col) { + return !isEmpty(col); + } + + /** + * 判断Map是否为空 + */ + public static boolean isEmpty(Map map) { + if (map == null || map.isEmpty()) { + return true; + } + return false; + } + + /** + * 判断Map是否不为空为空 + */ + public static boolean isNotEmpty(Map map) { + return !isEmpty(map); + } + + /** + * 去除list中的重复数据 + */ + public static List removeRepeat(List list) { + if (isEmpty(list)) { + return list; + } + List result = new ArrayList(); + for (T e : list) { + if (!result.contains(e)) { + result.add(e); + } + } + return result; + } + + public static boolean hasNull(Object... objects) { + for (int i = 0; i < objects.length; i++) { + if (objects[i] == null) { + return true; + } + } + return false; + } + + public static boolean hasNotNull(Object... objects) { + for (int i = 0; i < objects.length; i++) { + if (objects[i] != null) { + return true; + } + } + return false; + } + + /** + * 将集合转换为String数组 + */ + public static String[] toArray(List list) { + if (isEmpty(list)) { + return null; + } + String[] result = new String[list.size()]; + for (int i = 0; i < list.size(); i++) { + result[i] = String.valueOf(list.get(i)); + } + return result; + } + + /** + * 将list拆分成多给指定的大小的list + */ + public static List> createList(List target, int size) { + List> listArr = new ArrayList<>(); + //获取被拆分的数组个数 + int arrSize = target.size() % size == 0 ? target.size() / size : target.size() / size + 1; + for (int i = 0; i < arrSize; i++) { + List sub = new ArrayList(); + //把指定索引数据放入到list中 + for (int j = i * size; j <= size * (i + 1) - 1; j++) { + if (j <= target.size() - 1) { + sub.add(target.get(j)); + } + } + listArr.add(sub); + } + return listArr; + } + + public static T selectFirst(List list) { + if (isNotEmpty(list)) { + return list.get(0); + } + return null; + } + +} diff --git a/src/main/java/com/demo/util/DSUtil.java b/src/main/java/com/demo/util/DSUtil.java new file mode 100644 index 0000000..8efffab --- /dev/null +++ b/src/main/java/com/demo/util/DSUtil.java @@ -0,0 +1,31 @@ +package com.demo.util; + +import org.noear.wood.DbContext; + +/** + * @author YenHex + * @since 2023/5/15 + */ +public class DSUtil { + + public static DbContext getQsDev2() { + return new DbContext("test", "jdbc:mysql://192.168.0.9:3306/jsl_mall_qs_dev2?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true", "kpjsl", "123456"); + } + + public static DbContext getQsTest() { + return new DbContext("test", "jdbc:mysql://192.168.0.9:3306/jsl_mall_qs_test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true", "kpjsl", "123456"); + } + + public static DbContext getProMall() { + return new DbContext("pro", "jdbc:mysql://183.56.249.148:3306/jsl_cost_base?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true", "root", "@Jsl2282125"); + } + + public DbContext getXltDbContext() { + return new DbContext("xlt", "jdbc:sqlserver://rm-wz93l107hc277n9ieco.sqlserver.rds.aliyuncs.com:3433;DatabaseName=xiaolutong", "qs_db_user", "Aa135246"); + } + + public DbContext getSeeYonDbContext() { + return new DbContext("oa", "jdbc:sqlserver://192.168.10.157:1433;DatabaseName=OAdata", "sa", "JSL2282125"); + } + +} diff --git a/src/main/java/com/demo/util/DateUtil.java b/src/main/java/com/demo/util/DateUtil.java new file mode 100644 index 0000000..16db1a9 --- /dev/null +++ b/src/main/java/com/demo/util/DateUtil.java @@ -0,0 +1,111 @@ +package com.demo.util; + +import com.demo.util.dto.DateSplitDTO; + +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +/** + * @author YenHex + * @since 2023/3/24 + */ +public class DateUtil { + + public static List getSplitDto(Date sDate, Date eDate) { + return getSplitDto(DateUtil.toLocalDate(sDate), DateUtil.toLocalDate(eDate)); + } + + public static LocalDate toLocalDate(Date date) { +// Instant instant = date.toInstant(); +// ZoneId zoneId = ZoneId.systemDefault(); +// return instant.atZone(zoneId).toLocalDate(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + String str = dateFormat.format(date); + String[] a = str.split("-"); + return LocalDate.of(Integer.parseInt(a[0]), Integer.parseInt(a[1]), Integer.parseInt(a[2])); + } + + public static Date toDate(LocalDate localDate) { + ZoneId zoneId = ZoneId.systemDefault(); + ZonedDateTime zdt = localDate.atStartOfDay(zoneId); + return Date.from(zdt.toInstant()); + } + + public static List getSplitDto(LocalDate sDate, LocalDate eDate) { + int diffYear = eDate.getYear() - sDate.getYear(); + int diffMonthOfYear = eDate.getMonthValue() - sDate.getMonthValue(); + int diffMonth = diffYear * 12 + diffMonthOfYear; + //最后一个月的年月数 + int lastYearMonth = eDate.getYear() * 100 + eDate.getMonthValue(); + int firstYearMonth = sDate.getYear() * 100 + sDate.getMonthValue(); + if (diffMonth < 1) { + //同一个月 + int days = eDate.getDayOfMonth() - sDate.getDayOfMonth() + 1; + Date startDate = DateUtil.toDate(sDate); + Date endDate = DateUtil.toDate(eDate); + DateSplitDTO splitDTO = new DateSplitDTO(days, startDate, endDate, lastYearMonth); + return Arrays.asList(splitDTO); + } else { + List dateSplitDTOS = new ArrayList<>(); + for (int i = 0; i < diffMonth + 2; i++) { + LocalDate newStartDate = sDate.plusMonths(i); + int currYearMonth = newStartDate.getYear() * 100 + newStartDate.getMonthValue(); + //第一个月 + if (firstYearMonth == currYearMonth) { + int days = sDate.lengthOfMonth() - sDate.getDayOfMonth() + 1; + Date startDate = DateUtil.toDate(sDate); + //当月最后一天 + LocalDate endLocalDate = LocalDate.of(sDate.getYear(), sDate.getMonth(), sDate.lengthOfMonth()); + Date endDate = DateUtil.toDate(endLocalDate); + DateSplitDTO splitDTO = new DateSplitDTO(days, startDate, endDate, currYearMonth); + dateSplitDTOS.add(splitDTO); + } else if (currYearMonth == lastYearMonth) { + int days = eDate.getDayOfMonth(); + //当月第一天 + Date startDate = DateUtil.toDate(newStartDate.withDayOfMonth(1)); + Date endDate = DateUtil.toDate(eDate); + DateSplitDTO splitDTO = new DateSplitDTO(days, startDate, endDate, currYearMonth); + dateSplitDTOS.add(splitDTO); + break; + } else { + int days = newStartDate.lengthOfMonth(); + //当月第一天 + Date startDate = DateUtil.toDate(newStartDate.withDayOfMonth(1)); + //当月最后一天 + LocalDate endLocalDate = LocalDate.of(newStartDate.getYear(), newStartDate.getMonth(), newStartDate.lengthOfMonth()); + Date endDate = DateUtil.toDate(endLocalDate); + DateSplitDTO splitDTO = new DateSplitDTO(days, startDate, endDate, currYearMonth); + dateSplitDTOS.add(splitDTO); + } + } + return dateSplitDTOS; + } + + } + + public static void main(String[] args) { +// LocalDate d1 = LocalDate.of(2023,2,6); +// LocalDate d2 = LocalDate.of(2023,2,6); +// List dateSplitDTOS = getSplitDto(d1,d2); +// System.out.println(dateSplitDTOS.size()); +// for (DateSplitDTO splitDTO : dateSplitDTOS) { +// LocalDate dd1 = DateUtil.toLocalDate(splitDTO.getStartDate()); +// LocalDate dd2 = DateUtil.toLocalDate(splitDTO.getEndDate()); +// int day2 = dd2.getDayOfMonth() - dd1.getDayOfMonth() + 1; +// if(day2 != splitDTO.getDays()){ +// System.out.println(splitDTO.getYearMonth()+" "+ day2 +" "+ splitDTO.getDays()); +// } +// } + Date date = new Date(); + System.out.println(date.getYear()); + System.out.println(date.getMonth()); + System.out.println(date.getDay()); + } + +} diff --git a/src/main/java/com/demo/util/FileUtil.java b/src/main/java/com/demo/util/FileUtil.java new file mode 100644 index 0000000..c21768d --- /dev/null +++ b/src/main/java/com/demo/util/FileUtil.java @@ -0,0 +1,49 @@ +package com.demo.util; + +import lombok.extern.slf4j.Slf4j; + +import java.io.File; +import java.io.IOException; +import java.io.RandomAccessFile; + +/** + * @author YenHex + * @since 2023/3/20 + */ +@Slf4j +public class FileUtil { + + public static void writeError(String fileName, String content) { + try { + // 打开一个随机访问文件流,按读写方式 + RandomAccessFile randomFile = new RandomAccessFile(fileName, "rw"); + // 文件长度,字节数 + long fileLength = randomFile.length(); + // 将写文件指针移到文件尾 + randomFile.seek(fileLength); + randomFile.writeBytes(content + "\r\n"); + randomFile.close(); + } catch (IOException e) { + log.error("将内容写入到txt文件中出现异常:", e); + } + } + + + public static void create(String filepath) { + File file = new File(filepath); + if (!file.exists()) { + try { + //创建文件 + file.createNewFile(); + } catch (IOException e) { + } + } + } + + public static void main(String[] args) { + log.error("sss"); + create("D:\\workspace-main\\logs\\err_codes.log"); + create("D:\\workspace-main\\logs\\err_codes_exception.log"); + } + +} diff --git a/src/main/java/com/demo/util/JacksonUtil.java b/src/main/java/com/demo/util/JacksonUtil.java new file mode 100644 index 0000000..17f4ace --- /dev/null +++ b/src/main/java/com/demo/util/JacksonUtil.java @@ -0,0 +1,28 @@ +package com.demo.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.io.IOException; + +public class JacksonUtil { + private static ObjectMapper mapper = new ObjectMapper(); + + public static String bean2Json(Object obj) { + try { + return mapper.writeValueAsString(obj); + } catch (JsonProcessingException e) { + e.printStackTrace(); + return null; + } + } + + public static T json2Bean(String jsonStr, Class objClass) { + try { + return mapper.readValue(jsonStr, objClass); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/src/main/java/com/demo/util/LogListener.java b/src/main/java/com/demo/util/LogListener.java new file mode 100644 index 0000000..db1494c --- /dev/null +++ b/src/main/java/com/demo/util/LogListener.java @@ -0,0 +1,22 @@ +package com.demo.util; + +import lombok.extern.slf4j.Slf4j; +import org.noear.wood.Command; +import org.noear.wood.ext.Act1; + +/** + * @author YenHex + * @since 2023/3/23 + */ +@Slf4j +public class LogListener implements Act1 { + + @Override + public void run(Command command) { + long diff = command.timestop - command.timestart; + if (diff > 300L) { + log.warn("慢查询耗时:{} SQL:{}", diff, command.text); + } + } + +} diff --git a/src/main/java/com/demo/util/SetData.java b/src/main/java/com/demo/util/SetData.java new file mode 100644 index 0000000..c097752 --- /dev/null +++ b/src/main/java/com/demo/util/SetData.java @@ -0,0 +1,19 @@ +package com.demo.util; + +import java.util.HashSet; +import java.util.Set; + +/** + * @author YenHex + * @since 2023/6/10 + */ +public class SetData { + + public static Set supplierIds = new HashSet<>(); + public static Set supplierIds2 = new HashSet<>(); + + public static Set xltSupplierIds2 = new HashSet<>(); + + public static Integer startId; + +} diff --git a/src/main/java/com/demo/util/SqlCreateUtil.java b/src/main/java/com/demo/util/SqlCreateUtil.java new file mode 100644 index 0000000..aaddf94 --- /dev/null +++ b/src/main/java/com/demo/util/SqlCreateUtil.java @@ -0,0 +1,169 @@ +package com.demo.util; + +import com.demo.cost.entity.JslTbsActivity; +import com.demo.jsl.entity.user.SyUser; +import com.demo.util.WordUtil; + +import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @author YenHex + * @since 2023/6/27 + **/ +public class SqlCreateUtil { + + public static void main(String[] args) { + + JslTbsActivity updAct = new JslTbsActivity(); + updAct.setActivityState(4); + updAct.setReleaseFlag(1); + updAct.setFinishedFlag(1); + updAct.setReleaseUserId("0"); + updAct.setReleaseUserName("系统导入"); + updAct.setReleaseTime(new Date()); + updAct.setReleaseAmount(BigDecimal.TEN); + + + System.out.println(buildUpdateSql(updAct,"sys_user_table")); + + SyUser syUser = new SyUser(); + syUser.setId(null); + syUser.setName("啊啊"); + syUser.setCode("A345"); + syUser.setDeptId(0L); + syUser.setPostId(null); + syUser.setMobile("1233"); + System.out.println(buildConditionSql(syUser,"usr")); + + SyUser syUser2 = new SyUser(); + syUser2.setId(2L); + syUser2.setName("啊2啊"); + syUser2.setCode("A32245"); + syUser2.setDeptId(2L); + syUser2.setPostId(2L); + List syUserList = new ArrayList<>(); + syUserList.add(syUser); + syUserList.add(syUser2); + System.out.println(buildBatchInsertSql(syUserList,"sys_user_table")); + } + + public static String buildUpdateSql(Object object,String table) { + StringBuffer strBuffer = new StringBuffer(); + strBuffer.append("update "+table+" set "); + Field[] declaredFields = object.getClass().getDeclaredFields(); + for (int i = 0; i < declaredFields.length; i++) { + //设置是否允许访问,不是修改原来的访问权限修饰词。 + declaredFields[i].setAccessible(true); + //为空的不加入 + try { + if(declaredFields[i].get(object)!=null&&!"".equals(declaredFields[i].get(object))) { + String val = null; + if("class java.util.Date".equals(declaredFields[i].getType().toString())) { + SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd"); + String format = sdf.format(declaredFields[i].get(object)); + val="'"+format+"'"; + }else { + val="'"+declaredFields[i].get(object)+"'"; + } + strBuffer.append(" "+ WordUtil.toLine(declaredFields[i].getName()) +"="+val+" ,"); + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + String sql = strBuffer.toString(); + return sql.substring(0,sql.length()-1); + } + + public static String buildConditionSql(Object object,String alias) { + StringBuffer strBuffer = new StringBuffer(); + Field[] declaredFields = object.getClass().getDeclaredFields(); + for (int i = 0; i < declaredFields.length; i++) { + //设置是否允许访问,不是修改原来的访问权限修饰词。 + declaredFields[i].setAccessible(true); + //为空的不加入 + try { + if(declaredFields[i].get(object)!=null&&!"".equals(declaredFields[i].get(object))) { + String val = null; + if("class java.util.Date".equals(declaredFields[i].getType().toString())) { + SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd"); + String format = sdf.format(declaredFields[i].get(object)); + val="'"+format+"'"; + }else { + val="'"+declaredFields[i].get(object)+"'"; + } + if(alias!=null){ + strBuffer.append(" "+alias+"."+declaredFields[i].getName()+"="+val+" and"); + }else { + strBuffer.append(" "+declaredFields[i].getName()+"="+val+" and"); + } + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + String sql = strBuffer.toString(); + return sql.substring(0,sql.length()-3); + } + + public static String buildBatchInsertSql(List objs, String table) { + String sql=""; + StringBuffer prama=new StringBuffer(); + StringBuffer values=new StringBuffer(); + try { + Field[] fields = objs.get(0).getClass().getDeclaredFields(); + for (Field field : fields) { + prama.append(","+field.getName()); + } + for (Object obj : objs) { + values=values.append(",(").append(getValue2Bean(obj)).append(")"); + } + prama=prama.deleteCharAt(0); + values=values.deleteCharAt(0); + } catch (Exception e) { + e.printStackTrace(); + } + sql="insert into "+table+"("+prama+") values " +values; + return sql; + } + + private static StringBuffer getValue2Bean(Object obj) throws Exception{ + Field[] fields = obj.getClass().getDeclaredFields(); + StringBuffer value=new StringBuffer(); + String v= null; + for (Field field : fields) { + v= getProperty(obj, field); + if (v==null) { + value.append(","+getProperty(obj, field)); + }else { + value.append(",'"+getProperty(obj, field)+"'"); + } + } + value=value.deleteCharAt(0); + return value; + } + + + private static String getProperty(Object obj,Field field){ + field.setAccessible(true); + try { + Object val = field.get(obj); + if(val==null){ + return null; + }else { + return val.toString(); + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/demo/util/StringUtils.java b/src/main/java/com/demo/util/StringUtils.java new file mode 100644 index 0000000..3579b30 --- /dev/null +++ b/src/main/java/com/demo/util/StringUtils.java @@ -0,0 +1,144 @@ +package com.demo.util; + +import lombok.experimental.UtilityClass; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + * @author YenHex + * @since 2022/2/28 + */ +@UtilityClass +public class StringUtils { + + /** + * 订单号生成(NEW) + **/ + private static final AtomicInteger SEQ = new AtomicInteger(1000); + private static final AtomicInteger SEQ2 = new AtomicInteger(10001); + private static final DateTimeFormatter DF_FMT_PREFIX = DateTimeFormatter.ofPattern("yyMMddHHmmssSS"); + private static ZoneId ZONE_ID = ZoneId.of("Asia/Shanghai"); + + public static int get1000Add() { + LocalDateTime dataTime = LocalDateTime.now(ZONE_ID); + if (SEQ.intValue() > 9990) { + SEQ.getAndSet(1000); + } + return SEQ.getAndIncrement(); + } + + public static String generateOrderNo() { + LocalDateTime dataTime = LocalDateTime.now(ZONE_ID); + if (SEQ.intValue() > 9990) { + SEQ.getAndSet(1000); + } + return dataTime.format(DF_FMT_PREFIX) + SEQ.getAndIncrement(); + } + + public static boolean isEmpty(String str){ + if (str!=null&&str.trim().length()>0){ + return false; + } + return true; + } + + public static Long genShortLong() { + String id = genShortId(); + return Long.parseLong(id); + } + + public static String genShortId() { + // 2 位 年份的后两位 22001 后五位走随机 每天清一次缓存 99999 10 + StringBuilder idSb = new StringBuilder(); + /// 年份后两位 和 一年中的第几天 + LocalDate now = LocalDate.now(); + String year = now.getYear() + ""; + year = year.substring(2); + String day = now.getDayOfYear() + ""; + /// 补0 + if (day.length() < 3) { + StringBuilder sb = new StringBuilder(); + for (int i = day.length(); i < 3; i++) { + sb.append("0"); + } + day = sb.append(day).toString(); + } + idSb.append(year).append(day); + /// 后五位补随机数 + if (SEQ2.intValue() > 9999900) { + SEQ2.getAndSet(1000001); + } + idSb.append(SEQ2.getAndIncrement()); + return idSb.toString(); + } + + public static void main(String[] args) { + + for (int i = 0; i < 100; i++) { + //System.out.println(genShortId()); + System.out.println(generateOrderNo()); + } + } + + public static String getUrlByList(List list, String param) { + StringBuilder sb = new StringBuilder(); + for (Object val : list) { + sb.append("&" + param + "=" + val); + } + return sb.toString(); + } + + /** + * 格式化 + * + * @param exp 含{}的表达式 + * @param params 参数(注意跳过空值) + * @return + */ + public static String format(String exp, String... params) { + StringBuilder builder = new StringBuilder(exp); + int idx_p = 0; + while (hasText(builder, "{}")) { + int idx = builder.indexOf("{}"); + if (idx_p < params.length && params[idx_p] != null) { + builder.replace(idx, idx + 2, params[idx_p]); + idx_p++; + } else { + break; + } + } + return builder.toString(); + } + + private static boolean hasText(StringBuilder a, String text) { + return a.toString().contains(text); + } + + + public static List splitIdString(String ids) { + if (ids == null) { + return null; + } + if (ids.contains(",")) { + String[] idsA = ids.split(","); + return Arrays.asList(idsA); + } + return Arrays.asList(ids); + } + + public static List splitIdLong(String ids) { + List strs = splitIdString(ids); + if (strs != null) { + return strs.stream().map(a -> Long.parseLong(a)).collect(Collectors.toList()); + } + return null; + } + +} diff --git a/src/main/java/com/demo/util/WordUtil.java b/src/main/java/com/demo/util/WordUtil.java new file mode 100644 index 0000000..46fa058 --- /dev/null +++ b/src/main/java/com/demo/util/WordUtil.java @@ -0,0 +1,138 @@ +package com.demo.util; + + + +import java.util.Locale; + +/** + * @author JcYen + * @Date 2020/5/27 + * @Version 1.0 + */ +public class WordUtil { + + public static void main(String[] args) { + String tableName = "ums_user_log"; + System.out.println("lowerFirst -> "+lowerFirst(tableName)); + System.out.println("toSimple -> "+toSimple(tableName)); + System.out.println("toClass -> "+toClass(tableName)); + } + + public static String lowerFirst(String className){ + return lowerFirst(className,null); + } + + /** + * 类名首字母小写 + * @param className 类名 + * @param rmPrefix 移除的前缀,不区分大小写 + * @return + */ + public static String lowerFirst(String className,String rmPrefix){ + if(className==null){throw new RuntimeException("className is null");} + if(rmPrefix!=null){ + String prefix = className.substring(0,rmPrefix.length()); + if(prefix.toLowerCase().equals(rmPrefix.toLowerCase())){ + className = className.substring(rmPrefix.length()); + } + } + String pre = className.substring(0,1).toLowerCase(Locale.ROOT); + return pre.concat(className.substring(1)); + } + + /** + * 移除前缀 + * @param tableName + * @return + */ + public static String removePrefix(final String tableName){ + String tableSimpleName = tableName; + if(tableName.contains("_")){ + String prefix = tableName.split("_")[0]; + tableSimpleName = tableSimpleName.replace(prefix+"_",""); + } + return tableSimpleName; + } + + public static String toSimple(final String tableName){ + String tableSimpleName = tableName; + if(tableName.contains("_")){ + String prefix = tableName.split("_")[0]; + tableSimpleName = tableSimpleName.replace(prefix+"_",""); + } + return toField(tableSimpleName); + } + + /** + * 数据库表名 转 类名 : ums_user_log ->> UmsUserLog + * 1.首字母转小写 + * 2.下横线后的字母大写,去掉"_"下横线, + * @param tableName + * @return + */ + public static String toClass(String tableName) { + if(StringUtils.isEmpty(tableName)){return null;} + char[] chars = tableName.toCharArray(); + for (int i = 0; i < chars.length; i++) { + if(Character.isLowerCase(chars[i])&&i==0){ + chars[i] = Character.toUpperCase(chars[i]); + } + if(chars[i] == '_' && i+1> umsUserLog + * 1.首字母转小写 + * 2.下横线后的字母大写,去掉"_"下横线, + * @param columnName + * @return + */ + public static String toField(String columnName) { + columnName = toLine(columnName); + if(StringUtils.isEmpty(columnName)){return null;} + char[] chars = columnName.toCharArray(); + for (int i = 0; i < chars.length; i++) { + if(chars[i] == '_' && i+1> ums_user_log + * 1.首字母转小写 + * 2.字符非首个字母,添加"_"下横线,并大写字母转小写 + * @param fieldName + * @return + */ + public static String toLine(String fieldName) { + if(StringUtils.isEmpty(fieldName)){return null;} + char[] chars = fieldName.toCharArray(); + int countUpper = 0; + for (int i = 0; i < chars.length; i++) { + if(Character.isUpperCase(chars[i])&&i!=0){ + countUpper ++ ; + } + } + char[] newChars = new char[chars.length+countUpper]; + //偏移量 + int offset = 0; + for (int i = 0; i < chars.length; i++) { + if(Character.isUpperCase(chars[i])){ + if(i!=0){ + newChars[i+offset] = '_'; + offset++; + } + } + newChars[i+offset] = Character.toLowerCase(chars[i]); + } + String string = String.valueOf(newChars); + return string.replace("___","_").replace("__","_"); + } + +} diff --git a/src/main/java/com/demo/util/dto/DateSplitDTO.java b/src/main/java/com/demo/util/dto/DateSplitDTO.java new file mode 100644 index 0000000..41387b6 --- /dev/null +++ b/src/main/java/com/demo/util/dto/DateSplitDTO.java @@ -0,0 +1,26 @@ +package com.demo.util.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @author YenHex + * @since 2023/3/24 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DateSplitDTO { + + Integer days; + + Date startDate; + + Date endDate; + + Integer yearMonth; + +} diff --git a/src/main/java/com/demo/xlt/Exl05Sys.java b/src/main/java/com/demo/xlt/Exl05Sys.java new file mode 100644 index 0000000..514b469 --- /dev/null +++ b/src/main/java/com/demo/xlt/Exl05Sys.java @@ -0,0 +1,24 @@ +package com.demo.xlt; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/5/15 + */ +@Data +public class Exl05Sys { + String channelCode; + String channelName; + String channelMgr; + String cusCode; + String cusName; + String saleRegion; + String province; + String city; + String saleRegionMgr; + String provinceMgr; + String cityMgr; + String cusMgr; + String channelType; +} diff --git a/src/main/java/com/demo/xlt/JslChannel.java b/src/main/java/com/demo/xlt/JslChannel.java new file mode 100644 index 0000000..8a14c80 --- /dev/null +++ b/src/main/java/com/demo/xlt/JslChannel.java @@ -0,0 +1,43 @@ +package com.demo.xlt; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/11 + */ +@Data +public class JslChannel { + + /** + * id + */ + private String id; + + /** + * 渠道编码 + */ + private String channelCode; + + /** + * 渠道名称 + */ + private String channelName; + + /** + * 渠道类型(读取数据字典) + */ + private String channelType; + + /** + * 备注 + */ + private String remark; + + /** + * 所属租户 + */ + private String tenantId; + + +} diff --git a/src/main/java/com/demo/xlt/JslChannelPoint.java b/src/main/java/com/demo/xlt/JslChannelPoint.java new file mode 100644 index 0000000..a8dc8f0 --- /dev/null +++ b/src/main/java/com/demo/xlt/JslChannelPoint.java @@ -0,0 +1,97 @@ +package com.demo.xlt; + +import com.demo.jsl.entity.channel.JslChannelSourcePoint; +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/11 + */ +@Data +public class JslChannelPoint { + + String shopArea; + Integer countCheckstand; + /** + * id + */ + private Long id; + /** + * 渠道名称 + */ + private Long channelId; + private String channelName; + /** + * 站点编码 + */ + private String pointCode; + /** + * 站点名称 + */ + private String pointName; + /** + * 站点等级(读取字典值) + */ + private String pointLevel; + /** + * 站点类型(读取字典值) + */ + private String pointType; + /** + * 详细地址 + */ + private String address; + /** + * 销售区域id + */ + private String saleRegionId; + /** + * 销售区域 + */ + private String saleRegionPath; + private String saleRegionPathIds; + /** + * 行政区域id + */ + private String bizRegionId; + /** + * 行政区域 + */ + private String bizRegionPath; + private String bizRegionPathIds; + /** + * 备注 + */ + private String remark; + private String mapAddress; + /** + * 所属租户 + */ + private String tenantId; + + public static JslChannelPoint toNewObject(JslChannelSourcePoint source) { + JslChannelPoint channelPoint = new JslChannelPoint(); +// channelPoint.setChannelId(source.getChannelId()); +// channelPoint.setChannelName(source.getChannelName()); + channelPoint.setPointCode(source.getPointCode()); + channelPoint.setPointName(source.getPointName()); + channelPoint.setShopArea(source.getShopArea()); + if (source.getCountCheckstand() != null) { + Integer s = Integer.parseInt(source.getCountCheckstand()); + channelPoint.setCountCheckstand(s); + } + channelPoint.setPointLevel(source.getPointLevel()); + channelPoint.setPointType(source.getPointType()); + channelPoint.setAddress(source.getAddress()); +// channelPoint.setSaleRegionId(source.getSaleRegionId()); +// channelPoint.setSaleRegionPath(source.getSaleRegionPath()); +// channelPoint.setSaleRegionPathIds(source.getSaleRegionPathIds()); +// channelPoint.setBizRegionId(source.getBizRegionId()); +// channelPoint.setBizRegionPath(source.getBizRegionPath()); +// channelPoint.setBizRegionPathIds(source.getBizRegionPathIds()); + channelPoint.setMapAddress(source.getMapAddress()); + channelPoint.setTenantId("001"); + return channelPoint; + } + +} diff --git a/src/main/java/com/demo/xlt/JslSupplier.java b/src/main/java/com/demo/xlt/JslSupplier.java new file mode 100644 index 0000000..a547128 --- /dev/null +++ b/src/main/java/com/demo/xlt/JslSupplier.java @@ -0,0 +1,122 @@ +package com.demo.xlt; + +import lombok.Data; + +/** + * @author YenHex + * @since 2023/1/10 + */ +@Data +public class JslSupplier { + + /** + * id + */ + private String id; + + /** + * 一级区域ID + */ + private String regionFirst; + + /** + * 二级区域ID + */ + private String regionSecond; + + /** + * 三级区域ID + */ + private String regionThird; + + /** + * 四级区域ID + */ + private String regionFourthly; + + /** + * 最子级区域ID + */ + private String regionLast; + + /** + * 行政一级区域ID + */ + private String region2First; + + /** + * 行政二级区域ID + */ + private String region2Second; + + /** + * 行政三级区域ID + */ + private String region2Third; + + /** + * 行政四级区域ID + */ + private String region2Fourthly; + + /** + * 行政最子级区域ID + */ + private String region2Last; + + /** + * 详细地址 + */ + private String address; + + /** + * 名称 + */ + private String name; + + /** + * 客户编码 + */ + private String code; + + /** + * 父级id + */ + private String pid; + + private String parentCode; + + /** + * 负责人 + */ + private String userId; + + /** + * 负责人 + */ + private String userCode; + + /** + * 负责人 + */ + private String userName; + + private String[] otherUserIds; + + private String otherUserNames; + + private String otherUserCodes; + + /** + * 所属账套 + */ + private String belong; + + /** + * 租户id + */ + private String tenantId; + + private String xltId; + +} diff --git a/src/main/java/com/demo/xlt/PointTestMain.java b/src/main/java/com/demo/xlt/PointTestMain.java new file mode 100644 index 0000000..960840f --- /dev/null +++ b/src/main/java/com/demo/xlt/PointTestMain.java @@ -0,0 +1,143 @@ +package com.demo.xlt; + +import com.demo.jsl.entity.region.JslRegion; +import com.demo.util.DSUtil; +import lombok.SneakyThrows; +import org.junit.Test; +import org.noear.wood.DbContext; + +import java.util.List; + +/** + * @author YenHex + * @since 2023/5/15 + */ +public class PointTestMain { + + @Test + @SneakyThrows + public void test2() { + DbContext qsTest = DSUtil.getQsTest(); + String sys_sql = + "SELECT `分区` sale_region ,`分区负责人` sale_region_mgr FROM `excel_05sys` GROUP BY `分区`,`分区负责人`"; + List exl05SysList = qsTest.sql(sys_sql).getList(Exl05Sys.class); + long id = 200; + for (Exl05Sys exl05Sys : exl05SysList) { + String sql1 = "select * from bms_region where name = ?"; + JslRegion region = qsTest.sql(sql1, exl05Sys.getSaleRegion()).getItem(JslRegion.class); + if (region == null || region.getId() == null) { + region = new JslRegion(); + region.setId("A" + id); + region.setName(exl05Sys.getSaleRegion()); + region.setCode("A" + id); + region.setPid("0"); + region.setLevel(1); + String pathIds = "A" + id; + String pathNames = exl05Sys.getSaleRegion(); + region.setPathIds(pathIds); + region.setPathNames(pathNames); + region.setTenantId("001"); + qsTest.table("bms_region").setEntity(region).insert(); + } + if (exl05Sys.getSaleRegionMgr().equals("麦仁兴23000004")) { + exl05Sys.setSaleRegionMgr("麦仁兴"); + } + id++; + String name = exl05Sys.getSaleRegion() + "(" + exl05Sys.getSaleRegionMgr() + ")"; + JslRegion region2 = qsTest.sql(sql1, name).getItem(JslRegion.class); + if (region2 == null || region2.getId() == null) { + region2 = new JslRegion(); + region2.setId("B" + id); + region2.setName(name); + region2.setCode("B" + id); + region2.setPid("0"); + region2.setLevel(1); + String pathIds = region.getPathIds() + "_" + "A" + id; + String pathNames = region.getPathNames() + "_" + exl05Sys.getSaleRegion(); + region2.setPathIds(pathIds); + region2.setPathNames(pathNames); + region2.setTenantId("001"); + qsTest.table("bms_region").setEntity(region2).insert(); + } + } + } + + @Test + @SneakyThrows + public void test4() { + DbContext qsTest = DSUtil.getQsTest(); + String sys_sql = "select " + + "系统编号 channel_code," + + "所属经销商编号 cus_code" + + " from excel_05sys"; + List exl05SysList = qsTest.sql(sys_sql).getList(Exl05Sys.class); + for (Exl05Sys exl05Sys : exl05SysList) { + String sql_q_channel = "select * from bms_channel where channel_code = ?"; + String sql_q_suplier = "select * from bms_supplier where code = ?"; + JslChannel channel = qsTest.sql(sql_q_channel, exl05Sys.getChannelCode()).getItem(JslChannel.class); + JslSupplier supplier = qsTest.sql(sql_q_suplier, exl05Sys.getChannelCode()).getItem(JslSupplier.class); + String sql1 = "insert bms_supplier_channel(channel_id,supplier_id,tenant_id)value(?,?,'001')"; + qsTest.sql(sql1, channel.getId(), supplier.getId()).execute(); + } + } + + + @Test + @SneakyThrows + public void test3() { + DbContext qsTest = DSUtil.getQsTest(); + String sys_sql = "select " + + "系统编号 channel_code," + + "所属经销商编号 cus_code" + + " from excel_05sys"; + List exl05SysList = qsTest.sql(sys_sql).getList(Exl05Sys.class); + for (Exl05Sys exl05Sys : exl05SysList) { + String sql_q_channel = "select * from bms_channel where channel_code = ?"; + String sql_q_suplier = "select * from bms_supplier where code = ?"; + JslChannel channel = qsTest.sql(sql_q_channel, exl05Sys.getChannelCode()).getItem(JslChannel.class); + JslSupplier supplier = qsTest.sql(sql_q_suplier, exl05Sys.getChannelCode()).getItem(JslSupplier.class); + String sql1 = "insert bms_supplier_channel(channel_id,supplier_id,tenant_id)value(?,?,'001')"; + qsTest.sql(sql1, channel.getId(), supplier.getId()).execute(); + } + } + + +// @Test +// @SneakyThrows +// public void test3(){ +// DbContext qsTest = DSUtil.getQsTest(); +// String sys_sql = "select " + +// "系统编号 channel_code," + +// "系统名称 channel_name," + +// "业务人员_系统 channel_mgr," + +// "所属经销商编号 cus_code," + +// "所属经销商名称 cus_name," + +// "分区 sale_region," + +// "省份 province," + +// "城市 city," + +// "分区负责人 sale_region_mgr," + +// "省份负责人 province_mgr," + +// "城市负责人 city_mgr," + +// "业务人员_经销商 cus_mgr," + +// "二级渠道 channel_type" + +// " from excel_05sys"; +// System.out.println(sys_sql); +// List exl05SysList = qsTest.sql(sys_sql).getList(Exl05Sys.class); +// for (Exl05Sys exl05Sys : exl05SysList) { +// String sql_q_channel = "select * from bms_channel where channel_code = ?"; +// JslChannel channel = qsTest.sql(sql_q_channel,exl05Sys.getChannelCode()).getItem(JslChannel.class); +// if(channel==null){ +// System.out.println("新增:"+exl05Sys.getChannelName()); +// channel = new JslChannel(); +// channel.setChannelCode(exl05Sys.getChannelCode()); +// channel.setChannelName(exl05Sys.getChannelName()); +// channel.setChannelType(exl05Sys.getChannelType()); +// channel.setTenantId("001"); +// long id = qsTest.table("bms_channel").setEntity(channel).insert(); +// channel.setId(id); +// } +// } +// } + + +} diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml new file mode 100644 index 0000000..256be64 --- /dev/null +++ b/src/main/resources/logback.xml @@ -0,0 +1,82 @@ + + + + + + + + + + UTF-8 + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + + + + + + UTF-8 + + ${LOG_HOME}/${appName}.log + + + + ${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.log + + 365 + + + 100MB + + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [ %logger{50} : %line ] - %msg%n + + + + + + + + + + + + + + + + + + diff --git a/src/test/java/GpsCorrect.java b/src/test/java/GpsCorrect.java new file mode 100644 index 0000000..64b801e --- /dev/null +++ b/src/test/java/GpsCorrect.java @@ -0,0 +1,15 @@ +public class GpsCorrect { + + + public static void main(String[] args) { + String wdSql = "select wd.id,wd.name,wd.number_ code,wd.cid city_id,ds.quDaoTwo channel_id,ek" + + ".name type ,lv.WDLevelName level_name,wd.address " + + " from WangDian wd" + + " LEFT JOIN DealerSystem as ds ON wd.sysId = ds.id" + + " LEFT JOIN emp_keHuType as ek ON ds.keHuType = ek.id" + + " LEFT JOIN WDLevel as lv ON wd.wdLevel = lv.id"; + System.out.println(wdSql); + } + + +}