YenHex 2 years ago
commit
b9bcf3eda1
  1. 154
      pom.xml
  2. 55
      src/main/java/com/demo/Application.java
  3. 151
      src/main/java/com/demo/Application2.java
  4. 22
      src/main/java/com/demo/SqlIdUtil.java
  5. 18
      src/main/java/com/demo/SyncActVtb.java
  6. 115
      src/main/java/com/demo/SyncDiscountBudget.java
  7. 102
      src/main/java/com/demo/cost/Other.java
  8. 445
      src/main/java/com/demo/cost/SyncVerificationMain.java
  9. 40
      src/main/java/com/demo/cost/TbsMapper.java
  10. 686
      src/main/java/com/demo/cost/TbsServiceImpl.java
  11. 27
      src/main/java/com/demo/cost/entity/JslBmsRegion.java
  12. 147
      src/main/java/com/demo/cost/entity/JslTbsActivity.java
  13. 204
      src/main/java/com/demo/cost/entity/JslTbsActivityCenterGoods.java
  14. 106
      src/main/java/com/demo/cost/entity/JslTbsActivitySubject.java
  15. 85
      src/main/java/com/demo/cost/entity/JslTbsBudget.java
  16. 211
      src/main/java/com/demo/cost/entity/JslTbsBudgetCostItem.java
  17. 265
      src/main/java/com/demo/cost/entity/JslTbsBudgetLog.java
  18. 22
      src/main/java/com/demo/cost/entity/JslTbsCostApply.java
  19. 103
      src/main/java/com/demo/cost/entity/JslVtbFundFlow.java
  20. 50
      src/main/java/com/demo/cost/entity/XltCheckCostItem.java
  21. 217
      src/main/java/com/demo/dbdemo/DaoUtil.java
  22. 53
      src/main/java/com/demo/doc/PrintDemo.java
  23. 115
      src/main/java/com/demo/doc/TestDox.java
  24. 93
      src/main/java/com/demo/doc/dto/Dx.java
  25. 90
      src/main/java/com/demo/doc/util/FileUtilTest.java
  26. 62
      src/main/java/com/demo/doc/util/JavaClassUtil.java
  27. 205
      src/main/java/com/demo/dto/DaoContext.java
  28. 72
      src/main/java/com/demo/dto/DaoTest.java
  29. 33
      src/main/java/com/demo/dto/DemoUser.java
  30. 33
      src/main/java/com/demo/dto/model/SqlColumn.java
  31. 17
      src/main/java/com/demo/dto/model/SqlCondition.java
  32. 24
      src/main/java/com/demo/dto/model/SqlTable.java
  33. 35
      src/main/java/com/demo/dto/util/BeanFieldUtil.java
  34. 193
      src/main/java/com/demo/dto/util/JdbcExecutor.java
  35. 85
      src/main/java/com/demo/dto/util/SqlBuilderUtil.java
  36. 170
      src/main/java/com/demo/dto/util/SqlClazzStorage.java
  37. 59
      src/main/java/com/demo/dto/util/SqlOptionContext.java
  38. 196
      src/main/java/com/demo/jsl/InitBudgetSchedule.java
  39. 290
      src/main/java/com/demo/jsl/ServiceMain.java
  40. 33
      src/main/java/com/demo/jsl/ServiceMain2.java
  41. 57
      src/main/java/com/demo/jsl/ServiceOld.java
  42. 53
      src/main/java/com/demo/jsl/entity/cate/JslGoodsCategory.java
  43. 20
      src/main/java/com/demo/jsl/entity/cate/XltGoodsCategory.java
  44. 82
      src/main/java/com/demo/jsl/entity/channel/BmsMasterUser.java
  45. 44
      src/main/java/com/demo/jsl/entity/channel/JslChannel.java
  46. 96
      src/main/java/com/demo/jsl/entity/channel/JslChannelPoint.java
  47. 57
      src/main/java/com/demo/jsl/entity/channel/JslChannelSourcePoint.java
  48. 16
      src/main/java/com/demo/jsl/entity/channel/JslPointUser.java
  49. 10
      src/main/java/com/demo/jsl/entity/channel/SupplierMgr.java
  50. 13
      src/main/java/com/demo/jsl/entity/channel/XltQuDaoOne.java
  51. 14
      src/main/java/com/demo/jsl/entity/channel/XltQuDaoTwo.java
  52. 21
      src/main/java/com/demo/jsl/entity/channel/XltWangDian.java
  53. 133
      src/main/java/com/demo/jsl/entity/costapply/JslActivity.java
  54. 99
      src/main/java/com/demo/jsl/entity/costapply/JslActivityCenter.java
  55. 208
      src/main/java/com/demo/jsl/entity/costapply/JslActivityCenterGoods.java
  56. 80
      src/main/java/com/demo/jsl/entity/costapply/JslActivityGoods.java
  57. 106
      src/main/java/com/demo/jsl/entity/costapply/JslActivitySubject.java
  58. 123
      src/main/java/com/demo/jsl/entity/costapply/JslCostApply.java
  59. 273
      src/main/java/com/demo/jsl/entity/costapply/TbsActivityCenterGoodsSplit.java
  60. 35
      src/main/java/com/demo/jsl/entity/costapply/XltCost.java
  61. 59
      src/main/java/com/demo/jsl/entity/costapply/XltCostItem.java
  62. 19
      src/main/java/com/demo/jsl/entity/dept/JslDept.java
  63. 18
      src/main/java/com/demo/jsl/entity/dept/SeeYonDept.java
  64. 18
      src/main/java/com/demo/jsl/entity/dept/XltDept.java
  65. 29
      src/main/java/com/demo/jsl/entity/goods/JslGoodSpecValue.java
  66. 75
      src/main/java/com/demo/jsl/entity/goods/JslGoodSpu.java
  67. 110
      src/main/java/com/demo/jsl/entity/goods/JslGoodsSku.java
  68. 46
      src/main/java/com/demo/jsl/entity/goods/JslGoodsSkuSpecValue.java
  69. 25
      src/main/java/com/demo/jsl/entity/goods/JslSpuSpec.java
  70. 24
      src/main/java/com/demo/jsl/entity/goods/XltGoods.java
  71. 19
      src/main/java/com/demo/jsl/entity/goods/XltSpu.java
  72. 122
      src/main/java/com/demo/jsl/entity/pay/PayPayment.java
  73. 110
      src/main/java/com/demo/jsl/entity/pay/PayPaymentItem.java
  74. 49
      src/main/java/com/demo/jsl/entity/region/JslRegion.java
  75. 24
      src/main/java/com/demo/jsl/entity/region/SorRegion.java
  76. 16
      src/main/java/com/demo/jsl/entity/region/XltDealerArea.java
  77. 14
      src/main/java/com/demo/jsl/entity/region/XltDealerCity.java
  78. 19
      src/main/java/com/demo/jsl/entity/region/XltDealerProvince.java
  79. 42
      src/main/java/com/demo/jsl/entity/schedule/TbsSchedule.java
  80. 55
      src/main/java/com/demo/jsl/entity/schedule/TbsScheduleItem.java
  81. 21
      src/main/java/com/demo/jsl/entity/subject/JslSubject.java
  82. 22
      src/main/java/com/demo/jsl/entity/subject/XltSubject.java
  83. 161
      src/main/java/com/demo/jsl/entity/supplier/JslSupplier.java
  84. 20
      src/main/java/com/demo/jsl/entity/supplier/XltSupplier.java
  85. 16
      src/main/java/com/demo/jsl/entity/supplier/dto/XltSupplierEmp.java
  86. 17
      src/main/java/com/demo/jsl/entity/test/TestDemo.java
  87. 16
      src/main/java/com/demo/jsl/entity/user/ExcelData0508.java
  88. 16
      src/main/java/com/demo/jsl/entity/user/ExcelUserRole.java
  89. 44
      src/main/java/com/demo/jsl/entity/user/JslPost.java
  90. 62
      src/main/java/com/demo/jsl/entity/user/JslPostUser.java
  91. 90
      src/main/java/com/demo/jsl/entity/user/JslUser.java
  92. 19
      src/main/java/com/demo/jsl/entity/user/SyUser.java
  93. 37
      src/main/java/com/demo/jsl/entity/user/SysUserSales.java
  94. 17
      src/main/java/com/demo/jsl/entity/user/XltRole.java
  95. 21
      src/main/java/com/demo/jsl/entity/user/XltUser.java
  96. 17
      src/main/java/com/demo/jsl/entity/user/XltUserRole.java
  97. 116
      src/main/java/com/demo/jsl/entity/verifi/VtbVerification.java
  98. 185
      src/main/java/com/demo/jsl/entity/verifi/VtbVerificationSubject.java
  99. 14
      src/main/java/com/demo/jsl/service/BmsService.java
  100. 30
      src/main/java/com/demo/jsl/service/ChannelPointService.java

154
pom.xml

@ -0,0 +1,154 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>new-db-script</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>4.0.3</version>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.4</version>
</dependency>
<!-- doc -->
<dependency>
<groupId>com.thoughtworks.qdox</groupId>
<artifactId>qdox</artifactId>
<version>2.0.1</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.github.shalousun</groupId>-->
<!-- <artifactId>qdox</artifactId>-->
<!-- <version>2.0.3</version>-->
<!-- </dependency>-->
<!-- 本示例中使用到的相关工具类 -->
<dependency>
<groupId>com.idea-aedi</groupId>
<artifactId>common-spring</artifactId>
<version>2100.5.6</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.16</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>8.2.2.jre8</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.noear</groupId>
<artifactId>wood</artifactId>
<version>1.0.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.10</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<finalName>app</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<!--这里要替换成jar包main方法所在类 -->
<mainClass>com.demo.Application</mainClass>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- 指定在打包节点执行jar包合并操作 -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

55
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(;);
}
}

151
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();
}
}

22
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+")";
}
}

18
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<String> 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);
}
}

115
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<XltDiscountBudget> 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();
}
}
}

102
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();
}
}

445
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<String> 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<JslTbsCostApply> costList = jslDbContext.sql(sql_cost_list).getList(JslTbsCostApply.class);
System.out.println("未完成数量:"+costList.size());
//移除历史同步失败的
List<String> 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<JslTbsActivity> 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<JslTbsActivity> 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<XltCheckCostItem> 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();
}
}

40
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;
}
}

686
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<String> 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<String> list){
Set<String> 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<JslCostApply> selectByCodeList = jslContext.sql(selectByCodeSql).getList(JslCostApply.class);
System.out.println("==> "+selectByCodeList.size()+"条核销将被移除");
if(selectByCodeList.size()==0){
return;
}
List<String> 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<String> 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<XltCost> allCostList = getXltCostList(year, month, xltContext);
if (allCostList.size() < 1) {
log.info(year + "年" + month + "月无数据");
return;
}
List<List<XltCost>> listList = CollectionUtil.createList(allCostList, 2000);
List<XltCost> costList = new ArrayList<>();
for (List<XltCost> xltCostList : listList) {
String codes = "(" + xltCostList.stream().map(xltCost -> "'" + xltCost.getCode() + "'").collect(Collectors.joining(",")) + ")";
List<JslCostApply> existCodes = jslContext.sql("select code,xlt_sync from tbs_cost_apply where code in " + codes).getList(JslCostApply.class);
List<String> 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<XltCost> costList, String fileName, String title) {
List<JslGoodsCategory> 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<JslSupplier> 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<JslGoodsCategory> categoryList, List<JslSupplier> 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<XltCostItem> 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<XltCostItem> 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<XltCostItem> costItemList = xltContext.sql(sql).getList(XltCostItem.class);
return costItemList;
}
@SneakyThrows
private List<XltCost> 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<XltCost> 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 ");
}
}

27
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;
}

147
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;
}

204
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;
/**
* 目标类型(brandcategoryseriesspusku)
*/
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;
}

106
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;
}

85
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;
}

211
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;
}

265
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;
}

22
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;
}

103
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;
}

50
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;
}

217
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 <T> List<T> query(String strSql, Object[] param, Class<T> clazz) {
conn = getConnection();
//该集合存储数据表数据
List<T> pList = new ArrayList<T>();
//实体对象
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 <T> 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();
}
}
}

53
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);
}
}

115
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<JavaMethod> 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());
}
}
}
}

93
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<ApiModule> apiServiceList;
@Data
public static class ApiModule {
private String moduleName;
private List<ApiService> apiServiceList;
}
@Data
public static class ApiService {
private String serviceName;
private List<ApiRequest> apiRequestList;
}
@Data
public static class ApiFiled {
/**
* 字段名
*/
private String name;
/**
* 字段类型
* stringintdoubledecimalObjectList<OBJECT>
**/
private String type;
/**
* 备注
*/
private String description;
/**
* 是否必须
*/
private boolean required;
/**
* 版本
*/
private String version;
private ApiObject object;
private List<ApiObject> array;
}
@Data
public static class ApiObject {
private String className;
private List<ApiFiled> filedList;
}
@Data
public static class ApiRequest {
/**
* 请求方式
*/
private String method;
/**
* 请求地址
*/
private String url;
/**
* 备注
*/
private String comment;
/**
* 头部
*/
private List<ApiFiled> header;
/**
* 头部
*/
private List<ApiFiled> query;
private List<ApiFiled> variable;
private ApiObject body;
}
}

90
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<String> lisFile(String path, String fileType) {
List<String> 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<String> paths = FileUtilTest.lisFile(path, "pom.xml");
Set<String> groupSet = new HashSet<>();
for (String p : paths) {
File file = new File(p);
String content = FileUtils.readFileToString(file, "UTF-8");
// groupId
String regex = "<groupId>(.*?)</groupId>";
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<String> groupSet = new HashSet<>();
String regex = "<groupId>(.*?)</groupId>";
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 = "<artifactId>(.*?)</artifactId>";
Pattern pattern2 = Pattern.compile(regex2);
Matcher m2 = pattern2.matcher(content);
while (m2.find()) {
System.out.println(m2.group());
}*/
}
}

62
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);
}
}

205
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 <T> String insert(T object){
String sql = SqlBuilderUtil.buildInsertSql(object,null);
return jdbcExecutor.executeInsert(sql);
}
public <T> String insert(String table,T object){
String sql = SqlBuilderUtil.buildInsertSql(object,table);
return jdbcExecutor.executeInsert(sql);
}
public <T> void deleteById(Class<T> 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 <T> void deleteByIds(Class<T> 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 <T> int delete(T condition){
String sql = SqlBuilderUtil.buildDeleteSql(condition.getClass())
+ "where "+ buildWhereSql(condition);
return jdbcExecutor.execute(sql);
}
public <T> int delete(T condition,String[] ignoreColumns){
String sql = SqlBuilderUtil.buildDeleteSql(condition.getClass())
+ "where "+ buildWhereSql(condition,ignoreColumns);
return jdbcExecutor.execute(sql);
}
public <T> int updateById(T updateVal, Serializable id){
String sql = SqlBuilderUtil.buildUpdateSql(updateVal,null) + " where id = "+id;
return jdbcExecutor.execute(sql);
}
public <T> 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 <T> int update(T updateVal, T condition){
String sql = SqlBuilderUtil.buildUpdateSql(updateVal,null) + " where " + buildWhereSql(condition);
return jdbcExecutor.execute(sql);
}
public <T> int update(String table, T updateVal, T condition){
String sql = SqlBuilderUtil.buildUpdateSql(updateVal,table) + " where " + buildWhereSql(condition);
return jdbcExecutor.execute(sql);
}
public <T> void insertBatch(List<T> list){
insertBatch(list,500);
}
public <T> void insertBatch(String table, List<T> list){
insertBatch(table,list,500);
}
public <T> void insertBatch(List<T> list,int batchSize){
List<List<T>> listList = CollUtil.split(list,batchSize);
for (List<T> tList : listList) {
insertBaseBatch(null,tList);
}
}
public <T> void insertBatch(String table, List<T> list,int batchSize){
List<List<T>> listList = CollUtil.split(list,batchSize);
for (List<T> tList : listList) {
insertBaseBatch(table,tList);
}
}
private <T> void insertBaseBatch(String table, List<T> list){
String sql = SqlBuilderUtil.buildBatchInsertSql(list,table);
//TODO 返回并注入id
jdbcExecutor.executeInsert(sql);
}
/** 获取where条件 */
public <T> String buildWhereSql(T condition,String alia,String[] ignoreColumns){
return SqlBuilderUtil.buildEqualCondition(condition,alia,ignoreColumns);
}
/** 获取where条件 */
public <T> String buildWhereSql(T condition,String alia){
return SqlBuilderUtil.buildEqualCondition(condition,alia,null);
}
/** 获取where条件 */
public <T> String buildWhereSql(T condition,String[] ignoreColumns){
return SqlBuilderUtil.buildEqualCondition(condition,null,ignoreColumns);
}
/** 获取where条件 */
public <T> String buildWhereSql(T condition){
return SqlBuilderUtil.buildEqualCondition(condition,null,null);
}
public <T> T selectOne(T condition){
String sql = SqlBuilderUtil.buildSelectSql(condition.getClass(),null,null,null)
+" where "+buildWhereSql(condition);
Class<T> tClass = (Class<T>) condition.getClass();
return jdbcExecutor.queryOne(sql,tClass);
}
public <T> T selectOne(String table, T condition,String[] ignoreColumns){
String sql = SqlBuilderUtil.buildSelectSql(condition.getClass(),table,null,ignoreColumns)
+" where "+buildWhereSql(condition);
Class<T> tClass = (Class<T>) condition.getClass();
return jdbcExecutor.queryOne(sql,tClass);
}
public <T> T selectOne(T condition,String[] ignoreColumns){
String sql = SqlBuilderUtil.buildSelectSql(condition.getClass(),null,null,ignoreColumns)
+" where "+buildWhereSql(condition);
Class<T> tClass = (Class<T>) condition.getClass();
return jdbcExecutor.queryOne(sql,tClass);
}
public <T> List<T> selectList(T condition){
String sql = SqlBuilderUtil.buildSelectSql(condition.getClass(),null,null,null)
+" where "+buildWhereSql(condition);
Class<T> tClass = (Class<T>) condition.getClass();
return jdbcExecutor.queryList(sql,tClass);
}
public <T> List<T> selectList(String table,T condition,String[] ignoreColumns){
String sql = SqlBuilderUtil.buildSelectSql(condition.getClass(),table,null,ignoreColumns)
+" where "+buildWhereSql(condition);
Class<T> tClass = (Class<T>) condition.getClass();
return jdbcExecutor.queryList(sql,tClass);
}
public <T> List<T> selectList(T condition,String[] ignoreColumns){
String sql = SqlBuilderUtil.buildSelectSql(condition.getClass(),null,null,ignoreColumns)
+" where "+buildWhereSql(condition);
Class<T> tClass = (Class<T>) condition.getClass();
return jdbcExecutor.queryList(sql,tClass);
}
public <T> 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 <T> 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);
}
}

72
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<DemoUser> 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();
}
}

33
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;
}

33
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 "";
}

17
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
}

24
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 "";
}

35
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();
}
}

193
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> T queryOne(String sql,Class<T> 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<T> 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 <T> List<T> queryList(String sql,Class<T> 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<T> list = resultSetToBean(rs,clazz);
stmt.close();
rs.close();
return list;
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return new ArrayList<>();
}
/**
* 返回实体列
* @param resultSet
* @param beanClass
* @param <T>
* @return
*/
public <T> List<T> resultSetToBean(ResultSet resultSet, Class beanClass){
Field[] fields = beanClass.getDeclaredFields();
List<T> 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;
}
}

85
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 <T> String buildDeleteSql(Class<T> clazz){
return "delete from "+SqlClazzStorage.getTableName(clazz)+" ";
}
/** delete sql */
public static <T> String buildSelectCountSql(Class<T> clazz){
return "select count(1) from "+SqlClazzStorage.getTableName(clazz)+" ";
}
/** select sql */
public static <T> String buildSelectSql(Class<T> 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+")";
}
}

170
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;
}
}

59
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> T getOne(Class<T> objectClass){
return jdbcExecutor.queryOne(sql,objectClass);
}
public <T> List<T> getList(Class<T> 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);
}
}

196
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);
}
}

290
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<XltQuDaoOne> quDaoOneList = xltDb
.sql("select id,name from emp_quDaoOne")
.getList(XltQuDaoOne.class);
List<XltQuDaoTwo> quDaoTwoList = xltDb
.sql("select id,name,shangji pid from emp_quDaotwo")
.getList(XltQuDaoTwo.class);
List<JslRegion> 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<String, JslChannel> 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<XltWangDian> 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<XltSupplier> 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<JslRegion> 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<JslSupplier> 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<XltDealerArea> areaList = xltDb.sql("select id,area from DealerArea").getList(XltDealerArea.class);
List<XltDealerProvince> provinceList = xltDb.sql("select id,province,aid from DealerProvince").getList(XltDealerProvince.class);
List<XltDealerCity> 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++;
}
}
}

33
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;
}
}

57
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<XltDept> 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();
}
}
}

53
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;
}

20
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;
}

82
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;
/**
* 类型channelpointcenter
*/
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;
}

44
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;
}

96
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;
}
}

57
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;
}

16
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;
}

10
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;
}

13
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;
}

14
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;
}

21
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;
}

133
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;
}

99
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;
}

208
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;
/**
* 目标类型(brandcategoryseriesspusku)
*/
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;
}

80
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;
/**
* 目标类型(brandcategoryseriesspusku)
*/
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;
}

106
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;
}

123
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;
}

273
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;
/**
* 目标类型(brandcategoryseriesspusku)
*/
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;
}
}

35
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;
}

59
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;
}

19
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;
}

18
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;
}

18
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;
}

29
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;
}

75
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;
}

110
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;
/**
* 是否启用10否
*/
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;
}

46
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;
}

25
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;
}

24
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;
}

19
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;
}

122
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;
}

110
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;
}

49
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;
}

24
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;
}

16
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;
}

14
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;
}

19
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;
}

42
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;
}

55
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;
}

21
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;
}

22
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;
}

161
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);
}
}

20
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;
}

16
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;
}

17
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;
}

16
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;
}

16
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;
}

44
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;
}

62
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;
}

90
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;
}

19
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;
}

37
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;
}

17
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;
}

21
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;
}

17
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;
}

116
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;
}

185
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;
/**
* 是否有效01
*/
private Integer effectiveFlag;
/**
* 表单id
*/
private Long formId;
/**
* 表单标题
*/
private String formTitle;
/**
* 表单版本
*/
private Integer formVersion;
/**
* 表单内容
*/
private String formContext;
/**
* 表单内容值
*/
private String formContextValue;
/**
* 可更变的最大金额
*/
private BigDecimal maxChangeAmount;
}

14
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();
}

30
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();
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save