فهرست منبع

Merge branch 'test-transfer' into test-user

* test-transfer:
  同步合伙人金额变动记录表
  用户结算卡修改记录同步,用户分期表数据同步
  no message
  系统消息已读表新增
  创客学堂同步
  创客预扣款表字段增加
  仓库额度担保额度同步
  仓库额度和小分仓额度
  券码划拨记录表同步
  同步机具券相关表
  同步数据添加跨库事务
  修复仓库额度数据同步
  线上环境日志不打印到服务器
  查询过期机具加上用户ID大于0
  优化定时任务逻辑,添加定时任务不自动执行
  sls日志添加topic
  添加过期机具未返回错误信息到msg
  添加sls日志捕获
  修复同步机具回收表
mac 2 سال پیش
والد
کامیت
ec29aecd9d
40فایلهای تغییر یافته به همراه812 افزوده شده و 213 حذف شده
  1. 19 20
      kxs-common/kxs-common-core/src/main/resources/logback-spring.xml
  2. 5 5
      kxs-gateway/src/main/java/com/kxs/gateway/api/filter/RequestDecoderFilter.java
  3. 0 27
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/config/KxsOldConfigProperties.java
  4. 2 1
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/impl/KxsMachineDeductServiceImpl.java
  5. 2 0
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/impl/KxsMachineServiceImpl.java
  6. 0 26
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/task/KxsProductTask.java
  7. 1 0
      kxs-product/kxs-product-biz/src/main/resources/mapper/KxsMachineMapper.xml
  8. 34 9
      kxs-quartz/src/main/java/com/kxs/daemon/quartz/controller/SysJobController.java
  9. 0 2
      kxs-quartz/src/main/java/com/kxs/daemon/quartz/task/ProductBeanTask.java
  10. 0 2
      kxs-quartz/src/main/java/com/kxs/daemon/quartz/task/SpringBeanTaskDemo.java
  11. 0 1
      kxs-quartz/src/main/java/com/kxs/daemon/quartz/task/UserBeanTask.java
  12. 0 71
      kxs-quartz/src/main/resources/logback-spring.xml
  13. 6 0
      kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/model/KxsSchoolMenu.java
  14. 56 0
      kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/model/KxsSysMsgRead.java
  15. 17 0
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/mapper/KxsSysMsgReadMapper.java
  16. 15 0
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/KxsSysMsgReadService.java
  17. 19 0
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsSysMsgReadServiceImpl.java
  18. 27 1
      kxs-transfer/src/main/java/com/kxs/transfer/api/controller/DtsController.java
  19. 19 0
      kxs-transfer/src/main/java/com/kxs/transfer/api/mapper/sys/KxsSchoolMenuMapper.java
  20. 19 0
      kxs-transfer/src/main/java/com/kxs/transfer/api/mapper/sys/KxsSysMsgReadMapper.java
  21. 1 0
      kxs-transfer/src/main/java/com/kxs/transfer/api/mapper/user/KxsUserByStageMapper.java
  22. 15 13
      kxs-transfer/src/main/java/com/kxs/transfer/api/service/store/impl/KxsMachineRecycleServiceImpl.java
  23. 51 15
      kxs-transfer/src/main/java/com/kxs/transfer/api/service/store/impl/KxsWarehouseServiceImpl.java
  24. 50 3
      kxs-transfer/src/main/java/com/kxs/transfer/api/service/sys/KxsSysMsgService.java
  25. 11 1
      kxs-transfer/src/main/java/com/kxs/transfer/api/service/sys/impl/KxsSchoolStudyServiceImpl.java
  26. 2 0
      kxs-transfer/src/main/java/com/kxs/transfer/api/service/user/KxsBankChangeLogService.java
  27. 2 0
      kxs-transfer/src/main/java/com/kxs/transfer/api/service/user/KxsPartnerService.java
  28. 4 0
      kxs-transfer/src/main/java/com/kxs/transfer/api/service/user/KxsUserByStageService.java
  29. 65 0
      kxs-transfer/src/main/java/com/kxs/transfer/api/service/user/impl/KxsBankChangeLogServiceImpl.java
  30. 97 0
      kxs-transfer/src/main/java/com/kxs/transfer/api/service/user/impl/KxsPartnerServiceImpl.java
  31. 3 0
      kxs-transfer/src/main/java/com/kxs/transfer/api/service/user/impl/KxsUserAdvanceServiceImpl.java
  32. 175 0
      kxs-transfer/src/main/java/com/kxs/transfer/api/service/user/impl/KxsUserByStageServiceImpl.java
  33. 67 3
      kxs-transfer/src/main/resources/import.txt
  34. 8 2
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/model/KxsPartnerAmountLog.java
  35. 6 0
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/model/KxsUserAdvance.java
  36. 3 4
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/model/KxsUserByStage.java
  37. 3 4
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/model/KxsUserByStageLog.java
  38. 5 1
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsTotalDebtServiceImpl.java
  39. 2 2
      kxs-user/kxs-user-biz/src/main/resources/mapper/KxsPartnerAmountLogMapper.xml
  40. 1 0
      kxs-user/kxs-user-biz/src/main/resources/mapper/KxsUserAdvanceMapper.xml

+ 19 - 20
kxs-common/kxs-common-core/src/main/resources/logback-spring.xml

@@ -62,16 +62,6 @@
 			<level>ERROR</level>
 		</filter>
 	</appender>
-
-	<!--为了防止进程退出时,内存中的数据丢失,请加上此选项-->
-	<shutdownHook class="ch.qos.logback.core.hook.DefaultShutdownHook"/>
-	<!-- 可用来获取StatusManager中的状态 -->
-	<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/>
-
-	<!-- 解决debug模式下循环发送的问题 -->
-	<logger name="org.apache.http.impl.conn.Wire" level="WARN" />
-
-	<!-- 引入sls日志 -->
 	<appender name="aliyun" class="com.aliyun.openservices.log.logback.LoghubAppender">
 		<!-- Configure account and network  -->
 		<endpoint>cn-chengdu.log.aliyuncs.com</endpoint>
@@ -84,14 +74,12 @@
 		<logStore>kxs-store</logStore>
 
 		<!-- Optional parameters -->
-<!--		#单个 producer 实例能缓存的日志大小上限,默认为 100MB。-->
-		<!-- 可选项 -->
-		<springName name="kxs-gateway">
-			<topic>kxs-gateway</topic>
-		</springName>
+		<!-- 主题名称 -->
+		<topic>${spring.application.name}</topic>
+		<!--		#单个 producer 实例能缓存的日志大小上限,默认为 100MB。-->
 		<totalSizeInBytes>104857600</totalSizeInBytes>
 		<maxBlockMs>0</maxBlockMs>
-<!--		执行日志发送任务的线程池大小,默认为可用处理器个数。-->
+		<!--		执行日志发送任务的线程池大小,默认为可用处理器个数。-->
 		<ioThreadCount>8</ioThreadCount>
 		<batchSizeThresholdInBytes>524288</batchSizeThresholdInBytes>
 		<batchCountThreshold>4096</batchCountThreshold>
@@ -116,16 +104,28 @@
 			<level>ERROR</level>
 			<level>INFO</level>
 		</filter>
+
+		<!-- 屏蔽transfer模块 -->
+		<logger name="com.kxs.transfer.api" level="OFF"/>
+
 	</appender>
+	<!--为了防止进程退出时,内存中的数据丢失,请加上此选项-->
+	<shutdownHook class="ch.qos.logback.core.hook.DefaultShutdownHook"/>
+	<!-- 可用来获取StatusManager中的状态 -->
+	<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener"/>
 
-	<!-- Level: FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 -->
+	<!-- 解决debug模式下循环发送的问题 -->
+	<logger name="org.apache.http.impl.conn.Wire" level="WARN" />
 
+	<!-- 引入sls日志 -->
 	<springProfile name="dev">
 		<root level="INFO">
 			<appender-ref ref="console"/>
-			<appender-ref ref="aliyun" />
 		</root>
 	</springProfile>
+
+	<!-- Level: FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 -->
+
 	<springProfile name="test">
 		<root level="INFO">
 			<appender-ref ref="console"/>
@@ -136,9 +136,8 @@
 	<springProfile name="prod">
 		<root level="INFO">
 			<appender-ref ref="console"/>
-			<appender-ref ref="debug"/>
-			<appender-ref ref="error"/>
 			<appender-ref ref="aliyun" />
 		</root>
 	</springProfile>
+
 </configuration>

+ 5 - 5
kxs-gateway/src/main/java/com/kxs/gateway/api/filter/RequestDecoderFilter.java

@@ -109,9 +109,9 @@ public class RequestDecoderFilter extends AbstractGatewayFilterFactory<Object> {
 		Flux<DataBuffer> modifiedBody = serverRequest.bodyToFlux(String.class).flatMap(body -> {
 			// 解密请求体
 			try {
-				log.info("待解密请求参数:{}", body);
+//				log.info("待解密请求参数:{}", body);
 				String decryptStr = cryptoAes.decryptStr(body);
-				log.info("解密后参数:{}", decryptStr);
+//				log.info("解密后参数:{}", decryptStr);
 
 				DataBufferFactory dataBufferFactory = exchange.getResponse().bufferFactory();
 				DataBuffer bodyDataBuffer = dataBufferFactory.wrap(decryptStr.getBytes());
@@ -165,9 +165,9 @@ public class RequestDecoderFilter extends AbstractGatewayFilterFactory<Object> {
 			if(CharSequenceUtil.isEmpty(decryptedParam)){
 				return chain.filter(exchange);
 			}
-			log.info("GET:{},请求待解密数据 :{}", exchange.getRequest().getURI(),decryptedParam);
+//			log.info("GET:{},请求待解密数据 :{}", exchange.getRequest().getURI(),decryptedParam);
 			String decryptStr = cryptoAes.decryptStr(decryptedParam);
-			log.info("GET解密后数据 :{}", decryptStr);
+//			log.info("GET解密后数据 :{}", decryptStr);
 
 			JSONObject decryptJson = JSON.parseObject(decryptStr);
 			//构建新的请求参数webflux
@@ -188,7 +188,7 @@ public class RequestDecoderFilter extends AbstractGatewayFilterFactory<Object> {
 					parameters.add(key, URLEncoder.encode(String.valueOf(value), StandardCharsets.UTF_8));
 				}
 			});
-			log.info("GET解密后数据 :{}", parameters);
+//			log.info("GET解密后数据 :{}", parameters);
 			// 构建修改后的URI
 			URI modifiedUri = UriComponentsBuilder.fromUri(exchange.getRequest().getURI())
 					.replaceQueryParams(parameters)

+ 0 - 27
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/config/KxsOldConfigProperties.java

@@ -1,27 +0,0 @@
-package com.kxs.product.biz.config;
-
-import lombok.Data;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.cloud.context.config.annotation.RefreshScope;
-
-import java.util.List;
-
-
-/**
- * 关于老平台的配置文件
- *
- * @author 没秃顶的码农
- * @date 2024-03-15
- */
-@Data
-@RefreshScope
-@ConfigurationProperties("kxs.old")
-public class KxsOldConfigProperties {
-
-
-	/**
-	 * 是否开启循环过期扣款
-	 */
-	private Boolean recycleEnable;
-
-}

+ 2 - 1
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/impl/KxsMachineDeductServiceImpl.java

@@ -2,6 +2,7 @@ package com.kxs.product.biz.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kxs.common.core.util.R;
@@ -73,7 +74,7 @@ public class KxsMachineDeductServiceImpl extends ServiceImpl<KxsMachineDeductMap
             }
         }
         if (CollUtil.isNotEmpty(errorMessageList)) {
-            return R.failed(errorMessageList);
+            return R.failed(JSON.toJSONString(errorMessageList));
         }
         return R.ok();
     }

+ 2 - 0
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/service/impl/KxsMachineServiceImpl.java

@@ -330,6 +330,8 @@ public class KxsMachineServiceImpl extends ServiceImpl<KxsMachineMapper, KxsMach
                 machineDeduct.setPosSn(machine.getPosSn());
                 machineDeduct.setRemark("已添加预扣款");
                 kxsMachineDeductMapper.insert(machineDeduct);
+            }else{
+                log.info("添加机具到预扣款失败:{}", machine.getPosSn());
             }
         }
     }

+ 0 - 26
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/task/KxsProductTask.java

@@ -1,40 +1,14 @@
 package com.kxs.product.biz.task;
 
-import cn.hutool.crypto.symmetric.AES;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.nacos.api.config.annotation.NacosValue;
-import com.kxs.common.core.util.R;
 import com.kxs.common.security.annotation.Inner;
-import com.kxs.product.api.model.KxsMachine;
-import com.kxs.product.api.model.KxsMachineDeduct;
-import com.kxs.product.biz.config.KxsOldConfigProperties;
-import com.kxs.product.biz.mapper.KxsMachineDeductMapper;
-import com.kxs.product.biz.mapper.KxsMachineMapper;
 import com.kxs.product.biz.service.KxsMachineService;
-import com.kxs.system.api.feign.RemoteOldService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.cloud.context.config.annotation.RefreshScope;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.scheduling.annotation.EnableAsync;
-import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.HashMap;
-import java.util.List;
-
 /**
  * 产品模块定时任务
  *

+ 1 - 0
kxs-product/kxs-product-biz/src/main/resources/mapper/KxsMachineMapper.xml

@@ -194,6 +194,7 @@
           b.pos_sn is null
           and a.del_flag = 0
           and a.status = 1
+          and a.user_id > 0
           and a.bind_status = 0
           and a.recycle_end_time &lt; #{endDay}
           order by recycle_end_time desc

+ 34 - 9
kxs-quartz/src/main/java/com/kxs/daemon/quartz/controller/SysJobController.java

@@ -20,7 +20,9 @@ import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.security.SecurityRequirement;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.quartz.Scheduler;
+import org.quartz.SchedulerException;
 import org.springframework.http.HttpHeaders;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -38,6 +40,7 @@ import java.util.List;
 @RequestMapping("/sys-job")
 @Tag(description = "sys-job", name = "定时任务")
 @SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
+@Slf4j
 public class SysJobController {
 
 	private final SysJobService sysJobService;
@@ -87,12 +90,15 @@ public class SysJobController {
 	@PreAuthorize("@pms.hasPermission('job_sys_job_add')")
 	@Operation(description = "新增定时任务")
 	public R save(@RequestBody SysJob sysJob) {
+		long count = sysJobService.count(
+				Wrappers.query(SysJob.builder().jobName(sysJob.getJobName()).jobGroup(sysJob.getJobGroup()).build()));
+
+		if (count > 0) {
+			return R.failed("任务重复,请检查此组内是否已包含同名任务");
+		}
 		sysJob.setJobStatus(SkyQuartzEnum.JOB_STATUS_RELEASE.getType());
 		sysJob.setCreateBy(SecurityUtils.getUser().getUsername());
-		sysJobService.save(sysJob);
-		// 初始化任务
-		taskUtil.addOrUpateJob(sysJob, scheduler);
-		return R.ok();
+		return R.ok(sysJobService.save(sysJob));
 	}
 
 	/**
@@ -108,6 +114,7 @@ public class SysJobController {
 		sysJob.setUpdateBy(SecurityUtils.getUser().getUsername());
 		SysJob querySysJob = this.sysJobService.getById(sysJob.getJobId());
 		if (SkyQuartzEnum.JOB_STATUS_NOT_RUNNING.getType().equals(querySysJob.getJobStatus())) {
+			// 如修改暂停的需更新调度器
 			this.taskUtil.addOrUpateJob(sysJob, scheduler);
 			sysJobService.updateById(sysJob);
 		}
@@ -214,17 +221,27 @@ public class SysJobController {
 	@PostMapping("/start-job/{id}")
 	@PreAuthorize("@pms.hasPermission('job_sys_job_start_job')")
 	@Operation(description = "启动定时任务")
-	public R startJob(@PathVariable("id") Long jobId) {
+	public R startJob(@PathVariable("id") Long jobId) throws SchedulerException {
 		SysJob querySysJob = this.sysJobService.getById(jobId);
-		if (querySysJob != null && SkyQuartzEnum.JOB_LOG_STATUS_FAIL.getType().equals(querySysJob.getJobStatus())) {
+		if (querySysJob == null) {
+			return R.failed("无此定时任务,请确认");
+		}
+
+		// 如果定时任务不存在,强制状态为1已发布
+		if (!scheduler.checkExists(TaskUtil.getJobKey(querySysJob))) {
+			querySysJob.setJobStatus(SkyQuartzEnum.JOB_STATUS_RELEASE.getType());
+			log.warn("定时任务不在quartz中,任务id:{},强制状态为已发布并加入调度器", jobId);
+		}
+
+		if (SkyQuartzEnum.JOB_STATUS_RELEASE.getType().equals(querySysJob.getJobStatus())) {
 			taskUtil.addOrUpateJob(querySysJob, scheduler);
 		}
 		else {
 			taskUtil.resumeJob(querySysJob, scheduler);
 		}
-		// 更新定时任务状态条件,暂停状态3更新为运行状态2
+		// 更新定时任务状态为运行状态2
 		this.sysJobService
-			.updateById(SysJob.builder().jobId(jobId).jobStatus(SkyQuartzEnum.JOB_STATUS_RUNNING.getType()).build());
+				.updateById(SysJob.builder().jobId(jobId).jobStatus(SkyQuartzEnum.JOB_STATUS_RUNNING.getType()).build());
 		return R.ok();
 	}
 
@@ -237,8 +254,16 @@ public class SysJobController {
 	@PostMapping("/run-job/{id}")
 	@PreAuthorize("@pms.hasPermission('job_sys_job_run_job')")
 	@Operation(description = "立刻执行定时任务")
-	public R runJob(@PathVariable("id") Long jobId) {
+	public R runJob(@PathVariable("id") Long jobId) throws SchedulerException {
 		SysJob querySysJob = this.sysJobService.getById(jobId);
+
+		// 执行定时任务前判定任务是否在quartz中
+		if (!scheduler.checkExists(TaskUtil.getJobKey(querySysJob))) {
+			querySysJob.setJobStatus(SkyQuartzEnum.JOB_STATUS_NOT_RUNNING.getType());
+			log.warn("立刻执行定时任务-定时任务不在quartz中,任务id:{},强制状态为暂停并加入调度器", jobId);
+			taskUtil.addOrUpateJob(querySysJob, scheduler);
+		}
+
 		return TaskUtil.runOnce(scheduler, querySysJob) ? R.ok() : R.failed();
 	}
 

+ 0 - 2
kxs-quartz/src/main/java/com/kxs/daemon/quartz/task/ProductBeanTask.java

@@ -6,8 +6,6 @@ import com.kxs.product.api.feign.RemoteKxsProductService;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Component;
 
 import java.time.LocalDateTime;

+ 0 - 2
kxs-quartz/src/main/java/com/kxs/daemon/quartz/task/SpringBeanTaskDemo.java

@@ -20,8 +20,6 @@ package com.kxs.daemon.quartz.task;
 import com.kxs.daemon.quartz.constants.SkyQuartzEnum;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
 import org.springframework.stereotype.Component;
 
 import java.time.LocalDateTime;

+ 0 - 1
kxs-quartz/src/main/java/com/kxs/daemon/quartz/task/UserBeanTask.java

@@ -2,7 +2,6 @@ package com.kxs.daemon.quartz.task;
 
 import com.kxs.common.core.constant.SecurityConstants;
 import com.kxs.daemon.quartz.constants.SkyQuartzEnum;
-import com.kxs.product.api.feign.RemoteKxsProductService;
 import com.kxs.user.api.feign.RemoteKxsUserService;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;

+ 0 - 71
kxs-quartz/src/main/resources/logback-spring.xml

@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    小技巧: 在根pom里面设置统一存放路径,统一管理方便维护
-    <properties>
-        <log-path>/Users/LXQ</log-path>
-    </properties>
-    1. 其他模块加日志输出,直接copy本文件放在resources 目录即可
-    2. 注意修改 <property name="${log-path}/log.path" value=""/> 的value模块
--->
-<configuration debug="false" scan="false">
-	<property name="log.path" value="logs/${project.artifactId}"/>
-	<!-- 彩色日志格式 -->
-	<property name="CONSOLE_LOG_PATTERN"
-			  value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
-	<!-- 彩色日志依赖的渲染类 -->
-	<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
-	<conversionRule conversionWord="wex"
-					converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
-	<conversionRule conversionWord="wEx"
-					converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
-	<!-- Console log output -->
-	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
-		<encoder>
-			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
-		</encoder>
-	</appender>
-
-	<!-- Log file debug output -->
-	<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<file>${log.path}/debug.log</file>
-		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-			<fileNamePattern>${log.path}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
-			<maxFileSize>50MB</maxFileSize>
-			<maxHistory>30</maxHistory>
-		</rollingPolicy>
-		<encoder>
-			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
-		</encoder>
-	</appender>
-
-	<!-- Log file error output -->
-	<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<file>${log.path}/error.log</file>
-		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-			<fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
-			<maxFileSize>50MB</maxFileSize>
-			<maxHistory>30</maxHistory>
-		</rollingPolicy>
-		<encoder>
-			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
-		</encoder>
-		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-			<level>ERROR</level>
-		</filter>
-	</appender>
-
-	<logger name="org.activiti.engine.impl.db" level="DEBUG">
-		<appender-ref ref="debug"/>
-	</logger>
-
-	<!--nacos 心跳 INFO 屏蔽-->
-	<logger name="com.alibaba.nacos" level="OFF">
-		<appender-ref ref="error"/>
-	</logger>
-	<!-- Level: FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 -->
-	<root level="INFO">
-		<appender-ref ref="console"/>
-		<appender-ref ref="debug"/>
-		<appender-ref ref="error"/>
-	</root>
-</configuration>

+ 6 - 0
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/model/KxsSchoolMenu.java

@@ -73,6 +73,12 @@ public class KxsSchoolMenu extends Model<KxsSchoolMenu> implements Serializable
     @Schema(description = "分类名称")
     private String colName;
 
+    /**
+     * 老库分类标识
+     */
+    @Schema(description = "分类标识")
+    private String colId;
+
 
     /**
      * 分类封面图

+ 56 - 0
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/model/KxsSysMsgRead.java

@@ -0,0 +1,56 @@
+package com.kxs.system.api.model;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 系统消息已读表(KxsSysMsgRead)表实体类
+ *
+ * @author 系统
+ * @since 2024-04-01 16:51:34
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class KxsSysMsgRead extends Model<KxsSysMsgRead> implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    
+    
+    /**
+     * id
+     */
+    @Schema(description = "id")
+    private Integer id;
+
+
+    /**
+     * 用户ID
+     */
+    @Schema(description = "用户ID")
+    private Integer userId;
+
+
+    /**
+     * 系统消息ID
+     */
+    @Schema(description = "系统消息ID")
+    private Integer msgId;
+
+
+
+
+}
+

+ 17 - 0
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/mapper/KxsSysMsgReadMapper.java

@@ -0,0 +1,17 @@
+package com.kxs.system.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.kxs.system.api.model.KxsSysMsgRead;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 系统消息已读表(KxsSysMsgRead)表数据库访问层
+ *
+ * @author 系统
+ * @since 2024-04-01 16:51:34
+ */
+@Mapper
+public interface KxsSysMsgReadMapper extends BaseMapper<KxsSysMsgRead> {
+
+}
+

+ 15 - 0
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/KxsSysMsgReadService.java

@@ -0,0 +1,15 @@
+package com.kxs.system.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.kxs.system.api.model.KxsSysMsgRead;
+
+/**
+ * 系统消息已读表(KxsSysMsgRead)表服务接口
+ *
+ * @author 系统
+ * @since 2024-04-01 16:51:34
+ */
+public interface KxsSysMsgReadService extends IService<KxsSysMsgRead> {
+
+}
+

+ 19 - 0
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsSysMsgReadServiceImpl.java

@@ -0,0 +1,19 @@
+package com.kxs.system.biz.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kxs.system.biz.mapper.KxsSysMsgReadMapper;
+import com.kxs.system.api.model.KxsSysMsgRead;
+import com.kxs.system.biz.service.KxsSysMsgReadService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 系统消息已读表(KxsSysMsgRead)表服务实现类
+ *
+ * @author 系统
+ * @since 2024-04-01 16:51:34
+ */
+@Service("kxsSysMsgReadService")
+public class KxsSysMsgReadServiceImpl extends ServiceImpl<KxsSysMsgReadMapper, KxsSysMsgRead> implements KxsSysMsgReadService {
+
+}
+

+ 27 - 1
kxs-transfer/src/main/java/com/kxs/transfer/api/controller/DtsController.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.kxs.product.api.model.KxsMerchant;
 import com.kxs.system.api.model.KxsSchoolStudy;
 import com.kxs.transfer.api.annotation.DtsMsgListener;
+import com.kxs.transfer.api.mapper.user.KxsUserByStageMapper;
 import com.kxs.transfer.api.model.KxsDtsErrorLog;
 import com.kxs.transfer.api.model.KxsDtsLog;
 import com.kxs.transfer.api.model.table.DMLData;
@@ -20,6 +21,7 @@ import com.kxs.transfer.api.service.sys.KxsSchoolStudyService;
 import com.kxs.transfer.api.service.sys.KxsSysMsgService;
 import com.kxs.transfer.api.service.user.*;
 import com.kxs.user.api.model.KxsPartner;
+import com.kxs.user.api.model.KxsUserByStage;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.exception.ExceptionUtils;
@@ -54,11 +56,12 @@ public class DtsController {
     private final KxsUserAmountLogService kxsUserAmountLogService;
     private final KxsUserWithdrawalService kxsUserWithdrawalService;
     private final KxsLeaderService kxsLeaderService;
-    private final KxsLeaderAmountLogService kxsLeaderAmountLogService;
     private final KxsPartnerService kxsPartnerService;
     private final KxsMorningService kxsMorningService;
     private final KxsSchoolStudyService kxsSchoolStudyService;
     private final KxsSysMsgService kxsSysMsgService;
+    private final KxsBankChangeLogService kxsBankChangeLogService;
+    private final KxsUserByStageService kxsUserByStageService;
 
     private final KxsMachineService kxsMachineService;
 
@@ -167,6 +170,22 @@ public class DtsController {
             if ("UserAccount".equals(dmlData.getTableName()) && "KxsOpServer".equals(dmlData.getDatabaseName())) {
                 kxsPartnerService.changeAccountData(dmlData);
             }
+            //合伙人账户余额变动记录表
+            if ("AmountRecordNew".equals(dmlData.getTableName()) && "KxsOpServer".equals(dmlData.getDatabaseName())) {
+                kxsPartnerService.changeAccountLogData(dmlData);
+            }
+            //用户结算卡变更记录
+            if ("SettlementCardChangeRecord".equals(dmlData.getTableName())) {
+                kxsBankChangeLogService.changeData(dmlData);
+            }
+            //分期表数据同步
+            if ("ToChargeByStage".equals(dmlData.getTableName())) {
+                kxsUserByStageService.changeData(dmlData);
+            }
+            //分期期数表数据同步
+            if ("ToChargeBackRecordSub".equals(dmlData.getTableName())) {
+                kxsUserByStageService.changeInfoData(dmlData);
+            }
 
 
             //商品表同步
@@ -232,6 +251,10 @@ public class DtsController {
             if ("PosCouponOrders".equals(dmlData.getTableName())) {
                 kxsTicketTransferService.changeData(dmlData);
             }
+            //券码划拨记录表同步
+            if ("PosCouponRecord".equals(dmlData.getTableName())) {
+                kxsTicketTransferService.changeInfoData(dmlData);
+            }
             //创客消息表
             if ("MsgPersonal".equals(dmlData.getTableName())) {
                 kxsSysMsgService.changeUserData(dmlData);
@@ -240,6 +263,9 @@ public class DtsController {
             if ("MsgPlacard".equals(dmlData.getTableName())) {
                 kxsSysMsgService.changeSysData(dmlData);
             }
+            if ("MsgPlacardRead".equals(dmlData.getTableName())) {
+                kxsSysMsgService.changeSysReadData(dmlData);
+            }
             //系统弹窗表
             if ("MsgAlert".equals(dmlData.getTableName())) {
                 kxsSysMsgService.changeModalData(dmlData);

+ 19 - 0
kxs-transfer/src/main/java/com/kxs/transfer/api/mapper/sys/KxsSchoolMenuMapper.java

@@ -0,0 +1,19 @@
+package com.kxs.transfer.api.mapper.sys;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.kxs.system.api.model.KxsSchoolMenu;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 商学院创客学堂分类(KxsSchoolMenu)表数据库访问层
+ *
+ * @author 系统
+ * @since 2023-12-15 12:16:31
+ */
+@Mapper
+@DS("sys")
+public interface KxsSchoolMenuMapper extends BaseMapper<KxsSchoolMenu> {
+
+}
+

+ 19 - 0
kxs-transfer/src/main/java/com/kxs/transfer/api/mapper/sys/KxsSysMsgReadMapper.java

@@ -0,0 +1,19 @@
+package com.kxs.transfer.api.mapper.sys;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.kxs.system.api.model.KxsSysMsgRead;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 系统消息已读表(KxsSysMsgRead)表数据库访问层
+ *
+ * @author 系统
+ * @since 2024-04-01 16:51:34
+ */
+@Mapper
+@DS("sys")
+public interface KxsSysMsgReadMapper extends BaseMapper<KxsSysMsgRead> {
+
+}
+

+ 1 - 0
kxs-transfer/src/main/java/com/kxs/transfer/api/mapper/user/KxsUserByStageMapper.java

@@ -1,6 +1,7 @@
 package com.kxs.transfer.api.mapper.user;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.kxs.transfer.api.model.table.DMLData;
 import com.kxs.user.api.model.KxsUserByStage;
 import org.apache.ibatis.annotations.Mapper;
 

+ 15 - 13
kxs-transfer/src/main/java/com/kxs/transfer/api/service/store/impl/KxsMachineRecycleServiceImpl.java

@@ -66,7 +66,7 @@ public class KxsMachineRecycleServiceImpl extends ServiceImpl<KxsMachineRecycleM
                 case "UserId":
                     int userId = Integer.parseInt(validFieldDataMap.get(field).toString());
                     KxsUser user = kxsUserMapper.selectById(userId);
-                    if (user != null){
+                    if (user != null) {
                         machineRecycle.setUsername(user.getUsername());
                         machineRecycle.setPhone(user.getPhone());
                         machineRecycle.setUserCode(user.getUserCode());
@@ -76,16 +76,16 @@ public class KxsMachineRecycleServiceImpl extends ServiceImpl<KxsMachineRecycleM
                 case "RecycStoreId":
                     int storeId = Integer.parseInt(validFieldDataMap.get(field).toString());
                     KxsWarehouse warehouse = kxsWarehouseMapper.selectById(storeId);
-                    if(warehouse != null){
+                    if (warehouse != null) {
                         machineRecycle.setWarehouseUserId(warehouse.getUserId());
                     }
                     machineRecycle.setWarehouseId(storeId);
                     break;
                 case "PostType":
                     int posType = Integer.parseInt(validFieldDataMap.get(field).toString());
-                    if(posType == 2){
+                    if (posType == 2) {
                         machineRecycle.setGetMode(0);
-                    }else{
+                    } else {
                         machineRecycle.setGetMode(1);
                     }
                     break;
@@ -98,7 +98,7 @@ public class KxsMachineRecycleServiceImpl extends ServiceImpl<KxsMachineRecycleM
                 case "BrandId":
                     Integer brandId = Integer.valueOf(validFieldDataMap.get(field).toString());
                     KxsBrand brand = kxsBrandMapper.selectById(brandId);
-                    if(brand != null){
+                    if (brand != null) {
                         machineRecycle.setBrandName(brand.getName());
                     }
                     machineRecycle.setBrandId(brandId);
@@ -110,18 +110,20 @@ public class KxsMachineRecycleServiceImpl extends ServiceImpl<KxsMachineRecycleM
                     machineRecycle.setUpdateTime(LocalDateTimeUtil.parse(validFieldDataMap.get(field).toString(), DatePattern.NORM_DATETIME_PATTERN));
                     break;
             }
-            KxsMachineRecycle kxsMachineRecycle = baseMapper.selectById(machineRecycle.getId());
-            if(operation.equals(OperationType.INSERT)){
-                if(kxsMachineRecycle == null){
-                    baseMapper.insert(machineRecycle);
-                }
+        }
+        KxsMachineRecycle kxsMachineRecycle = baseMapper.selectById(machineRecycle.getId());
+        if(operation.equals(OperationType.INSERT)){
+            if(kxsMachineRecycle == null){
+                baseMapper.insert(machineRecycle);
             }
+        }
 
-            if(operation.equals(OperationType.UPDATE)){
+        if(operation.equals(OperationType.UPDATE)){
 
-                baseMapper.updateById(machineRecycle);
-            }
+            baseMapper.updateById(machineRecycle);
         }
+
+
     }
 
     @Override

+ 51 - 15
kxs-transfer/src/main/java/com/kxs/transfer/api/service/store/impl/KxsWarehouseServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.util.NumberUtil;
 import com.aliyun.dts.subscribe.clients.record.OperationType;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kxs.product.api.model.KxsMachine;
@@ -26,11 +27,13 @@ import com.kxs.user.api.model.KxsUserAmount;
 import com.kxs.user.api.model.KxsUserReal;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
+
 /**
  * 客小爽仓库表(KxsWarehouse)表服务实现类
  *
@@ -255,6 +258,7 @@ public class KxsWarehouseServiceImpl extends ServiceImpl<KxsWarehouseMapper, Kxs
     }
 
     @Override
+    @DSTransactional
     public void changeAccountData(DMLData dmlData) {
         //修改的字段值
         Map<String, Object> validFieldDataMap = dmlData.getValidFieldDataMap();
@@ -264,13 +268,8 @@ public class KxsWarehouseServiceImpl extends ServiceImpl<KxsWarehouseMapper, Kxs
         List<String> changeFieldList = dmlData.getChangeFieldList();
         //操作的主键
         int id = Integer.parseInt(dmlData.getId());
-        Integer userId = null;
-
         KxsWarehouseLimit warehouseLimit = new KxsWarehouseLimit();
 
-        if(fieldDataMap.get("UserId").getValue() != null){
-            userId = Integer.valueOf(fieldDataMap.get("UserId").getValue().toString());
-        }
         for (String field : changeFieldList) {
 
             switch (field) {
@@ -297,12 +296,35 @@ public class KxsWarehouseServiceImpl extends ServiceImpl<KxsWarehouseMapper, Kxs
                     break;
             }
         }
-        if (BeanUtil.isNotEmpty(warehouseLimit, "entityClass") && userId != null) {
+        if (BeanUtil.isNotEmpty(warehouseLimit, "entityClass")) {
+            //更新全部字段
+            if(fieldDataMap.get("ValidAmount").getValue() != null){
+                warehouseLimit.setValidAmount(new BigDecimal(fieldDataMap.get("ValidAmount").getValue().toString()));
+            }
+            if(fieldDataMap.get("FixedAmount").getValue() != null){
+                warehouseLimit.setFixedAmount(new BigDecimal(fieldDataMap.get("FixedAmount").getValue().toString()));
+            }
+            if(fieldDataMap.get("TempAmount").getValue() != null){
+                warehouseLimit.setForAmount(new BigDecimal(fieldDataMap.get("TempAmount").getValue().toString()));
+            }
+            if(fieldDataMap.get("TempAmountForBalance").getValue() != null){
+                warehouseLimit.setYueForAmount(new BigDecimal(fieldDataMap.get("TempAmountForBalance").getValue().toString()));
+            }
+            //仓库担保金额
+            KxsWarehouseCreditAmount kxsWarehouseCreditAmount = kxsWarehouseCreditAmountMapper.selectOne(Wrappers.<KxsWarehouseCreditAmount>query()
+                    .select("sum(credit_amount) as creditAmount")
+                    .eq("to_credit_user_id", id)
+                    .groupBy("to_credit_user_id"));
+            if(kxsWarehouseCreditAmount != null){
+                warehouseLimit.setCreditAmount(kxsWarehouseCreditAmount.getCreditAmount());
+            }
+
+
             KxsWarehouseLimit kxsWarehouseLimit = kxsWarehouseLimitMapper.selectOne(Wrappers.<KxsWarehouseLimit>lambdaQuery()
                     .eq(KxsWarehouseLimit::getWarehouseType, 0)
-                    .eq(KxsWarehouseLimit::getUserId, userId));
+                    .eq(KxsWarehouseLimit::getUserId, id));
             if (kxsWarehouseLimit == null) {
-                warehouseLimit.setUserId(userId);
+                warehouseLimit.setUserId(id);
                 kxsWarehouseLimitMapper.insert(warehouseLimit);
             }else{
                 warehouseLimit.setId(kxsWarehouseLimit.getId());
@@ -312,6 +334,7 @@ public class KxsWarehouseServiceImpl extends ServiceImpl<KxsWarehouseMapper, Kxs
     }
 
     @Override
+    @DSTransactional
     public void changeAccountMinData(DMLData dmlData) {
         //修改的字段值
         Map<String, Object> validFieldDataMap = dmlData.getValidFieldDataMap();
@@ -321,13 +344,9 @@ public class KxsWarehouseServiceImpl extends ServiceImpl<KxsWarehouseMapper, Kxs
         List<String> changeFieldList = dmlData.getChangeFieldList();
         //操作的主键
         int id = Integer.parseInt(dmlData.getId());
-        Integer userId = null;
 
         KxsWarehouseLimit warehouseLimit = new KxsWarehouseLimit();
 
-        if(fieldDataMap.get("UserId").getValue() != null){
-            userId = Integer.valueOf(fieldDataMap.get("UserId").getValue().toString());
-        }
         for (String field : changeFieldList) {
 
             switch (field) {
@@ -354,12 +373,29 @@ public class KxsWarehouseServiceImpl extends ServiceImpl<KxsWarehouseMapper, Kxs
                     break;
             }
         }
-        if (BeanUtil.isNotEmpty(warehouseLimit, "entityClass") && userId != null) {
+        if (BeanUtil.isNotEmpty(warehouseLimit, "entityClass")) {
+            //更新全部字段
+            if(fieldDataMap.get("ValidPreAmount").getValue() != null){
+                warehouseLimit.setValidAmount(new BigDecimal(fieldDataMap.get("ValidPreAmount").getValue().toString()));
+            }
+            if(fieldDataMap.get("ThisMonthPreAmount").getValue() != null){
+                warehouseLimit.setFixedAmount(new BigDecimal(fieldDataMap.get("ThisMonthPreAmount").getValue().toString()));
+            }
+            if(fieldDataMap.get("PreTempAmount").getValue() != null){
+                warehouseLimit.setForAmount(new BigDecimal(fieldDataMap.get("PreTempAmount").getValue().toString()));
+            }
+            if(fieldDataMap.get("PreTempAmountForBalance").getValue() != null){
+                warehouseLimit.setYueForAmount(new BigDecimal(fieldDataMap.get("PreTempAmountForBalance").getValue().toString()));
+            }
+
+
             KxsWarehouseLimit kxsWarehouseLimit = kxsWarehouseLimitMapper.selectOne(Wrappers.<KxsWarehouseLimit>lambdaQuery()
                     .eq(KxsWarehouseLimit::getWarehouseType, 1)
-                    .eq(KxsWarehouseLimit::getUserId, userId));
+                    .eq(KxsWarehouseLimit::getUserId, id));
             if (kxsWarehouseLimit == null) {
-                warehouseLimit.setUserId(userId);
+                warehouseLimit.setUserId(id);
+                //小分仓
+                warehouseLimit.setWarehouseType(1);
                 kxsWarehouseLimitMapper.insert(warehouseLimit);
             }else{
                 warehouseLimit.setId(kxsWarehouseLimit.getId());

+ 50 - 3
kxs-transfer/src/main/java/com/kxs/transfer/api/service/sys/KxsSysMsgService.java

@@ -7,11 +7,10 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kxs.product.api.model.KxsMachine;
 import com.kxs.product.api.model.KxsMerchant;
-import com.kxs.system.api.model.KxsAppModal;
-import com.kxs.system.api.model.KxsSysMsg;
-import com.kxs.system.api.model.KxsUserMsg;
+import com.kxs.system.api.model.*;
 import com.kxs.transfer.api.mapper.sys.KxsAppModalMapper;
 import com.kxs.transfer.api.mapper.sys.KxsSysMsgMapper;
+import com.kxs.transfer.api.mapper.sys.KxsSysMsgReadMapper;
 import com.kxs.transfer.api.mapper.sys.KxsUserMsgMapper;
 import com.kxs.transfer.api.mapper.user.KxsUserMapper;
 import com.kxs.transfer.api.model.table.DMLData;
@@ -35,6 +34,8 @@ public class KxsSysMsgService extends ServiceImpl<KxsSysMsgMapper, KxsSysMsg> {
 
     private final KxsAppModalMapper kxsAppModalMapper;
 
+    private final KxsSysMsgReadMapper kxsSysMsgReadMapper;
+
     public void changeUserData(DMLData dmlData) {
         //修改的字段值
         Map<String, Object> validFieldDataMap = dmlData.getValidFieldDataMap();
@@ -288,5 +289,51 @@ public class KxsSysMsgService extends ServiceImpl<KxsSysMsgMapper, KxsSysMsg> {
         }
 
     }
+
+    public void changeSysReadData(DMLData dmlData) {
+        //修改的字段值
+        Map<String, Object> validFieldDataMap = dmlData.getValidFieldDataMap();
+        //修改的字段
+        List<String> changeFieldList = dmlData.getChangeFieldList();
+        //操作的主键
+        int id = Integer.parseInt(dmlData.getId());
+
+        KxsSysMsgRead sysMsgRead = new KxsSysMsgRead();
+        sysMsgRead.setId(id);
+
+        //操作类型
+        OperationType operation = dmlData.getOperation();
+        if(operation.equals(OperationType.DELETE)){
+            kxsSysMsgReadMapper.deleteById(id);
+            return;
+        }
+        for (String field : changeFieldList) {
+
+            switch (field) {
+                case "UserId":
+                    sysMsgRead.setUserId(Integer.parseInt(validFieldDataMap.get(field).toString()));
+                    break;
+                case "PlacardId":
+                    sysMsgRead.setMsgId(Integer.parseInt(validFieldDataMap.get(field).toString()));
+                    break;
+            }
+        }
+
+        if(operation.equals(OperationType.UPDATE)){
+            // 更新数据
+            kxsSysMsgReadMapper.updateById(sysMsgRead);
+        }
+        if(operation.equals(OperationType.INSERT)){
+            KxsSysMsgRead kxsSysMsgRead = kxsSysMsgReadMapper.selectById(sysMsgRead.getId());
+            if (kxsSysMsgRead != null){
+                kxsSysMsgReadMapper.updateById(sysMsgRead);
+            }else{
+                // 插入数据
+                kxsSysMsgReadMapper.insert(sysMsgRead);
+            }
+        }
+    }
+
+
 }
 

+ 11 - 1
kxs-transfer/src/main/java/com/kxs/transfer/api/service/sys/impl/KxsSchoolStudyServiceImpl.java

@@ -3,12 +3,16 @@ package com.kxs.transfer.api.service.sys.impl;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.LocalDateTimeUtil;
 import com.aliyun.dts.subscribe.clients.record.OperationType;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kxs.system.api.model.KxsMorning;
+import com.kxs.system.api.model.KxsSchoolMenu;
 import com.kxs.system.api.model.KxsSchoolStudy;
+import com.kxs.transfer.api.mapper.sys.KxsSchoolMenuMapper;
 import com.kxs.transfer.api.mapper.sys.KxsSchoolStudyMapper;
 import com.kxs.transfer.api.model.table.DMLData;
 import com.kxs.transfer.api.service.sys.KxsSchoolStudyService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -21,8 +25,10 @@ import java.util.Map;
  * @since 2023-12-15 12:16:31
  */
 @Service("kxsSchoolStudyService")
+@RequiredArgsConstructor
 public class KxsSchoolStudyServiceImpl extends ServiceImpl<KxsSchoolStudyMapper, KxsSchoolStudy> implements KxsSchoolStudyService {
 
+    private final KxsSchoolMenuMapper kxsSchoolMenuMapper;
     @Override
     public void changeData(DMLData dmlData) {
         //修改的字段值
@@ -50,7 +56,11 @@ public class KxsSchoolStudyServiceImpl extends ServiceImpl<KxsSchoolStudyMapper,
                     schoolStudy.setLecturer(validFieldDataMap.get(field).toString());
                     break;
                 case "SeoKeyword":
-                    schoolStudy.setMenuId(Integer.parseInt(validFieldDataMap.get(field).toString()));
+                    String colId = validFieldDataMap.get(field).toString();
+                    KxsSchoolMenu kxsSchoolMenu = kxsSchoolMenuMapper.selectOne(Wrappers.<KxsSchoolMenu>lambdaQuery().eq(KxsSchoolMenu::getColId, colId));
+                    if(kxsSchoolMenu != null){
+                        schoolStudy.setMenuId(kxsSchoolMenu.getId());
+                    }
                     break;
                 case "Url":
                     schoolStudy.setUrl(validFieldDataMap.get(field).toString());

+ 2 - 0
kxs-transfer/src/main/java/com/kxs/transfer/api/service/user/KxsBankChangeLogService.java

@@ -1,6 +1,7 @@
 package com.kxs.transfer.api.service.user;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.kxs.transfer.api.model.table.DMLData;
 import com.kxs.user.api.model.KxsBankChangeLog;
 
 /**
@@ -11,5 +12,6 @@ import com.kxs.user.api.model.KxsBankChangeLog;
  */
 public interface KxsBankChangeLogService extends IService<KxsBankChangeLog> {
 
+    void changeData(DMLData dmlData);
 }
 

+ 2 - 0
kxs-transfer/src/main/java/com/kxs/transfer/api/service/user/KxsPartnerService.java

@@ -15,5 +15,7 @@ public interface KxsPartnerService extends IService<KxsPartner> {
     void changeData(DMLData dmlData);
 
     void changeAccountData(DMLData dmlData);
+
+    void changeAccountLogData(DMLData dmlData);
 }
 

+ 4 - 0
kxs-transfer/src/main/java/com/kxs/transfer/api/service/user/KxsUserByStageService.java

@@ -1,6 +1,7 @@
 package com.kxs.transfer.api.service.user;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.kxs.transfer.api.model.table.DMLData;
 import com.kxs.user.api.model.KxsUserByStage;
 
 /**
@@ -11,5 +12,8 @@ import com.kxs.user.api.model.KxsUserByStage;
  */
 public interface KxsUserByStageService extends IService<KxsUserByStage> {
 
+    void changeData(DMLData dmlData);
+
+    void changeInfoData(DMLData dmlData);
 }
 

+ 65 - 0
kxs-transfer/src/main/java/com/kxs/transfer/api/service/user/impl/KxsBankChangeLogServiceImpl.java

@@ -1,11 +1,20 @@
 package com.kxs.transfer.api.service.user.impl;
 
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import com.aliyun.dts.subscribe.clients.record.OperationType;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kxs.transfer.api.mapper.user.KxsBankChangeLogMapper;
+import com.kxs.transfer.api.model.table.DMLData;
 import com.kxs.transfer.api.service.user.KxsBankChangeLogService;
 import com.kxs.user.api.model.KxsBankChangeLog;
+import com.kxs.user.api.model.KxsUserAdvance;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
 /**
  * 用户结算卡变更记录(KxsBankChangeLog)表服务实现类
  *
@@ -15,5 +24,61 @@ import org.springframework.stereotype.Service;
 @Service("kxsBankChangeLogService")
 public class KxsBankChangeLogServiceImpl extends ServiceImpl<KxsBankChangeLogMapper, KxsBankChangeLog> implements KxsBankChangeLogService {
 
+    @Override
+    public void changeData(DMLData dmlData) {
+        //修改的字段值
+        Map<String, Object> validFieldDataMap = dmlData.getValidFieldDataMap();
+        //修改的字段
+        List<String> changeFieldList = dmlData.getChangeFieldList();
+        //操作的主键
+        int id = Integer.parseInt(dmlData.getId());
+
+        KxsBankChangeLog bankChangeLog = new KxsBankChangeLog();
+        bankChangeLog.setId(id);
+        //操作类型
+        OperationType operation = dmlData.getOperation();
+        if(operation.equals(OperationType.DELETE)){
+            // 更新数据
+            baseMapper.deleteById(id);
+            return;
+        }
+        for (String field : changeFieldList) {
+
+            switch (field) {
+                case "UserId":
+                    bankChangeLog.setUserId(Integer.valueOf(validFieldDataMap.get(field).toString()));
+                    break;
+                case "BeforeCardNo":
+                    bankChangeLog.setBeforeCardNo(validFieldDataMap.get(field).toString());
+                    break;
+                case "AfterCardNo":
+                    bankChangeLog.setAfterCardNo(validFieldDataMap.get(field).toString());
+                    break;
+                case "CreateDate":
+                    bankChangeLog.setCreateTime(LocalDateTimeUtil.parse(validFieldDataMap.get(field).toString(), DatePattern.NORM_DATETIME_PATTERN));
+                    break;
+                case "UpdateDate":
+                    bankChangeLog.setUpdateTime(LocalDateTimeUtil.parse(validFieldDataMap.get(field).toString(), DatePattern.NORM_DATETIME_PATTERN));
+                    break;
+            }
+        }
+
+        if(operation.equals(OperationType.UPDATE)){
+
+            // 更新数据
+            baseMapper.updateById(bankChangeLog);
+        }
+        if(operation.equals(OperationType.INSERT)){
+
+            KxsBankChangeLog kxsBankChangeLog = baseMapper.selectById(id);
+            if (kxsBankChangeLog != null){
+                baseMapper.updateById(bankChangeLog);
+            }else{
+                // 插入数据
+                baseMapper.insert(bankChangeLog);
+            }
+        }
+
+    }
 }
 

+ 97 - 0
kxs-transfer/src/main/java/com/kxs/transfer/api/service/user/impl/KxsPartnerServiceImpl.java

@@ -5,11 +5,16 @@ import cn.hutool.core.date.LocalDateTimeUtil;
 import com.aliyun.dts.subscribe.clients.record.OperationType;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kxs.common.core.constant.enums.KindTypeEnum;
+import com.kxs.transfer.api.mapper.user.KxsPartnerAmountLogMapper;
 import com.kxs.transfer.api.mapper.user.KxsPartnerMapper;
 import com.kxs.transfer.api.model.table.DMLData;
 import com.kxs.transfer.api.service.user.KxsPartnerService;
+import com.kxs.user.api.model.KxsBankChangeLog;
 import com.kxs.user.api.model.KxsLeaderAmountLog;
 import com.kxs.user.api.model.KxsPartner;
+import com.kxs.user.api.model.KxsPartnerAmountLog;
+import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.stereotype.Service;
 
@@ -24,8 +29,11 @@ import java.util.Map;
  * @since 2024-02-22 15:39:26
  */
 @Service("kxsPartnerService")
+@RequiredArgsConstructor
 public class KxsPartnerServiceImpl extends ServiceImpl<KxsPartnerMapper, KxsPartner> implements KxsPartnerService {
 
+    private final KxsPartnerAmountLogMapper kxsPartnerAmountLogMapper;
+
     @Override
     public void changeData(DMLData dmlData) {
         //修改的字段值
@@ -115,5 +123,94 @@ public class KxsPartnerServiceImpl extends ServiceImpl<KxsPartnerMapper, KxsPart
             baseMapper.updateById(partner);
         }
     }
+
+    @Override
+    public void changeAccountLogData(DMLData dmlData) {
+        //修改的字段值
+        Map<String, Object> validFieldDataMap = dmlData.getValidFieldDataMap();
+        //修改的字段
+        List<String> changeFieldList = dmlData.getChangeFieldList();
+        //操作的主键
+        int id = Integer.parseInt(dmlData.getId());
+
+        KxsPartnerAmountLog partnerAmountLog = new KxsPartnerAmountLog();
+        partnerAmountLog.setId(id);
+
+        //操作类型
+        OperationType operation = dmlData.getOperation();
+        for (String field : changeFieldList) {
+
+            switch (field) {
+                case "UserId":
+                    partnerAmountLog.setUserId(Integer.parseInt(validFieldDataMap.get(field).toString()));
+                    break;
+                case "UseAmount":
+                    partnerAmountLog.setAmount(new BigDecimal(validFieldDataMap.get(field).toString()));
+                    break;
+                case "BeforeAmount":
+                    partnerAmountLog.setBeforeAmount(new BigDecimal(validFieldDataMap.get(field).toString()));
+                    break;
+                case "AfterAmount":
+                    partnerAmountLog.setAfterAmount(new BigDecimal(validFieldDataMap.get(field).toString()));
+                    break;
+                case "AfterTotalAmt":
+                    partnerAmountLog.setAfterTotalAmount(new BigDecimal(validFieldDataMap.get(field).toString()));
+                    break;
+                case "AfterValidForGetAmount":
+                    partnerAmountLog.setAfterWithdrawalAmount(new BigDecimal(validFieldDataMap.get(field).toString()));
+                    break;
+                case "AfterValidAmount":
+                    partnerAmountLog.setAfterStoreAmount(new BigDecimal(validFieldDataMap.get(field).toString()));
+                    break;
+                case "UseValidAmount":
+                    partnerAmountLog.setUseStoreAmount(new BigDecimal(validFieldDataMap.get(field).toString()));
+                    break;
+                case "UseTotalAmt":
+                    partnerAmountLog.setUseTotalAmt(new BigDecimal(validFieldDataMap.get(field).toString()));
+                    break;
+                case "UseValidForGetAmount":
+                    partnerAmountLog.setUseWithdrawalAmount(new BigDecimal(validFieldDataMap.get(field).toString()));
+                    break;
+                case "Remark":
+                    partnerAmountLog.setRemark(validFieldDataMap.get(field).toString());
+                    break;
+                case "ChangeTypeId":
+                    partnerAmountLog.setChangeType(Integer.valueOf(validFieldDataMap.get(field).toString()));
+                    break;
+                case "OperateType":
+                    int type = Integer.parseInt(validFieldDataMap.get(field).toString());
+                    if(type == 0){
+                        partnerAmountLog.setKind(KindTypeEnum.ADD.getType());
+                    } else if (type == 1) {
+                        partnerAmountLog.setKind(KindTypeEnum.ADD.getType());
+                    }else{
+                        partnerAmountLog.setKind(KindTypeEnum.SUB.getType());
+                    }
+                    break;
+                case "CreateDate":
+                    partnerAmountLog.setCreateTime(LocalDateTimeUtil.parse(validFieldDataMap.get(field).toString(), DatePattern.NORM_DATETIME_PATTERN));
+                    break;
+                case "UpdateDate":
+                    partnerAmountLog.setUpdateTime(LocalDateTimeUtil.parse(validFieldDataMap.get(field).toString(), DatePattern.NORM_DATETIME_PATTERN));
+                    break;
+            }
+        }
+
+        if(operation.equals(OperationType.UPDATE)){
+
+            // 更新数据
+            kxsPartnerAmountLogMapper.updateById(partnerAmountLog);
+        }
+        if(operation.equals(OperationType.INSERT)){
+
+            KxsPartnerAmountLog kxsPartnerAmountLog = kxsPartnerAmountLogMapper.selectById(id);
+            if (kxsPartnerAmountLog != null){
+                kxsPartnerAmountLogMapper.updateById(partnerAmountLog);
+            }else{
+                // 插入数据
+                kxsPartnerAmountLogMapper.insert(partnerAmountLog);
+            }
+        }
+    }
 }
 

+ 3 - 0
kxs-transfer/src/main/java/com/kxs/transfer/api/service/user/impl/KxsUserAdvanceServiceImpl.java

@@ -61,6 +61,9 @@ public class KxsUserAdvanceServiceImpl extends ServiceImpl<KxsUserAdvanceMapper,
                 case "SeoTitle":
                     advance.setCreateBy(validFieldDataMap.get(field).toString());
                     break;
+                case "Field1":
+                    advance.setExtField(validFieldDataMap.get(field).toString());
+                    break;
                 case "ChargeType":
                     int advanceType = Integer.parseInt(validFieldDataMap.get(field).toString());
                     advance.setAdvanceType(advanceType);

+ 175 - 0
kxs-transfer/src/main/java/com/kxs/transfer/api/service/user/impl/KxsUserByStageServiceImpl.java

@@ -1,11 +1,25 @@
 package com.kxs.transfer.api.service.user.impl;
 
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import com.aliyun.dts.subscribe.clients.record.OperationType;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kxs.product.api.model.KxsTicket;
+import com.kxs.transfer.api.mapper.user.KxsUserByStageLogMapper;
 import com.kxs.transfer.api.mapper.user.KxsUserByStageMapper;
+import com.kxs.transfer.api.model.table.DMLData;
+import com.kxs.transfer.api.model.table.FieldData;
 import com.kxs.transfer.api.service.user.KxsUserByStageService;
 import com.kxs.user.api.model.KxsUserByStage;
+import com.kxs.user.api.model.KxsUserByStageLog;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
 /**
  * 用户分期表(KxsUserByStage)表服务实现类
  *
@@ -13,7 +27,168 @@ import org.springframework.stereotype.Service;
  * @since 2024-01-03 09:39:56
  */
 @Service("kxsUserByStageService")
+@RequiredArgsConstructor
 public class KxsUserByStageServiceImpl extends ServiceImpl<KxsUserByStageMapper, KxsUserByStage> implements KxsUserByStageService {
 
+    private final KxsUserByStageLogMapper kxsUserByStageLogMapper;
+    @Override
+    public void changeData(DMLData dmlData) {
+        //修改的字段值
+        Map<String, Object> validFieldDataMap = dmlData.getValidFieldDataMap();
+        Map<String, FieldData> fieldDataMap = dmlData.getFieldDataMap();
+        //修改的字段
+        List<String> changeFieldList = dmlData.getChangeFieldList();
+        //操作的主键
+        int id = Integer.parseInt(dmlData.getId());
+
+        KxsUserByStage userByStage = new KxsUserByStage();
+        userByStage.setId(id);
+
+        OperationType operation = dmlData.getOperation();
+        if(operation.equals(OperationType.DELETE)){
+            baseMapper.deleteById(id);
+            return;
+        }
+        for (String field : changeFieldList) {
+
+            switch (field) {
+                case "UserId":
+                    int userId = Integer.parseInt(validFieldDataMap.get(field).toString());
+                    userByStage.setUserId(userId);
+                    break;
+                case "Status":
+                    int status = Integer.parseInt(validFieldDataMap.get(field).toString());
+                    int timeNumber = Integer.parseInt(fieldDataMap.get("TimeNumber").getValue().toString());
+                    int queryCount = Integer.parseInt(fieldDataMap.get("QueryCount").getValue().toString());
+                    if(status == -1){
+                        baseMapper.deleteById(id);
+                        return;
+                    } else if (status == 0 && queryCount == 0) {
+                        userByStage.setStatus(0);
+                    } else if (status == 1 && timeNumber == queryCount) {
+                        userByStage.setStatus(2);
+                    }else {
+                        userByStage.setStatus(1);
+                    }
+                    break;
+                case "SeoTitle":
+                    userByStage.setCreateBy(validFieldDataMap.get(field).toString());
+                    break;
+                case "SeoKeyword":
+                    userByStage.setStageSn(validFieldDataMap.get(field).toString());
+                    break;
+                case "TotalAmount":
+                    userByStage.setStageAmount(new BigDecimal(validFieldDataMap.get(field).toString()));
+                    break;
+                case "ChargeAmount":
+                    userByStage.setDeductAmount(new BigDecimal(validFieldDataMap.get(field).toString()));
+                    break;
+                case "TimeNumber":
+                    userByStage.setNumber(Integer.valueOf(validFieldDataMap.get(field).toString()));
+                    break;
+                case "Remark":
+                    userByStage.setRemark(validFieldDataMap.get(field).toString());
+                    break;
+                case "StartDate":
+                    userByStage.setDeductStartTime(LocalDateTimeUtil.parse(validFieldDataMap.get(field).toString(), DatePattern.NORM_DATETIME_PATTERN));
+                    break;
+                case "CreateDate":
+                    userByStage.setCreateTime(LocalDateTimeUtil.parse(validFieldDataMap.get(field).toString(), DatePattern.NORM_DATETIME_PATTERN));
+                    break;
+                case "UpdateDate":
+                    userByStage.setUpdateTime(LocalDateTimeUtil.parse(validFieldDataMap.get(field).toString(), DatePattern.NORM_DATETIME_PATTERN));
+                    break;
+            }
+        }
+
+        if(operation.equals(OperationType.INSERT)){
+            KxsUserByStage kxsUserByStage = baseMapper.selectById(userByStage.getId());
+            if(kxsUserByStage == null){
+                baseMapper.insert(userByStage);
+            }
+        }
+        if(operation.equals(OperationType.UPDATE)){
+
+            baseMapper.updateById(userByStage);
+        }
+    }
+
+    @Override
+    public void changeInfoData(DMLData dmlData) {
+        //修改的字段值
+        Map<String, Object> validFieldDataMap = dmlData.getValidFieldDataMap();
+        Map<String, FieldData> fieldDataMap = dmlData.getFieldDataMap();
+        //修改的字段
+        List<String> changeFieldList = dmlData.getChangeFieldList();
+        //操作的主键
+        int id = Integer.parseInt(dmlData.getId());
+
+        KxsUserByStageLog userByStageLog = new KxsUserByStageLog();
+        userByStageLog.setId(id);
+
+        OperationType operation = dmlData.getOperation();
+        if(operation.equals(OperationType.DELETE)){
+            kxsUserByStageLogMapper.deleteById(id);
+            return;
+        }
+        for (String field : changeFieldList) {
+
+            switch (field) {
+                case "ParentId":
+                    userByStageLog.setStageId(Integer.parseInt(validFieldDataMap.get(field).toString()));
+                    break;
+                case "Status":
+                    int status = Integer.parseInt(validFieldDataMap.get(field).toString());
+                    if(status == -1){
+                        kxsUserByStageLogMapper.deleteById(id);
+                        return;
+                    }else {
+                        userByStageLog.setStatus(status);
+                    }
+                    break;
+                case "SeoTitle":
+                    userByStageLog.setCreateBy(validFieldDataMap.get(field).toString());
+                    break;
+                case "ChargeAmount":
+                    userByStageLog.setAmount(new BigDecimal(validFieldDataMap.get(field).toString()));
+                    break;
+                case "TimeNumber":
+                    int parentId = Integer.parseInt(fieldDataMap.get("ParentId").getValue().toString());
+                    //查询当前入库最新的分期记录
+                    KxsUserByStageLog kxsUserByStageLog = kxsUserByStageLogMapper.selectOne(Wrappers.<KxsUserByStageLog>lambdaQuery()
+                            .eq(KxsUserByStageLog::getStageId, parentId)
+                            .orderByDesc(KxsUserByStageLog::getDeductTime).last("limit 1"));
+                    if(kxsUserByStageLog == null){
+                        userByStageLog.setThisNumber(1);
+                    }else{
+                        userByStageLog.setThisNumber(kxsUserByStageLog.getThisNumber() + 1);
+                    }
+                    break;
+                case "Remark":
+                    userByStageLog.setRemark(validFieldDataMap.get(field).toString());
+                    break;
+                case "StartDate":
+                    userByStageLog.setDeductTime(LocalDateTimeUtil.parse(validFieldDataMap.get(field).toString(), DatePattern.NORM_DATETIME_PATTERN));
+                    break;
+                case "CreateDate":
+                    userByStageLog.setCreateTime(LocalDateTimeUtil.parse(validFieldDataMap.get(field).toString(), DatePattern.NORM_DATETIME_PATTERN));
+                    break;
+                case "UpdateDate":
+                    userByStageLog.setUpdateTime(LocalDateTimeUtil.parse(validFieldDataMap.get(field).toString(), DatePattern.NORM_DATETIME_PATTERN));
+                    break;
+            }
+        }
+
+        if(operation.equals(OperationType.INSERT)){
+            KxsUserByStageLog kxsUserByStageLog = kxsUserByStageLogMapper.selectById(id);
+            if(kxsUserByStageLog == null){
+                kxsUserByStageLogMapper.insert(userByStageLog);
+            }
+        }
+        if(operation.equals(OperationType.UPDATE)){
+
+            kxsUserByStageLogMapper.updateById(userByStageLog);
+        }
+    }
 }
 

+ 67 - 3
kxs-transfer/src/main/resources/import.txt

@@ -35,9 +35,9 @@ from UserAccount
 //用户预扣款表
 SELECT Id as id, UserId as user_id,CreateDate as create_time, UpdateDate as update_time,
 	ChargeAmount	as amount, Remark as remark, SeoTitle as create_by, Status as status,
-ChargeType as advance_type, Kind as kind,
+ChargeType as advance_type, Kind as kind, Field1 as ext_field,
 	CASE Status WHEN -1 THEN 1 ELSE 0  END del_flag
-	FROM ToChargeBackRecord ORDER BY advance_type desc
+	FROM ToChargeBackRecord
 
 //用户提现申请表
 select Id as id, UserId as user_id,CreateDate as create_time, UpdateDate as update_time,
@@ -223,4 +223,68 @@ SELECT a.Id as id, a.UserId as user_id, a.CreateDate as create_time, a.UpdateDat
 a.MerchantNo as merchant_no, a.MerchantName as merchant_name, a.MerIdcardNo as merchant_card, a.MerchantMobile as merchant_phone,
 a.BrandId as brand_id, a.MerUserId as maker_user_id, a.MerUserType as is_maker, b.id as machine_id, a.StandardStatus as standard_status, a.StandardMonths as standard_months,
 a.Remark as remark
-FROM PosMerchantInfo a LEFT JOIN PosMachinesTwo b on a.KqSnNo = b.PosSn
+FROM PosMerchantInfo a LEFT JOIN PosMachinesTwo b on a.KqSnNo = b.PosSn
+
+--创客消息表
+SELECT Id as id, CreateDate as create_time, UpdateDate as update_time,
+UserId as user_id, MsgType as msg_type, BgPic as bg_pic, Title as title, Content as content, Url as url, Summary as summary, ReadFlag as read_flag
+FROM MsgPersonal
+
+-- 系统消息表
+SELECT Id as id, CreateDate as create_time, UpdateDate as update_time,EffectStartDate as start_time, EffectEndDate as end_time,
+MsgType as msg_type, BgPic as bg_pic, Title as title, Content as content, Url as url, Summary as summary, PushType as push_type, PushTime as push_time
+FROM MsgPlacard
+-- 系统消息已读表
+SELECT Id as id, UserId as user_id, PlacardId as msg_id FROM MsgPlacardRead
+
+-- APP弹窗表
+SELECT Id as id, CreateDate as create_time, UpdateDate as update_time,EffectStartDate as start_time, EffectEndDate as end_time, case Status when  0 then 0 when -1 then 1 else 0 end  del_flag,
+MsgType - 1 as msg_type, BgPic as bg_pic, Title as title, Content as content, Url as url,
+BtnText as btn_text, TimeByDay as time_by_day, IsWeekend as is_weekend, UrlParam as url_param
+FROM MsgAlert
+--用户结算卡变更记录
+select a.Id as id, a.UserId as user_id, a.CreateDate as create_time, a.UpdateDate as update_time,
+BeforeCardNo as before_card_no, AfterCardNo as after_card_no
+FROM SettlementCardChangeRecord a
+
+--分期表同步
+SELECT a.Id as id, a.UserId as user_id, a.CreateDate as create_time, a.UpdateDate as update_time, case `Status` when -1 then 1 ELSE 0 end del_flag, case  when `Status` = 0 and QueryCount = 0 then 0 when `Status` = 1 and TimeNumber = QueryCount then 2 ELSE 1 end status,
+SeoTitle as create_by, SeoKeyword as stage_sn, TotalAmount as stage_amount, TimeNumber as number, StartDate as deduct_start_time, Remark as remark, ChargeAmount as deduct_amount
+FROM ToChargeByStage a WHERE status > -1
+
+-- 分期扣款明细
+SET @row_number = 0;
+SELECT a.Id as id, a.CreateDate as create_time, a.UpdateDate as update_time, case `Status` when -1 then 1 ELSE 0 end del_flag, `Status` as status,
+(@row_number:= IF(@last_field1 = ParentId, @row_number + 1, 1)) AS this_number,
+ @last_field1 := ParentId,
+SeoTitle as create_by, Remark as remark, ParentId as stage_id, ChargeAmount as amount, StartDate as deduct_time
+FROM ToChargeBackRecordSub a WHERE status > -1
+ORDER BY Id, ParentId
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+ 8 - 2
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/model/KxsPartnerAmountLog.java

@@ -141,7 +141,7 @@ public class KxsPartnerAmountLog extends Model<KxsPartnerAmountLog> implements S
      * 使用可提现额度
      */
     @Schema(description = "使用可提现额度")
-    private BigDecimal useWithdrawalMount;
+    private BigDecimal useWithdrawalAmount;
 
 
     /**
@@ -155,7 +155,13 @@ public class KxsPartnerAmountLog extends Model<KxsPartnerAmountLog> implements S
      * 使用后可提现额度
      */
     @Schema(description = "使用后可提现额度")
-    private BigDecimal afterWithdrawalMount;
+    private BigDecimal afterWithdrawalAmount;
+
+    /**
+     * 使用后可提现额度
+     */
+    @Schema(description = "使用后可提现额度")
+    private BigDecimal afterTotalAmount;
 
 
     /**

+ 6 - 0
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/model/KxsUserAdvance.java

@@ -107,6 +107,12 @@ public class KxsUserAdvance extends Model<KxsUserAdvance> implements Serializabl
     @Schema(description = "操作人")
     private String createBy;
 
+    /**
+     * 扩展字段
+     */
+    @Schema(description = "扩展字段")
+    private String extField;
+
 
     /**
      * 扣款标识 0未扣 1已扣 2撤销|已返还 3暂停扣款

+ 3 - 4
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/model/KxsUserByStage.java

@@ -5,10 +5,7 @@ import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.*;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -57,6 +54,8 @@ public class KxsUserByStage extends Model<KxsUserByStage> implements Serializabl
      * 删除标记,0未删除,1已删除
      */
     @Schema(description = "删除标记,0未删除,1已删除")
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
     private String delFlag;
 
 

+ 3 - 4
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/model/KxsUserByStageLog.java

@@ -5,10 +5,7 @@ import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.*;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -57,6 +54,8 @@ public class KxsUserByStageLog extends Model<KxsUserByStageLog> implements Seria
      * 删除标记,0未删除,1已删除
      */
     @Schema(description = "删除标记,0未删除,1已删除")
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
     private String delFlag;
 
 

+ 5 - 1
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/service/impl/KxsTotalDebtServiceImpl.java

@@ -119,8 +119,10 @@ public class KxsTotalDebtServiceImpl extends ServiceImpl<KxsTotalDebtMapper, Kxs
             KxsPartnerAmountLog kxsPartnerAmountLog = new KxsPartnerAmountLog();
             kxsPartnerAmountLog.setUserId(kxsTotalDebt.getUserId());
             kxsPartnerAmountLog.setBeforeAmount(NumberUtil.add(kxsPartner.getWithdrawalAmount(),partnerDeductAmount));
+            kxsPartnerAmountLog.setAfterAmount(kxsPartner.getWithdrawalAmount());
             kxsPartnerAmountLog.setAmount(partnerDeductAmount);
-            kxsPartnerAmountLog.setAfterWithdrawalMount(kxsPartner.getWithdrawalAmount());
+            kxsPartnerAmountLog.setAfterWithdrawalAmount(kxsPartner.getWithdrawalAmount());
+            kxsPartnerAmountLog.setUseWithdrawalAmount(partnerDeductAmount);
             kxsPartnerAmountLog.setKind(KindTypeEnum.SUB.getType());
             kxsPartnerAmountLog.setRemark("预借款项还款");
             kxsPartnerAmountLog.setVariationType(UserVariationTypeEnum.PARTNER_WITHDRAW_BALANCE.getType());
@@ -178,6 +180,8 @@ public class KxsTotalDebtServiceImpl extends ServiceImpl<KxsTotalDebtMapper, Kxs
             KxsLeaderAmountLog kxsLeaderAmountLog = new KxsLeaderAmountLog();
             kxsLeaderAmountLog.setUserId(kxsTotalDebt.getUserId());
             kxsLeaderAmountLog.setRemark("预借款项还款");
+            kxsLeaderAmountLog.setBeforeAmount(NumberUtil.add(userAmount.getLeaderBalanceAmount(), leaderDeductAmount));
+            kxsLeaderAmountLog.setAfterAmount(userAmount.getLeaderBalanceAmount());
             kxsLeaderAmountLog.setBeforeWithdrawalAmount(NumberUtil.add(userAmount.getLeaderBalanceAmount(), leaderDeductAmount));
             kxsLeaderAmountLog.setAfterWithdrawalAmount(userAmount.getLeaderBalanceAmount());
             kxsLeaderAmountLog.setAmount(leaderDeductAmount);

+ 2 - 2
kxs-user/kxs-user-biz/src/main/resources/mapper/KxsPartnerAmountLogMapper.xml

@@ -18,9 +18,9 @@
         <result column="remark" property="remark" />
         <result column="use_store_amount" property="useStoreAmount" />
         <result column="use_total_amt" property="useTotalAmt" />
-        <result column="use_withdrawal_mount" property="useWithdrawalMount" />
+        <result column="use_withdrawal_amount" property="useWithdrawalAmount" />
         <result column="after_store_amount" property="afterStoreAmount" />
-        <result column="after_withdrawal_mount" property="afterWithdrawalMount" />
+        <result column="after_withdrawal_amount" property="afterWithdrawalAmount" />
         <result column="change_type" property="changeType" />
 
     </resultMap>

+ 1 - 0
kxs-user/kxs-user-biz/src/main/resources/mapper/KxsUserAdvanceMapper.xml

@@ -15,6 +15,7 @@
         <result column="amount" property="amount" />
         <result column="create_by" property="createBy" />
         <result column="status" property="status" />
+        <result column="ext_field" property="extField" />
 
     </resultMap>