提交 46c8f10c authored 作者: inroi's avatar inroi

调整

上级 3b6d2072
......@@ -75,15 +75,6 @@
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<!--k3cloud-WebAPI-->
<dependency>
<groupId>webapi</groupId>
<artifactId>k3cloud-webapi-client</artifactId>
<scope>system</scope>
<version>1.0</version>
<systemPath>${project.basedir}/src/main/resources/lib/k3cloud-webapi-client.jar</systemPath>
</dependency>
<dependency>
<groupId>com.semiconductor</groupId>
<artifactId>semiconductor-framework-core</artifactId>
......
package com.system.api;
import com.system.config.ThreadLocalConfig;
import kingdee.bos.json.JSONObject;
import kingdee.bos.webapi.client.ApiHttpClient;
import kingdee.bos.webapi.client.ApiRequest;
import kingdee.bos.webapi.client.ApiServiceRequest;
import org.apache.http.client.CookieStore;
import java.util.Map;
/**
* @author Inori
*/
public class KingDeeApiClient {
private String serverUrl;
private CookieStore cookieStore;
public KingDeeApiClient(String serverUrl) {
this.serverUrl = serverUrl;
}
public <T> ApiRequest<T> createRequest(String serviceName, Object[] parameters, Class<T> returnType) {
return new ApiServiceRequest<>(this.serverUrl, this.cookieStore, serviceName, parameters, returnType);
}
public <T> T execute(String serviceName, Object[] parameters, Class<T> returnType) throws Exception {
ApiRequest<T> request = this.createRequest(serviceName, parameters, returnType);
ApiHttpClient<T> httpClient = new ApiHttpClient<>();
request.setListener(httpClient);
System.out.println("------------>" + request.getServerUrl());
long start = System.currentTimeMillis();
T send = httpClient.Send(request, returnType);
long costTime = System.currentTimeMillis() - start;
Map<String, Object> map = ThreadLocalConfig.get();
map.put("costTime", costTime);
ThreadLocalConfig.set(map);
return send;
}
public Boolean login(String dbId, String userName, String password, int lcid) {
try {
Object[] loginInfo = new Object[]{dbId, userName, password, lcid};
ApiRequest<String> request = this.createRequest("Kingdee.BOS.WebApi.ServicesStub.AuthService.ValidateUser", loginInfo, String.class);
ApiHttpClient<String> httpClient = new ApiHttpClient<>();
request.setListener(httpClient);
String ret = httpClient.Send(request, String.class);
System.out.println(ret);
int result = (new JSONObject(ret)).getInt("LoginResultType");
if (result == 1) {
this.cookieStore = request.getCookieStore();
return true;
} else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
package com.system.api;
import com.system.utils.JsonUtil;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
/**
* @author Inori
*/
public class KingDeeK3CloudApi extends KingDeeApiClient {
public KingDeeK3CloudApi(String serverUrl) {
super(serverUrl);
}
public String excuteOperation(String formid, String opNumber, String data) throws Exception {
Object execute = this.execute("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExcuteOperation", new Object[]{formid, opNumber, data}, Object.class);
return JsonUtil.toString(execute);
}
public String save(String formid, String data) throws Exception {
Object execute = this.execute("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save", new Object[]{formid, data}, Object.class);
return JsonUtil.toString(execute);
}
public String batchSave(String formid, String data) throws Exception {
Object execute = this.execute("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.BatchSave", new Object[]{formid, data}, Object.class);
return JsonUtil.toString(execute);
}
public String audit(String formid, String data) throws Exception {
Object execute = this.execute("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit", new Object[]{formid, data}, Object.class);
return JsonUtil.toString(execute);
}
public String delete(String formid, String data) throws Exception {
Object execute = this.execute("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Delete", new Object[]{formid, data}, Object.class);
return JsonUtil.toString(execute);
}
public String unAudit(String formid, String data) throws Exception {
Object execute = this.execute("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.UnAudit", new Object[]{formid, data}, Object.class);
return JsonUtil.toString(execute);
}
public String submit(String formid, String data) throws Exception {
Object execute = this.execute("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Submit", new Object[]{formid, data}, Object.class);
return JsonUtil.toString(execute);
}
public String view(String formid, String data) throws Exception {
Object execute = this.execute("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.View", new Object[]{formid, data}, Object.class);
return JsonUtil.toString(execute);
}
public List<List<Object>> executeBillQuery(String data) throws Exception {
List execute = this.execute("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery", new Object[]{data}, ArrayList.class);
if (CollectionUtils.isEmpty(execute)) {
execute = new ArrayList<>();
}
return execute;
}
public String draft(String formid, String data) throws Exception {
Object execute = this.execute("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Draft", new Object[]{formid, data}, Object.class);
return JsonUtil.toString(execute);
}
}
......@@ -17,7 +17,10 @@ public interface Constants {
String VERIFICATION_INTERVAL = "verificationInterval";
String CODE_NAME = "code";
String SUCCESS_NAME = "success";
String SUCCESS_CODE = "true";
}
package com.system.constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.system.dao.KingDeeCommonConfigMapper;
import com.system.transfer.kingdee.KingDeeCommonConfigListInVo;
import com.system.transfer.kingdee.KingDeeCommonConfigOneInVo;
import com.system.transfer.kingdee.KingdeeCommonConfigListOutVoRecords;
import com.system.utils.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author Inori
*/
@Component
public class KingDeeCommonPushConstants {
private Map<String, Map<String, String>> map = new ConcurrentHashMap<>();
@Autowired
private KingDeeCommonConfigMapper kingDeeCommonConfigMapper;
@PostConstruct
public void init() {
List<KingdeeCommonConfigListOutVoRecords> recordsList = kingDeeCommonConfigMapper.kingDeeCommonConfigList(new Page<>(1, 10000), new KingDeeCommonConfigListInVo(1));
for (KingdeeCommonConfigListOutVoRecords records : recordsList) {
this.map.put(records.getDocType(), this.getKingDeeCommonConfigDetail(records));
}
}
public Map<String, String> get(String formId) {
if (CollectionUtils.isEmpty(this.map)) {
return new HashMap<>(1);
}
return this.map.get(formId);
}
public void set(String docType) {
KingdeeCommonConfigListOutVoRecords records = kingDeeCommonConfigMapper.kingDeeCommonConfigOne(new KingDeeCommonConfigOneInVo("", docType, 1));
if (StringUtil.isNotNull(records)) {
this.map.remove(docType);
this.map.put(records.getDocType(), this.getKingDeeCommonConfigDetail(records));
}
}
private Map<String, String> getKingDeeCommonConfigDetail(KingdeeCommonConfigListOutVoRecords records) {
Map<String, String> result = new HashMap<>(10);
result.put("docType", records.getDocType());
result.put("sFormId", records.getSFormId());
result.put("kingDeeLogName", records.getName());
result.put("entryName", records.getEntryName());
result.put("fathersFormId", records.getFathersFormId());
result.put("fatherEntryName", records.getFatherEntryName());
result.put("pushRule", records.getPushRule());
result.put("isInTransaction", String.valueOf(records.getIsInTransaction()));
result.put("isAutoPerform", String.valueOf(records.getIsAutoPerform()));
result.put("kingDeeFiledDetail", records.getKingdeeFiledDetail());
result.put("plugInUrl", records.getPlugInUrl());
result.put("customSql", records.getCustomSql());
return result;
}
public void del(String docType) {
this.map.remove(docType);
}
}
package com.system.constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.system.dao.KingDeeCommonConfigMapper;
import com.system.transfer.kingdee.KingDeeCommonConfigListInVo;
import com.system.transfer.kingdee.KingDeeCommonConfigOneInVo;
import com.system.transfer.kingdee.KingdeeCommonConfigListOutVoRecords;
import com.system.utils.JsonUtil;
import com.system.utils.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author Inori
*/
@Component
public class KingDeeCommonSynConstants {
private Map<String, Map<String, String>> map = new ConcurrentHashMap<>();
@Autowired
private KingDeeCommonConfigMapper kingDeeCommonConfigMapper;
@PostConstruct
public void init() {
List<KingdeeCommonConfigListOutVoRecords> recordsList = kingDeeCommonConfigMapper.kingDeeCommonConfigList(new Page<>(1, 10000), new KingDeeCommonConfigListInVo(-1));
for (KingdeeCommonConfigListOutVoRecords records : recordsList) {
this.map.put(records.getSFormId(), this.purchaseKingDeeSyn(records));
}
}
public Map<String, String> get(String sFormId) {
return this.map.get(sFormId);
}
public Map<String, String> getKingDee(String docType) {
KingdeeCommonConfigListOutVoRecords records = kingDeeCommonConfigMapper.kingDeeCommonConfigOne(new KingDeeCommonConfigOneInVo("", docType, -1));
if (StringUtil.isNull(records)) {
return new HashMap<>(0);
}
return this.map.get(records.getSFormId());
}
public void set(String sFormId) {
KingdeeCommonConfigListOutVoRecords records = kingDeeCommonConfigMapper.kingDeeCommonConfigOne(new KingDeeCommonConfigOneInVo(sFormId, "", -1));
if (records != null) {
this.map.remove(sFormId);
this.map.put(records.getSFormId(), this.purchaseKingDeeSyn(records));
}
}
private Map<String, String> purchaseKingDeeSyn(KingdeeCommonConfigListOutVoRecords records) {
Map<String, String> temp = new HashMap<>(6);
temp.put("sFormId", records.getSFormId());
temp.put("docType", records.getDocType());
temp.put("name", records.getName());
temp.put("primaryKeyField", records.getPrimaryKeyField());
temp.put("mesEntryName", records.getMesEntryName());
temp.put("kingdeeFiledDetail", records.getKingdeeFiledDetail());
temp.put("plugInUrl", records.getPlugInUrl());
temp.put("customSql", records.getCustomSql());
return temp;
}
public void del(String formId) {
this.map.remove(formId);
}
/**
* 封装金蝶字段
*/
public static Map<String, String> purchaseKingDee(List<Map<String, String>> fieldList) {
Map<String, String> key = new LinkedHashMap<>();
for (Map<String, String> map : fieldList) {
String kingDeeField = map.get("kingdeeField");
String indexField = map.get("indexField");
if (StringUtil.isNotBlank(indexField)) {
kingDeeField = kingDeeField + "." + indexField;
}
key.put(kingDeeField, kingDeeField);
}
return key;
}
/**
* 封装第三方字段
*/
public static void purchaseIms(List<List<Object>> list, List<Map<String, String>> fieldList, Map<String, Object> map, List<Map<String, Object>> imsList) {
for (List<Object> objectList : list) {
Map<String, Object> temp = new HashMap<>(fieldList.size());
for (int i = 0; i < fieldList.size(); i++) {
//是否是明细字段
if ("true".equals(fieldList.get(i).get("isDetailField"))) {
temp.put(fieldList.get(i).get("thirdPartyField"), objectList.get(i));
} else {
map.put(fieldList.get(i).get("thirdPartyField"), objectList.get(i));
}
}
if (!CollectionUtils.isEmpty(temp)) {
imsList.add(temp);
}
}
}
/**
* 封装第三方字段
*/
public static void purchaseSqlIms(List<Object> list, List<Map<String, String>> fieldList, Map<String, Object> map) {
List<Map<String, Object>> imsList = new ArrayList<>();
for (Object object : list) {
Map<String, Object> temp = JsonUtil.toMap(JsonUtil.toString(object), String.class, Object.class);
Map<String, Object> request = new LinkedHashMap<>();
for (Map<String, String> temp02Map : fieldList) {
if ("true".equals(temp02Map.get("isDetailField"))) {
request.put(temp02Map.get("thirdPartyField"), temp.get(temp02Map.get("kingdeeField")));
} else {
map.put(temp02Map.get("thirdPartyField"), temp.get(temp02Map.get("kingdeeField")));
}
}
if (!CollectionUtils.isEmpty(request)) {
imsList.add(request);
}
}
map.put("children", imsList);
}
}
package com.system.constants;
/**
* @author Inori
*/
public interface KingDeeConstants {
String CODE_NAME = "resultCode";
String MSG_NAME = "resultMsg";
String SUCCESS_CODE = "0000";
String ERROR_CODE = "0002";
String OVERTIME_CODE = "0101";
String NOT_LOGGED_IN_CODE = "0010";
String DATA_NAME = "data";
}
package com.system.constants;
import com.system.utils.FileUtil;
import lombok.Data;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.IOException;
import java.io.InputStream;
/**
* @author Inori
*/
@Data
@Component
public class RsaKeyConstant {
/**
* 公钥
*/
private String publicKey;
@PostConstruct
public void init() {
try {
ClassPathResource pubClassPath = new ClassPathResource("key/" + "publicKey.pub");
if (pubClassPath.exists()) {
InputStream inputStream = pubClassPath.getInputStream();
publicKey = FileUtil.read(inputStream);
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.system.controller;
import com.system.serivce.IDockingDistributionService;
import com.system.serivce.IDockingShoppingMallService;
import com.system.transfer.response.RestResponse;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Inori
*/
@RestController
@RequestMapping("/api")
public class DockingController {
@Autowired
private IDockingDistributionService dockingDistributionService;
@Autowired
private IDockingShoppingMallService dockingShoppingMallService;
@ApiOperation("对接分销会员创建")
@GetMapping("/docking/distribution/member/create")
public RestResponse dockingDistributionMemberCreate() {
dockingDistributionService.dockingDistributionMemberCreate();
return RestResponse.success();
}
@ApiOperation("查询商城订单列表")
@GetMapping("/shopping/mall/order/List")
public RestResponse shoppingMallOrderList() {
dockingShoppingMallService.shoppingMallOrderList();
return RestResponse.success();
}
}
package com.system.controller;
import com.system.serivce.IKingDeeCommonConfigService;
import com.system.transfer.kingdee.*;
import com.system.transfer.response.RestResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @author Inori
*/
@Api(tags = "金蝶通用配置")
@RestController
@RequestMapping("/api")
public class KingDeeCommonConfigController {
@Autowired
private IKingDeeCommonConfigService kingDeeCommonConfigService;
@ApiOperation("金蝶通用配置列表")
@GetMapping("/kingdee/common/config/list")
public RestResponse kingDeeCommonConfigList(@ModelAttribute KingDeeCommonConfigListInVo inVo) {
KingdeeCommonConfigListOutVo outVo = kingDeeCommonConfigService.kingDeeCommonConfigList(inVo);
return RestResponse.success(outVo);
}
@ApiOperation("金蝶通用配置创建")
@PostMapping("/kingdee/common/config/create")
public RestResponse kingDeeCommonConfigCreate(@RequestBody KingdeeCommonConfigCreateInVo inVo) {
return kingDeeCommonConfigService.kingDeeCommonConfigCreate(inVo);
}
@ApiOperation("金蝶通用配置更新")
@PutMapping("/kingdee/common/config/update")
public RestResponse kingDeeCommonConfigUpdate(@RequestBody KingdeeCommonConfigUpdateInVo inVo) {
return kingDeeCommonConfigService.kingDeeCommonConfigUpdate(inVo);
}
@ApiOperation("金蝶通用配置删除")
@DeleteMapping("/kingdee/common/config/delete")
public RestResponse kingDeeCommonConfigDelete(@ModelAttribute KingdeeCommonConfigDeleteInVo inVo) {
return kingDeeCommonConfigService.kingDeeCommonConfigDelete(inVo);
}
}
package com.system.controller;
import com.system.serivce.IKingDeeCommonGetService;
import com.system.transfer.kingdee.KingDeeDataListInVo;
import com.system.transfer.response.RestResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author Inori
*/
@Api(tags = "金蝶查询相关")
@RestController
@RequestMapping("/api")
public class KingDeeGetController {
@Autowired
private IKingDeeCommonGetService kingDeeCommonGetService;
@ApiOperation("金蝶通用查询")
@PostMapping("/kingdee/data/list")
public RestResponse kingDeeDataList(@RequestBody @Validated KingDeeDataListInVo inVo) {
return kingDeeCommonGetService.kingDeeDataList(inVo);
}
}
package com.system.controller;
import com.system.transfer.response.RestResponse;
import com.system.serivce.IKingDeeLogService;
import com.system.transfer.kingdee.KingDeeLogListInVo;
import com.system.transfer.kingdee.KingDeeLogListOutVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Inori
*/
@Api(tags = "金蝶日志")
@RestController
@RequestMapping("/api")
public class KingDeeLogController {
@Autowired
private IKingDeeLogService kingDeeLogService;
@ApiOperation("金蝶日志列表")
@GetMapping("/kingdee/log/list")
public RestResponse kingDeeLogList(@ModelAttribute @Validated KingDeeLogListInVo inVo) {
KingDeeLogListOutVo outVo = kingDeeLogService.kingDeeLogList(inVo);
return RestResponse.success(outVo);
}
}
package com.system.controller;
import com.system.serivce.IKingDeeCommonPushService;
import com.system.transfer.kingdee.KingDeeUpdateThirdDataInVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Inori
*/
@Api(tags = "金蝶更新数据")
@RestController
@RequestMapping("/api")
public class KingDeePushController {
@Autowired
private IKingDeeCommonPushService kingDeeCommonPushService;
@ApiOperation("金蝶下推创建")
@PostMapping("/updateThirdData")
public Object kingDeeUpdateThirdData(@RequestBody @Validated KingDeeUpdateThirdDataInVo inVo) {
return kingDeeCommonPushService.kingDeeUpdateThirdData(inVo);
}
}
package com.system.controller;
import com.system.serivce.ILicFileService;
import com.system.transfer.configure.LicInfoFileImportInVo;
import com.system.transfer.response.RestResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Inori
*/
@Api(tags = "Lic验证")
@RestController
@RequestMapping("/api")
public class LicFileController {
@Autowired
private ILicFileService licFileService;
@ApiOperation("Lic文件导入")
@PostMapping("/lic/info/file/import")
public RestResponse licInfoFileImport(@ModelAttribute LicInfoFileImportInVo inVo) {
return licFileService.licInfoFileImport(inVo);
}
}
package com.system.controller;
import com.system.serivce.ISynchronizationService;
import com.system.transfer.configure.InitConnectParamCheckInVo;
import com.system.transfer.configure.InitConnectParamCreateInVo;
import com.system.transfer.configure.InitConnectParamOutVo;
import com.system.transfer.response.RestResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author Inori
*/
@Api(tags = "自动同步")
@RestController
@RequestMapping("/api")
public class SynchronizationController {
@Autowired
private ISynchronizationService synchronizationService;
@ApiOperation("开启自动同步")
@GetMapping("/start/synchronization")
public RestResponse startSynchronization() {
return synchronizationService.startSynchronization();
}
@ApiOperation("关闭自动同步")
@GetMapping("/turn/off/synchronization")
public RestResponse turnOffSynchronization() {
return synchronizationService.turnOffSynchronization();
}
@ApiOperation("自动同步定时任务")
@GetMapping("/synchronization/records")
public RestResponse synchronizationRecords() {
return RestResponse.success(synchronizationService.synchronizationStatus());
}
@ApiOperation("手动同步")
@GetMapping("/manual/synchronization")
public RestResponse manualSynchronization() {
return synchronizationService.manualSynchronization();
}
@ApiOperation("查询金蝶参数")
@GetMapping("/init/connect/param")
public RestResponse initConnectParam() {
InitConnectParamOutVo outVo = synchronizationService.initConnectParam();
return RestResponse.success(outVo);
}
@ApiOperation("保存金蝶参数")
@PostMapping("/init/connect/param/create")
public RestResponse initConnectParamCreate(@RequestBody @Validated InitConnectParamCreateInVo inVo) {
return synchronizationService.initConnectParamCreate(inVo);
}
@ApiOperation("校验金蝶参数")
@PostMapping("/init/connect/param/check")
public RestResponse initConnectParamCheck(@RequestBody @Validated InitConnectParamCheckInVo inVo) {
return synchronizationService.initConnectParamCheck(inVo);
}
}
package com.system.controller;
import com.system.serivce.ISynchronizationRecordsService;
import com.system.transfer.kingdee.SynchronizationRecordsDeleteInVo;
import com.system.transfer.kingdee.SynchronizationRecordsListInVo;
import com.system.transfer.kingdee.SynchronizationRecordsListOutVo;
import com.system.transfer.response.RestResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @author Inori
*/
@Api(tags = "同步记录")
@RestController
@RequestMapping("/api")
public class SynchronizationRecordsController {
@Autowired
private ISynchronizationRecordsService synchronizationRecordsService;
@ApiOperation("同步记录列表")
@GetMapping("/synchronization/records/list")
public RestResponse synchronizationRecordsList(@ModelAttribute SynchronizationRecordsListInVo inVo) {
SynchronizationRecordsListOutVo outVo = synchronizationRecordsService.synchronizationRecordsList(inVo);
return RestResponse.success(outVo);
}
@ApiOperation("同步记录删除")
@DeleteMapping("/synchronization/records/delete")
public RestResponse synchronizationRecordsDelete(@ModelAttribute SynchronizationRecordsDeleteInVo inVo) {
synchronizationRecordsService.synchronizationRecordsDelete(inVo);
return RestResponse.success();
}
}
package com.system.controller;
import com.system.serivce.IThirdPartyLogService;
import com.system.transfer.kingdee.ThirdPartyLogListInVo;
import com.system.transfer.kingdee.ThirdPartyLogListOutVo;
import com.system.transfer.response.RestResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Inori
*/
@Api(tags = "第三方日志")
@RestController
@RequestMapping("/api")
public class ThirdPartyLogController {
@Autowired
private IThirdPartyLogService thirdPartyLogService;
@ApiOperation("第三方日志列表")
@GetMapping("/third/party/log/list")
public RestResponse thirdPartyLogList(@ModelAttribute @Validated ThirdPartyLogListInVo inVo) {
ThirdPartyLogListOutVo outVo = thirdPartyLogService.thirdPartyLogList(inVo);
return RestResponse.success(outVo);
}
}
package com.system.dao;
import com.system.transfer.configure.TableStructureCreateInVo;
import com.system.transfer.configure.TableStructureCreateInVoRecords;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* @author Inori
*/
@Mapper
public interface DatabaseTableMapper {
/**
* 数据库表创建
*
* @param inVo 条件
* @param recordsList 条件
*/
void databaseTableCreate(@Param("inVo") TableStructureCreateInVo inVo, @Param("recordsList") List<TableStructureCreateInVoRecords> recordsList);
/**
* 数据库表数据创建
*
* @param dbTableName 数据库表名称
* @param dbFiledList 数据库表字段列表
* @param dataList 数据库表数据列表
*/
void databaseTableDataCreate(@Param("dbTableName") String dbTableName, @Param("dbFiledList") List<String> dbFiledList, @Param("dataList") List<Map<String, Object>> dataList);
/**
* 数据库表名称修改
*
* @param dbTableName 表名称
* @param oldDbTableName 原表名称
*/
void databaseTableNameUpdate(@Param("dbTableName") String dbTableName, @Param("oldDbTableName") String oldDbTableName);
/**
* 数据库表注释修改
*
* @param dbTableName 表名称
* @param dbTableComment 表注释
*/
void databaseTableCommentUpdate(@Param("dbTableName") String dbTableName, @Param("dbTableComment") String dbTableComment);
/**
* 新增表结构字段
*
* @param records 条件
*/
void databaseTableFieldCreate(TableStructureCreateInVo records);
/**
* 修改表结构字段
*
* @param records 条件
*/
void databaseTableFieldUpdate(TableStructureCreateInVo records);
/**
* 删除表结构字段
*
* @param records 条件
*/
void databaseTableFieldDelete(TableStructureCreateInVo records);
}
package com.system.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.system.model.InitConnectParam;
import com.system.transfer.configure.InitConnectParamOutVo;
/**
* @author Inori
*/
public interface InitConnectParamMapper extends BaseMapper<InitConnectParam> {
/**
* 查询金蝶配置
*
* @return 金蝶配置
*/
InitConnectParamOutVo initConnectParam();
/**
* 更新Lic密文
*
* @param data Lic密文
*/
void initConnectParamUpdate(String data);
}
package com.system.dao;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.system.transfer.kingdee.*;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author Inori
*/
public interface KingDeeCommonConfigMapper {
/**
* 金蝶通用配置列表
*
* @param page 分页
* @param inVo 条件
* @return 列表
*/
List<KingdeeCommonConfigListOutVoRecords> kingDeeCommonConfigList(@Param("page") Page<KingdeeCommonConfigListOutVoRecords> page, @Param("inVo") KingDeeCommonConfigListInVo inVo);
/**
* 金蝶通用配置
*
* @param inVo 条件
* @return 金蝶通用配置
*/
KingdeeCommonConfigListOutVoRecords kingDeeCommonConfigOne(KingDeeCommonConfigOneInVo inVo);
/**
* 金蝶通用配置创建
*
* @param inVo 条件
*/
void kingDeeCommonConfigCreate(KingdeeCommonConfigCreateInVo inVo);
/**
* 金蝶通用配置更新
*
* @param inVo 条件
*/
void kingDeeCommonConfigUpdate(KingdeeCommonConfigUpdateInVo inVo);
/**
* 根据ID查询金蝶通用配置
*
* @param id ID
* @return 金蝶通用配置
*/
KingdeeCommonConfigListOutVoRecords getKingDeeCommonConfigById(Integer id);
/**
* 金蝶通用配置删除
*
* @param inVo 条件
*/
void kingDeeCommonConfigDelete(KingdeeCommonConfigDeleteInVo inVo);
}
package com.system.dao;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.system.transfer.kingdee.KingDeeLogCreateInVo;
import com.system.transfer.kingdee.KingDeeLogListInVo;
import com.system.transfer.kingdee.KingDeeLogListOutVoRecords;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author Inori
*/
public interface KingDeeLogMapper {
/**
* 金蝶日志列表
*
* @param page 分页
* @param inVo 条件
* @return 列表
*/
List<KingDeeLogListOutVoRecords> kingDeeLogList(@Param("page") Page<KingDeeLogListOutVoRecords> page, @Param("inVo") KingDeeLogListInVo inVo);
/**
* 金蝶日志创建
*
* @param inVo 条件
*/
void kingDeeLogCreate(KingDeeLogCreateInVo inVo);
}
package com.system.dao;
import java.util.Map;
/**
* @author Inori
*/
public interface ProductionOrderMapper {
/**
* 生产订单创建
*
* @param map 数据
*/
void productionOrderCreate(Map<String, Object> map);
}
package com.system.dao;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.system.transfer.kingdee.SynchronizationRecordsDeleteInVo;
import com.system.transfer.kingdee.SynchronizationRecordsListInVo;
import com.system.transfer.kingdee.SynchronizationRecordsListOutVoRecords;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* @author Inori
*/
public interface SynchronizationRecordsMapper {
/**
* 金蝶同步记录列表
*
* @param page 分页
* @param inVo 条件
* @return 列表
*/
List<SynchronizationRecordsListOutVoRecords> synchronizationRecordsList(@Param("page") Page<SynchronizationRecordsListOutVoRecords> page, @Param("inVo") SynchronizationRecordsListInVo inVo);
/**
* 根据状态查询金蝶同步记录
*
* @param statusList 状态列表
* @return 同步记录
*/
List<SynchronizationRecordsListOutVoRecords> getSynchronizationRecordsListByStatus(@Param("statusList") List<Integer> statusList);
/**
* 金蝶同步临时记录创建
*
* @param tempList 数据
*/
void synchronizationRecordsTempCreate(@Param("tempList") List<Map<String, Object>> tempList);
/**
* 金蝶同步临时记录列表
*
* @return 列表
*/
List<Map<String, Object>> synchronizationRecordsTempList();
/**
* 金蝶同步记录创建
*
* @param tempList 数据
*/
void synchronizationRecordsCreate(@Param("tempList") List<Map<String, Object>> tempList);
/**
* 根据ID删除数据
*
* @param idList ID列表
*/
void synchronizationRecordsTempDelete(@Param("idList") List<Integer> idList);
/**
* 根据ID更新金蝶同步记录状态
*
* @param idList ID列表
*/
void synchronizationRecordsUpdateByIdList(@Param("idList") List<Integer> idList);
/**
* 金蝶同步记录更新
*
* @param id ID
* @param queueId 唯一标识
* @param message 错误信息
* @param status 状态
*/
void synchronizationRecordsUpdate(@Param("id") Integer id, @Param("queueId") String queueId, @Param("message") String message, @Param("status") Integer status);
/**
* 金蝶同步记录删除
*
* @param inVo 条件
*/
void synchronizationRecordsDelete(SynchronizationRecordsDeleteInVo inVo);
}
package com.system.dao;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.system.transfer.kingdee.ThirdPartyLogCreateInVo;
import com.system.transfer.kingdee.ThirdPartyLogListInVo;
import com.system.transfer.kingdee.ThirdPartyLogListOutVoRecords;
import com.system.transfer.kingdee.ThirdPartyLogUpdateInVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author Inori
*/
public interface ThirdPartyLogMapper {
/**
* 第三方日志列表
*
* @param page 分页
* @param inVo 条件
* @return 列表
*/
List<ThirdPartyLogListOutVoRecords> thirdPartyLogList(@Param("page") Page<ThirdPartyLogListOutVoRecords> page, @Param("inVo") ThirdPartyLogListInVo inVo);
/**
* 唯一标识是否存在
*
* @param queueId 唯一标识
* @return 是否存在
*/
Integer getThirdPartyLogByQueueId(String queueId);
/**
* 第三方日志创建
*
* @param inVo 条件
*/
void thirdPartyLogCreate(ThirdPartyLogCreateInVo inVo);
/**
* 第三方日志更新
*
* @param inVo 条件
*/
void thirdPartyLogUpdate(ThirdPartyLogUpdateInVo inVo);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.system.dao.DatabaseTableMapper">
<insert id="databaseTableCreate" parameterType="java.lang.Object">
CREATE TABLE ${inVo.dbTableName} (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`queue_id`VARCHAR(255) NOT NULL COMMENT '唯一标识',
<foreach collection="recordsList" item="item" separator="," close=",">
`${item.dbFieldName}` ${item.dbFieldType} DEFAULT ${item.dbFieldDefault} COMMENT ${item.dbFieldComment}
</foreach>
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT=${inVo.dbTableComment};
</insert>
<insert id="databaseTableDataCreate" parameterType="java.lang.Object">
INSERT INTO ${dbTableName} (
<foreach collection="dbFiledList" item="item" separator=",">
${item}
</foreach>
) VALUES
<foreach collection="dataList" item="item" separator=",">
<foreach collection="item.values" item="value" separator="," open="(" close=")">
#{value}
</foreach>
</foreach>
</insert>
<update id="databaseTableNameUpdate" parameterType="java.lang.String">
ALTER TABLE ${oldDbTableName} RENAME AS ${dbTableName}
</update>
<update id="databaseTableCommentUpdate" parameterType="java.lang.String">
ALTER TABLE ${dbTableName} COMMENT ${dbTableComment}
</update>
<insert id="databaseTableFieldCreate" parameterType="com.system.transfer.configure.TableStructureCreateInVo">
ALTER TABLE ${dbTableName} ADD ${dbFieldName} ${dbFieldType} DEFAULT ${dbFieldDefault} COMMENT ${dbFieldComment};
</insert>
<update id="databaseTableFieldUpdate" parameterType="com.system.transfer.configure.TableStructureCreateInVo">
ALTER TABLE ${dbTableName} CHANGE ${oldDbFileName} ${dbFieldName} ${dbFieldType} DEFAULT ${dbFieldDefault} COMMENT ${dbFieldComment};
</update>
<delete id="databaseTableFieldDelete" parameterType="com.system.transfer.configure.TableStructureCreateInVo">
ALTER TABLE ${dbTableName} DROP ${dbFieldName}
</delete>
</mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.system.dao.InitConnectParamMapper">
<select id="initConnectParam" resultType="com.system.transfer.configure.InitConnectParamOutVo">
SELECT
id, k3_cloud_url, dbid, uid, pwd, lang, third_party_url, duration, lic_cipher_text, create_time
FROM tb_init_connect_param WHERE id = 1
</select>
<update id="initConnectParamUpdate" parameterType="java.lang.String">
UPDATE tb_init_connect_param SET lic_cipher_text = #{data} WHERE id = 1
</update>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.system.dao.KingDeeCommonConfigMapper">
<select id="kingDeeCommonConfigList" parameterType="com.system.transfer.kingdee.KingDeeCommonConfigListInVo" resultType="com.system.transfer.kingdee.KingdeeCommonConfigListOutVoRecords">
SELECT
id, doc_type, s_form_id, `name`, flag, primary_key_field, mes_entry_name, entry_name, fathers_form_id, father_entry_name,
push_rule, is_in_transaction, is_auto_perform, kingdee_filed_detail, plug_in_url, custom_sql, create_time
FROM tb_kingdee_common_config
<where>
<if test="inVo.flag != null">
flag = #{inVo.flag}
</if>
<if test="inVo.name != null and inVo.name != ''">
AND `name` LIKE CONCAT("%", #{inVo.name}, "%")
</if>
</where>
</select>
<select id="kingDeeCommonConfigOne" parameterType="com.system.transfer.kingdee.KingDeeCommonConfigOneInVo" resultType="com.system.transfer.kingdee.KingdeeCommonConfigListOutVoRecords">
SELECT
id, doc_type, s_form_id, `name`, flag, primary_key_field, mes_entry_name, entry_name, fathers_form_id, father_entry_name,
push_rule, is_in_transaction, is_auto_perform, kingdee_filed_detail, plug_in_url, custom_sql
FROM tb_kingdee_common_config
<where>
<if test="docType != null and docType != ''">
doc_type = #{docType}
</if>
<if test="sFormId != null and sFormId != ''">
AND s_form_id = #{sFormId}
</if>
<if test="flag != null">
AND flag = #{flag}
</if>
</where>
</select>
<insert id="kingDeeCommonConfigCreate" parameterType="com.system.transfer.kingdee.KingdeeCommonConfigCreateInVo">
INSERT INTO tb_kingdee_common_config (
doc_type, s_form_id, `name`, flag, primary_key_field, mes_entry_name, entry_name, fathers_form_id, father_entry_name,
push_rule, is_in_transaction, is_auto_perform, kingdee_filed_detail, plug_in_url, custom_sql
) VALUES (
#{docType}, #{sFormId}, #{name}, #{flag}, #{primaryKeyField}, #{mesEntryName}, #{entryName}, #{fathersFormId}, #{fatherEntryName},
#{pushRule}, #{isInTransaction}, #{isAutoPerform}, #{kingdeeFiledDetail}, #{plugInUrl}, #{customSql}
)
</insert>
<update id="kingDeeCommonConfigUpdate" parameterType="com.system.transfer.kingdee.KingdeeCommonConfigUpdateInVo">
UPDATE tb_kingdee_common_config SET
doc_type = #{docType}, s_form_id = #{sFormId}, `name` = #{name}, flag = #{flag}, primary_key_field = #{primaryKeyField},
mes_entry_name = #{mesEntryName}, entry_name = #{entryName}, fathers_form_id = #{fathersFormId}, father_entry_name = #{fatherEntryName},
push_rule = #{pushRule}, is_in_transaction = #{isInTransaction}, is_auto_perform = #{isAutoPerform},
kingdee_filed_detail = #{kingdeeFiledDetail}, plug_in_url = #{plugInUrl}, custom_sql = #{customSql}
WHERE id = #{id} LIMIT 1
</update>
<select id="getKingDeeCommonConfigById" parameterType="java.lang.Integer" resultType="com.system.transfer.kingdee.KingdeeCommonConfigListOutVoRecords">
SELECT id, doc_type, s_form_id, `name`, flag FROM tb_kingdee_common_config WHERE id = #{id}
</select>
<delete id="kingDeeCommonConfigDelete" parameterType="com.system.transfer.kingdee.KingdeeCommonConfigDeleteInVo">
DELETE FROM tb_kingdee_common_config WHERE id = #{id}
</delete>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.system.dao.KingDeeLogMapper">
<select id="kingDeeLogList" parameterType="com.system.transfer.kingdee.KingDeeLogListInVo" resultType="com.system.transfer.kingdee.KingDeeLogListOutVoRecords">
SELECT
id, `name`, queue_id, request, flag, response, message, cost_time, create_time
FROM tb_kingdee_log
<where>
<if test="inVo.dateFrom != null and inVo.dateFrom != '' and inVo.dateTo != null and inVo.dateTo != ''">
create_time BETWEEN #{inVo.dateFrom} AND #{inVo.dateTo}
</if>
<if test="inVo.costTimeFrom != null">
AND cost_time <![CDATA[ >= ]]> #{inVo.costTimeFrom}
</if>
<if test="inVo.costTimeTo != null">
AND cost_time <![CDATA[ <= ]]> #{inVo.costTimeTo}
</if>
<if test="inVo.name != null and inVo.name != ''">
AND `name` LIKE CONCAT("%", #{inVo.name}, "%")
</if>
<if test="inVo.queueId != null and inVo.queueId != ''">
AND queue_id = #{inVo.queueId}
</if>
<if test="inVo.flag != null">
AND flag = #{inVo.flag}
</if>
</where>
ORDER BY id DESC, create_time DESC
</select>
<insert id="kingDeeLogCreate" parameterType="com.system.transfer.kingdee.KingDeeLogCreateInVo">
INSERT INTO tb_kingdee_log (
`name`, queue_id, request, flag, response, message, cost_time
) VALUES (
#{name}, #{queueId}, #{request}, #{flag}, #{response}, #{message}, #{costTime}
)
</insert>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.system.dao.ProductionOrderMapper">
<insert id="productionOrderCreate" parameterType="java.util.Map">
INSERT INTO tb_ims_log (
`name`, code, request, flag, response, message
) VALUES (
#{name}, #{code}, #{request}, #{flag}, #{response}, #{message}
)
</insert>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.system.dao.SynchronizationRecordsMapper">
<select id="synchronizationRecordsList" parameterType="com.system.transfer.kingdee.SynchronizationRecordsListInVo" resultType="com.system.transfer.kingdee.SynchronizationRecordsListOutVoRecords">
SELECT
id, fid, data_id, entry_id, s_form_id, queue_id, message, status, create_time
FROM tb_synchronization_record
<where>
<if test="inVo.fid != null and inVo.fid != ''">
fid = #{inVo.fid}
</if>
<if test="inVo.sFormId != null and inVo.sFormId != ''">
AND s_form_id = #{inVo.sFormId}
</if>
<if test="inVo.queueId != null and inVo.queueId != ''">
AND queue_id = #{inVo.queueId}
</if>
<if test="inVo.status != null">
AND status = #{inVo.status}
</if>
</where>
ORDER BY create_time DESC, id DESC
</select>
<select id="getSynchronizationRecordsListByStatus" parameterType="java.lang.Integer" resultType="com.system.transfer.kingdee.SynchronizationRecordsListOutVoRecords">
SELECT
id, fid, data_id, entry_id, s_form_id
FROM tb_synchronization_record WHERE status IN
<foreach collection="statusList" item="item" separator=", " open="(" close=")">
#{item}
</foreach>
ORDER BY create_time ASC, id ASC
</select>
<insert id="synchronizationRecordsTempCreate" parameterType="java.util.List">
INSERT INTO tb_synchronization_record_temp (fid, data_id, entry_id, s_form_id) VALUES
<foreach collection="tempList" item="item" separator=",">
(#{item.fid}, #{item.dataId}, #{item.entryId}, #{item.sFormId})
</foreach>
ON DUPLICATE KEY UPDATE
fid = VALUES (fid), data_id = VALUES (data_id), entry_id = VALUES (entry_id), s_form_id = VALUES (s_form_id)
</insert>
<select id="synchronizationRecordsTempList" resultType="java.util.Map">
SELECT id, fid, data_id AS dataId, entry_id AS entryId, s_form_id AS sFormId FROM tb_synchronization_record_temp
</select>
<insert id="synchronizationRecordsCreate" parameterType="java.util.List">
INSERT INTO tb_synchronization_record (fid, data_id, entry_id, s_form_id) VALUES
<foreach collection="tempList" item="item" separator=",">
(#{item.fid}, #{item.dataId}, #{item.entryId}, #{item.sFormId})
</foreach>
ON DUPLICATE KEY UPDATE
fid = VALUES (fid), data_id = VALUES (data_id), entry_id = VALUES (entry_id), s_form_id = VALUES (s_form_id)
</insert>
<delete id="synchronizationRecordsTempDelete" parameterType="java.util.List">
DELETE FROM tb_synchronization_record_temp WHERE id IN
<foreach collection="idList" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</delete>
<update id="synchronizationRecordsUpdateByIdList" parameterType="java.util.List">
UPDATE tb_synchronization_record SET
<foreach collection="idList" item="item" open="status= CASE id" close="END">
WHEN #{item} THEN 1
</foreach>
WHERE id IN
<foreach collection="idList" item="item" separator=", " open="(" close=")">
#{item}
</foreach>
</update>
<update id="synchronizationRecordsUpdate" parameterType="java.lang.Object">
UPDATE tb_synchronization_record SET queue_id = #{queueId}, message = #{message}, status = #{status} WHERE id = #{id} LIMIT 1
</update>
<delete id="synchronizationRecordsDelete" parameterType="com.system.transfer.kingdee.SynchronizationRecordsDeleteInVo">
DELETE FROM tb_synchronization_record WHERE id = #{id}
</delete>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.system.dao.ThirdPartyLogMapper">
<select id="thirdPartyLogList" parameterType="com.system.transfer.kingdee.ThirdPartyLogListInVo" resultType="com.system.transfer.kingdee.ThirdPartyLogListOutVoRecords">
SELECT
id, `name`, code, queue_id, request, flag, response, message, create_time
FROM tb_third_party_log
<where>
<if test="inVo.dateFrom != null and inVo.dateFrom != '' and inVo.dateTo != null and inVo.dateTo != ''">
create_time BETWEEN #{inVo.dateFrom} AND #{inVo.dateTo}
</if>
<if test="inVo.name != null and inVo.name != ''">
AND `name` LIKE CONCAT("%", #{inVo.name}, "%")
</if>
<if test="inVo.flag != null">
AND flag = #{inVo.flag}
</if>
<if test="inVo.queueId != null and inVo.queueId != ''">
AND queue_id = #{inVo.queueId}
</if>
</where>
ORDER BY id DESC, create_time DESC
</select>
<select id="getThirdPartyLogByQueueId" parameterType="java.lang.String" resultType="java.lang.Integer">
SELECT COUNT(*) FROM tb_third_party_log WHERE queue_id = #{queueId} LIMIT 1
</select>
<insert id="thirdPartyLogCreate" parameterType="com.system.transfer.kingdee.ThirdPartyLogCreateInVo" useGeneratedKeys="true" keyProperty="id">
INSERT INTO tb_third_party_log (
`name`, code, queue_id, request, flag, response, message
) VALUES (
#{name}, #{code}, #{queueId}, #{request}, #{flag}, #{response}, #{message}
)
</insert>
<update id="thirdPartyLogUpdate" parameterType="com.system.transfer.kingdee.ThirdPartyLogCreateInVo">
UPDATE tb_third_party_log SET flag = #{flag}, response = #{response}, message = #{message} WHERE id = #{id}
</update>
</mapper>
package com.system.exception;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 金蝶云连接异常
*
* @author Inori
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class KingDeeConnectException extends RuntimeException {
private String result;
public KingDeeConnectException(String message) {
super(message);
this.result = message;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
}
package com.system.kingdee;
import com.system.api.KingDeeApi;
import com.system.constants.KingDeeCommonSynConstants;
import com.system.utils.KingDeeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Inori
*/
@Component
public class KingDeeCommonGetKingDeeApi {
@Autowired
private KingDeeApi kingDeeApi;
public List<Map<String, Object>> getKingDeeData(String sFormId, List<Map<String, String>> fieldList, Map<String, String> where, String kingDeeLogName, String queueId) {
Map<String, String> key = KingDeeCommonSynConstants.purchaseKingDee(fieldList);
List<List<Object>> result = kingDeeApi.getKingDeeData(sFormId, key, where, kingDeeLogName, queueId);
return purchaseIms(result, fieldList);
}
/**
* 封装第三方字段
*/
private List<Map<String, Object>> purchaseIms(List<List<Object>> list, List<Map<String, String>> fieldList) {
List<Map<String, Object>> result = new ArrayList<>();
if (!CollectionUtils.isEmpty(list)) {
String errorName = "Errors";
if (!list.get(0).get(0).toString().contains(errorName)) {
Map<String, Object> map = new HashMap<>(fieldList.size());
List<Map<String, Object>> imsList = new ArrayList<>();
KingDeeCommonSynConstants.purchaseIms(list, fieldList, map, imsList);
map.put("children", imsList);
result.add(map);
} else {
//如果有错误信息则返回
String message = KingDeeUtil.getMessage(list.get(0).get(0));
Map<String, Object> resultMap = new HashMap<>(1);
resultMap.put("false", message);
result.add(resultMap);
}
}
return result;
}
}
package com.system.kingdee;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.system.api.KingDeeApi;
import com.system.utils.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*;
/**
* @author Inori
*/
@Component
public class KingDeeCommonPushKingDeeApi {
@Autowired
private KingDeeApi kingDeeApi;
public String kingDeeUpdateThirdData(List<Map<String, Object>> tempList, List<Map<String, String>> fieldList, Map<String, Object> data, String entryName, String kingDeeLogName, String queueId) {
data.put("Model", thirdPartyFieldToKingDee(tempList, fieldList, entryName));
return kingDeeApi.kingDeeDataPush(data, kingDeeLogName, queueId);
}
/**
* thirdPartyField字段转换成金蝶云待添加(其实都是下推后修改)字段
*/
public Map<String, Object> thirdPartyFieldToKingDee(List<Map<String, Object>> dataList, List<Map<String, String>> fieldList, String entryName) {
Map<String, Object> modelMap = new LinkedHashMap<>(2);
List<Map<String, Object>> list = new ArrayList<>();
for (Map<String, Object> map : dataList) {
Map<String, Object> entityMap = new LinkedHashMap<>(10);
for (Map<String, String> field : fieldList) {
if ("true".equals(field.get("isDetailField"))) {
this.populateThirdPartyData(entityMap, map, field);
if (map.containsKey("ERP_SIC")) {
entityMap.put("ERP_SIC", map.get("ERP_SIC"));
}
if (map.containsKey("MES_CODE")) {
entityMap.put("MES_CODE", map.get("MES_CODE"));
}
} else {
this.populateThirdPartyData(modelMap, map, field);
}
}
list.add(entityMap);
}
modelMap.put(entryName, list);
return modelMap;
}
private void populateThirdPartyData(Map<String, Object> temp, Map<String, Object> map, Map<String, String> field) {
String kingDeeField = field.get("kingdeeField");
String thirdPartyField = field.get("thirdPartyField");
String indexField = field.get("indexField");
if (!Constants.NULL.equals(String.valueOf(map.get(thirdPartyField)))) {
if (StringUtil.isNotBlank(indexField)) {
temp.put(kingDeeField, new HashMap<String, Object>(1) {{
put(indexField, map.get(thirdPartyField));
}});
} else {
temp.put(kingDeeField, map.get(thirdPartyField));
}
}
}
public String kingDeeUpdateBySql(String sql, String kingDeeLogName, String queueId) {
return kingDeeApi.kingDeeUpdateBySql(sql, kingDeeLogName, queueId);
}
public String sendPlugInUnit(String plugInUrl, String json) {
return kingDeeApi.sendPlugInUnit(plugInUrl, json, 1);
}
}
package com.system.kingdee;
import com.system.api.KingDeeApi;
import com.system.constants.KingDeeCommonSynConstants;
import com.system.dao.DatabaseTableMapper;
import com.system.utils.JsonUtil;
import com.system.utils.KingDeeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author Inori
*/
@Component
public class KingDeeCommonSynKingDeeApi {
@Autowired
private KingDeeApi kingDeeApi;
@Autowired
private DatabaseTableMapper databaseTableMapper;
/**
* 获取金蝶云数据
*/
public List<Map<String, Object>> synchronization(String sFormId, String mesEntryName, List<Map<String, String>> fieldList, Map<String, String> where, String kingDeeLogName, String queueId) {
Map<String, String> key = KingDeeCommonSynConstants.purchaseKingDee(fieldList);
List<List<Object>> result = kingDeeApi.synchronization(sFormId, key, where, kingDeeLogName, queueId);
this.synchronizationCreate(sFormId, result, fieldList, queueId);
return purchaseIms(mesEntryName, result, fieldList, queueId);
}
/**
* 封装第三方字段
*/
private List<Map<String, Object>> purchaseIms(String mesEntryName, List<List<Object>> list, List<Map<String, String>> fieldList, String queueId) {
List<Map<String, Object>> result = new ArrayList<>();
if (!CollectionUtils.isEmpty(list)) {
String errorName = "Errors";
if (!list.get(0).get(0).toString().contains(errorName)) {
Map<String, Object> map = new HashMap<>(fieldList.size());
List<Map<String, Object>> mesList = new ArrayList<>();
map.put("QUEUE_ID", queueId);
KingDeeCommonSynConstants.purchaseIms(list, fieldList, map, mesList);
if (!CollectionUtils.isEmpty(mesList)) {
map.put(mesEntryName, mesList);
}
result.add(map);
} else {
//如果有错误信息则返回
String message = KingDeeUtil.getMessage(list.get(0).get(0));
Map<String, Object> resultMap = new HashMap<>(1);
resultMap.put("false", message);
result.add(resultMap);
}
}
return result;
}
/**
* 数据库表数据创建
*/
private void synchronizationCreate(String sFormId, List<List<Object>> result, List<Map<String, String>> fieldList, String queueId) {
List<String> dbFieldList = fieldList.stream().map(m -> String.valueOf(m.get("thirdPartyField"))).collect(Collectors.toList());
dbFieldList.add("queue_id");
List<Map<String, Object>> dataList = new ArrayList<>();
if (!CollectionUtils.isEmpty(result)) {
String errorName = "Errors";
if (!result.get(0).get(0).toString().contains(errorName)) {
for (List<Object> objectList : result) {
Map<String, Object> map = new LinkedHashMap<>();
for (int i = 0; i < fieldList.size(); i++) {
map.put(fieldList.get(i).get("thirdPartyField"), objectList.get(i));
}
map.put("queue_id", queueId);
dataList.add(map);
}
try {
databaseTableMapper.databaseTableDataCreate(sFormId.toLowerCase(), dbFieldList, dataList);
} catch (Exception e) {
e.printStackTrace();
System.out.println("数据库表: " + sFormId.toLowerCase() + " 唯一标识: " + queueId + " 的数据创建失败");
}
}
}
}
/**
* SQL查询结果: 数据库表数据创建
*/
public void synchronizationSqlCreate(String sFormId, List<Object> result, List<Map<String, String>> fieldList, String queueId) {
List<String> dbFieldList = fieldList.stream().map(m -> String.valueOf(m.get("thirdPartyField"))).collect(Collectors.toList());
dbFieldList.add("queue_id");
List<Map<String, Object>> dataList = new ArrayList<>();
for (Object object : result) {
Map<String, Object> temp = JsonUtil.toMap(JsonUtil.toString(object), String.class, Object.class);
Map<String, Object> request = new LinkedHashMap<>();
for (Map<String, String> temp02Map : fieldList) {
request.put(temp02Map.get("thirdPartyField"), temp.get(temp02Map.get("kingdeeField")));
}
dataList.add(request);
}
try {
databaseTableMapper.databaseTableDataCreate(sFormId.toLowerCase(), dbFieldList, dataList);
} catch (Exception e) {
e.printStackTrace();
System.out.println("数据库表: " + sFormId.toLowerCase() + " 唯一标识: " + queueId + " 的数据创建失败");
}
}
public String sendThirdParty(String json) {
return kingDeeApi.sendThirdParty(json, 1);
}
public String sendPlugInUnit(String plugInUrl, String json) {
return kingDeeApi.sendPlugInUnit(plugInUrl, json, 1);
}
public String kingDeeSelectBySql(String sql, String kingDeeName, String queueId) {
return kingDeeApi.kingDeeSelectBySql(sql, kingDeeName, queueId);
}
}
package com.system.kingdee;
import com.system.api.KingDeeApi;
import com.system.utils.JsonUtil;
import com.system.utils.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.*;
/**
* @author Inori
*/
@Component
public class SynchronizationKingDeeApi {
private final static String S_FORM_ID = "LQKJ_IMSSync";
private Map<String, String> key = new LinkedHashMap<>();
@Autowired
private KingDeeApi kingDeeApi;
public SynchronizationKingDeeApi() {
/* 单据头实体主键 */
this.key.put("FID", "FID");
/* 同步记录数据内码 */
this.key.put("F_LQKJ_SyncDataId", "F_LQKJ_SyncDataId");
/* 同步记录数据分录内码 */
this.key.put("F_LQKJ_SyncDataEntryId", "F_LQKJ_SyncDataEntryId");
/* 同步记录表单 */
this.key.put("F_LQKJ_Syncbill", "F_LQKJ_Syncbill");
/* 同步 */
this.key.put("F_LQKJ_SyncCheck", "F_LQKJ_SyncCheck");
}
/**
* 查询同步为0的数据
*/
public List<Map<String, Object>> synchronization() {
//查询未同步数据
List<List<Object>> list = kingDeeApi.getKingDeeData(S_FORM_ID, key, new HashMap<String, String>(1) {{
put("F_LQKJ_SyncCheck", "0");
}}, "", "");
return purchaseTo(list);
}
/**
* 将查询到的数据封装成本地字段
*/
private List<Map<String, Object>> purchaseTo(List<List<Object>> tempList) {
List<Map<String, Object>> result = new ArrayList<>();
if (!CollectionUtils.isEmpty(tempList)) {
String errorName = "Errors";
if (!tempList.get(0).get(0).toString().contains(errorName)) {
for (List<Object> list : tempList) {
Map<String, Object> map = new HashMap<>(4);
map.put("fid", list.get(0));
map.put("dataId", list.get(1));
map.put("entryId", StringUtil.isNotBlank((String) list.get(2)) ? list.get(2) : null);
map.put("sFormId", list.get(3));
map.put("synchronization", list.get(4));
result.add(map);
}
}
}
return result;
}
public void batchAdd(List<Map<String, Object>> tempList) {
kingDeeApi.batchAdd(S_FORM_ID, JsonUtil.toString(tempList));
}
}
package com.system.model;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
/**
* @author Inori
*/
public class DelayedElement implements Delayed {
private long mills;
public DelayedElement(Integer min) {
this.mills = System.currentTimeMillis() / 1000 + (60 * min);
}
/**
* 当方法返回小于或等于0的数值时, 元素将会被消耗
*/
@Override
public long getDelay(TimeUnit unit) {
return mills - (System.currentTimeMillis() / 1000);
}
/**
* DelayQueue底层是优先队列,需要实现compareTo方法,
* 用于在入列的时候与容器中的数据进行比较,以便确定元素位置。
*/
@Override
public int compareTo(Delayed o) {
return (int) (mills - ((DelayedElement) o).getMills());
}
public long getMills() {
return mills;
}
public void setMills(long mills) {
this.mills = mills;
}
}
package com.system.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* 金蝶配置表
*
* @author Inori
*/
@TableName("tb_init_connect_param")
public class InitConnectParam {
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 金蝶地址
*/
private String k3CloudUrl;
/**
* 金蝶账套ID
*/
private String dbid;
/**
* 用户名
*/
private String uid;
/**
* 密码
*/
private String pwd;
/**
* 端口
*/
private int lang;
/**
* 是否提交审核
*/
private boolean isAutoSubmit;
/**
* 第三方路径
*/
private String thirdPartyUrl;
/**
* 定时任务时长/分钟
*/
private Integer duration;
/**
* Lic密文
*/
private String licCipherText;
/**
* 创建时间
*/
private String createTime;
/**
* 更新时间
*/
private String updateTime;
public InitConnectParam() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getK3CloudUrl() {
return k3CloudUrl;
}
public void setK3CloudUrl(String k3CloudUrl) {
this.k3CloudUrl = k3CloudUrl;
}
public String getDbid() {
return dbid;
}
public void setDbid(String dbid) {
this.dbid = dbid;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public int getLang() {
return lang;
}
public void setLang(int lang) {
this.lang = lang;
}
public String getThirdPartyUrl() {
return thirdPartyUrl;
}
public void setThirdPartyUrl(String thirdPartyUrl) {
this.thirdPartyUrl = thirdPartyUrl;
}
public Integer getDuration() {
return duration;
}
public void setDuration(Integer duration) {
this.duration = duration;
}
public String getLicCipherText() {
return licCipherText;
}
public void setLicCipherText(String licCipherText) {
this.licCipherText = licCipherText;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
}
package com.system.quartz.job;
import com.system.serivce.ISynchronizationService;
import org.apache.commons.lang.time.DateFormatUtils;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
......@@ -15,10 +13,6 @@ import java.util.Date;
@Component
public class SynchronizationJob implements Job {
@Autowired
private ISynchronizationService synchronizationService;
@Override
public void execute(JobExecutionContext jobExecutionContext) {
System.out.println("开启自动同步定时任务,开始时间: " + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
......@@ -28,8 +22,6 @@ public class SynchronizationJob implements Job {
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronizationService.synchronization();
}
......
package com.system.scheduler;
import com.system.api.KingDeeApi;
import com.system.api.KingDeeK3CloudApi;
import com.system.model.InitConnectParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
......@@ -17,33 +11,8 @@ import org.springframework.scheduling.annotation.Scheduled;
@EnableScheduling
public class KingDeeLoginScheduler {
private static final Logger log = LoggerFactory.getLogger(KingDeeLoginScheduler.class);
@Autowired
private KingDeeApi kingDeeApi;
@Scheduled(fixedRate = 1000 * 60 * 10)
public void configureTasks() {
InitConnectParam initConnectParam = kingDeeApi.getInitConnectParam();
KingDeeK3CloudApi kingDeeK3CloudApi = new KingDeeK3CloudApi(initConnectParam.getK3CloudUrl());
Boolean flag;
try {
flag = kingDeeK3CloudApi.login(initConnectParam.getDbid(), initConnectParam.getUid(), initConnectParam.getPwd(), initConnectParam.getLang());
} catch (Exception e) {
flag = false;
log.info("金蝶云登录失败!");
}
if (flag) {
log.info("金蝶云登录成功!");
} else {
log.info("金蝶云登录失败!");
}
kingDeeApi.setFlag(flag);
kingDeeApi.setKingDeeK3CloudApi(kingDeeK3CloudApi);
}
......
package com.system.scheduler;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.system.api.KingDeeApi;
import com.system.constants.Constants;
import com.system.constants.RsaKeyConstant;
import com.system.transfer.response.RestResponse;
import com.system.utils.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
import java.net.InetAddress;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* @author Inori
*/
@Component
public class LicScheduler {
private ScheduledExecutorService scheduledExecutorService = new ScheduledThreadPoolExecutor(5, new ThreadFactoryBuilder().setNameFormat("lic-pool-%d").build());
private ScheduledFuture<?> scheduledFuture = null;
private boolean flag = false;
@Autowired
private KingDeeApi kingDeeApi;
@Autowired
private RsaKeyConstant rsaKeyConstant;
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
@PostConstruct
public void init() {
try {
String data = kingDeeApi.getInitConnectParam().getLicCipherText();
if (StringUtil.isNotBlank(data)) {
String result = RsaUtil.decryptByPublicKeyToLong(data, rsaKeyConstant.getPublicKey());
Map<String, String> map = JsonUtil.toMap(result, String.class, String.class);
if (!CollectionUtils.isEmpty(map) && map.containsKey(Constants.VERIFICATION_INTERVAL)) {
this.setLicScheduler(Integer.parseInt(map.get(Constants.VERIFICATION_INTERVAL)));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void setLicScheduler(Integer seconds) {
if (StringUtil.isNotNull(scheduledFuture)) {
scheduledFuture.cancel(false);
}
scheduledFuture = scheduledExecutorService.scheduleAtFixedRate(new ScanScheduledExecutor(this, rsaKeyConstant.getPublicKey()), 1, seconds, TimeUnit.SECONDS);
}
static class ScanScheduledExecutor implements Runnable {
private String publicKey;
private LicScheduler licScheduler;
public ScanScheduledExecutor(LicScheduler licScheduler, String publicKey) {
this.publicKey = publicKey;
this.licScheduler = licScheduler;
}
@Override
public void run() {
try {
Map<String, Object> request = new HashMap<>(1);
request.put("macAddress", LocalMacUtil.getLocalMac(InetAddress.getLocalHost()));
Map<String, Object> map = new HashMap<>(1);
map.put("data", RsaUtil.encryptByPublicKeyToLong(JsonUtil.toString(request), publicKey));
System.out.println(LocalDateTime.now());
String result = HttpClientUtil.sendPost("http://192.168.2.56:8090/lic/api/lic/online/verification", JsonUtil.toString(map));
Map<String, Object> temp = JsonUtil.toMap(result, String.class, Object.class);
if (!CollectionUtils.isEmpty(temp) && map.containsKey(Constants.CODE_NAME)) {
licScheduler.setFlag(Integer.parseInt(String.valueOf(temp.get(Constants.CODE_NAME))) == RestResponse.CODE_SUCCESS);
} else {
licScheduler.setFlag(false);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
package com.system.serivce;
import com.system.transfer.response.RestResponse;
import com.system.transfer.kingdee.*;
/**
* @author Inori
*/
public interface IKingDeeCommonConfigService {
public interface IDockingDistributionService {
/**
* 金蝶通用配置列表
* 对接分销会员创建
*
* @param inVo 条件
* @return 列表
*/
KingdeeCommonConfigListOutVo kingDeeCommonConfigList(KingDeeCommonConfigListInVo inVo);
/**
* 金蝶通用配置创建
*
* @param inVo 条件
* @return 结果
*/
RestResponse kingDeeCommonConfigCreate(KingdeeCommonConfigCreateInVo inVo);
RestResponse dockingDistributionMemberCreate();
/**
* 金蝶通用配置更新
* 对接订单交易信息
*
* @param inVo 条件
* @return 结果
*/
RestResponse kingDeeCommonConfigUpdate(KingdeeCommonConfigUpdateInVo inVo);
RestResponse dockingDistributionTransactionCreate();
/**
* 金蝶通用配置删除
* 查询分销会员下级列表
*
* @param inVo 条件
* @return 结果
*/
RestResponse kingDeeCommonConfigDelete(KingdeeCommonConfigDeleteInVo inVo);
RestResponse dockingDistributionMemberSubordinateList();
}
package com.system.serivce;
/**
* @author Inori
*/
public interface IDockingShoppingMallService {
/**
* 查询商城订单列表
*/
void shoppingMallOrderList();
/**
* 查询商城产品列表
*/
void shoppingMallProductList();
/**
* 查询商城会员列表
*/
void shoppingMallMemberList();
}
package com.system.serivce;
import com.system.transfer.kingdee.KingDeeDataListInVo;
import com.system.transfer.response.RestResponse;
/**
* @author Inori
*/
public interface IKingDeeCommonGetService {
/**
* 金蝶通用查询
*
* @param inVo 条件
* @return 列表
*/
RestResponse kingDeeDataList(KingDeeDataListInVo inVo);
}
package com.system.serivce;
import com.system.transfer.kingdee.KingDeeUpdateThirdDataInVo;
/**
* @author Inori
*/
public interface IKingDeeCommonPushService {
/**
* 金蝶下推
*
* @param inVo 条件
* @return 结果
*/
Object kingDeeUpdateThirdData(KingDeeUpdateThirdDataInVo inVo);
}
package com.system.serivce;
/**
* @author Inori
*/
public interface IKingDeeCommonSynService {
/**
* 金蝶同步
*
* @param id ID
* @param sFormId 金蝶标识
* @param fid 金蝶标识ID
*/
void synchronization(Integer id, String sFormId, Integer fid);
}
package com.system.serivce;
import com.system.transfer.kingdee.KingDeeLogListInVo;
import com.system.transfer.kingdee.KingDeeLogListOutVo;
/**
* @author Inori
*/
public interface IKingDeeLogService {
/**
* 金蝶日志列表
*
* @param inVo 条件
* @return 列表
*/
KingDeeLogListOutVo kingDeeLogList(KingDeeLogListInVo inVo);
}
package com.system.serivce;
import com.system.transfer.configure.LicInfoFileImportInVo;
import com.system.transfer.response.RestResponse;
/**
* @author Inori
*/
public interface ILicFileService {
/**
* 上传Lic文件
*
* @param inVo 条件
* @return 结果
*/
RestResponse licInfoFileImport(LicInfoFileImportInVo inVo);
}
package com.system.serivce;
import com.system.transfer.kingdee.SynchronizationRecordsDeleteInVo;
import com.system.transfer.kingdee.SynchronizationRecordsListInVo;
import com.system.transfer.kingdee.SynchronizationRecordsListOutVo;
/**
* @author Inori
*/
public interface ISynchronizationRecordsService {
/**
* 金蝶同步记录列表
*
* @param inVo 条件
* @return 列表
*/
SynchronizationRecordsListOutVo synchronizationRecordsList(SynchronizationRecordsListInVo inVo);
/**
* 金蝶同步记录删除
*
* @param inVo 条件
*/
void synchronizationRecordsDelete(SynchronizationRecordsDeleteInVo inVo);
}
package com.system.serivce;
import com.system.quartz.model.QuartzJob;
import com.system.transfer.configure.InitConnectParamCheckInVo;
import com.system.transfer.configure.InitConnectParamCreateInVo;
import com.system.transfer.configure.InitConnectParamOutVo;
import com.system.transfer.response.RestResponse;
/**
* @author Inori
*/
public interface ISynchronizationService {
/**
* 开启同步
*
* @return 结果
*/
RestResponse startSynchronization();
/**
* 关闭同步
*
* @return 结果
*/
RestResponse turnOffSynchronization();
/**
* 定时同步
*
* @return 结果
*/
QuartzJob synchronizationStatus();
/**
* 手动同步
*
* @return 结果
*/
RestResponse manualSynchronization();
/**
* 查询金蝶配置
*
* @return 金蝶配置
*/
InitConnectParamOutVo initConnectParam();
/**
* 保存金蝶配置
*
* @param inVo 条件
* @return 结果
*/
RestResponse initConnectParamCreate(InitConnectParamCreateInVo inVo);
/**
* 校验金蝶参数
*
* @param inVo 条件
* @return 结果
*/
RestResponse initConnectParamCheck(InitConnectParamCheckInVo inVo);
/**
* 金蝶同步
*/
void synchronization();
}
package com.system.serivce;
import com.system.transfer.kingdee.ThirdPartyLogListInVo;
import com.system.transfer.kingdee.ThirdPartyLogListOutVo;
/**
* @author Inori
*/
public interface IThirdPartyLogService {
/**
* 第三方日志列表
*
* @param inVo 条件
* @return 列表
*/
ThirdPartyLogListOutVo thirdPartyLogList(ThirdPartyLogListInVo inVo);
}
package com.system.serivce.impl;
import com.system.constants.Constants;
import com.system.serivce.IDockingDistributionService;
import com.system.transfer.response.RestResponse;
import com.system.utils.HttpClientUtil;
import com.system.utils.JsonUtil;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.PostConstruct;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author Inori
*/
@Service
public class DockingDistributionServiceImpl implements IDockingDistributionService {
private String secret;
@PostConstruct
public void init() {
String result = HttpClientUtil.sendGet("http://192.168.2.75:8080/api/v1/getSign");
Map<String, Object> map = JsonUtil.toMap(result, String.class, Object.class);
if (!CollectionUtils.isEmpty(map) && Constants.SUCCESS_CODE.equals(String.valueOf(map.get(Constants.SUCCESS_NAME)))) {
this.secret = String.valueOf(map.get("data"));
}
}
@Override
public RestResponse dockingDistributionMemberCreate() {
try {
Map<String, Object> data = new HashMap<>();
data.put("secret", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1MzExMTczMzk4MDcsInBheWxvYWQiOiJcInhpYW9qaWFuZ1wiIn0.rOY3JXrYpNMWwATmY7r3jm0Ec6SuhNPyrP2rGD43Isk");
data.put("disUserId", "5555");
data.put("disUserName", "54321");
data.put("disPlatformId", "dist_yiji");
data.put("disParentId", "");
data.put("disNote", "");
String result = HttpClientUtil.sendPost("http://192.168.2.75:8080/api/v1/memberAdd", JsonUtil.toString(data));
Map<String, Object> map = JsonUtil.toMap(result, String.class, Object.class);
if (CollectionUtils.isEmpty(map) && !Constants.SUCCESS_CODE.equals(String.valueOf(map.get(Constants.SUCCESS_NAME)))) {
return RestResponse.fail("新增会员失败");
}
return RestResponse.success();
} catch (IOException e) {
e.printStackTrace();
return RestResponse.fail("新增会员失败");
}
}
@Override
public RestResponse dockingDistributionTransactionCreate() {
try {
Map<String, Object> data = new HashMap<>();
data.put("secret", secret);
data.put("disSetUserId", "1111");
data.put("orderId", "5555");
data.put("disAmount", "12");
data.put("disNote", "");
String result = HttpClientUtil.sendPost("http://192.168.2.75:8080/api/v1/trade", JsonUtil.toString(data));
Map<String, Object> map = JsonUtil.toMap(result, String.class, Object.class);
if (CollectionUtils.isEmpty(map) && !Constants.SUCCESS_CODE.equals(String.valueOf(map.get(Constants.SUCCESS_NAME)))) {
return RestResponse.fail("新增交易失败");
}
return RestResponse.success();
} catch (IOException e) {
e.printStackTrace();
return RestResponse.fail("新增交易失败");
}
}
@Override
public RestResponse dockingDistributionMemberSubordinateList() {
try {
Map<String, Object> data = new HashMap<>();
data.put("secret", secret);
data.put("memberId", "1111");
String result = HttpClientUtil.sendPost("http://192.168.2.75:8080/api/v1/subordinate", JsonUtil.toString(data));
List<Map<String, Object>> recordsList = new ArrayList<>();
Map<String, Object> map = JsonUtil.toMap(result, String.class, Object.class);
if (!CollectionUtils.isEmpty(map) && Constants.SUCCESS_CODE.equals(String.valueOf(map.get(Constants.SUCCESS_NAME)))) {
List<Object> objectList = JsonUtil.toList(JsonUtil.toString(map.get("data")), Object.class);
List<Map<String, Object>> tempList = objectList.stream().map(m -> JsonUtil.toMap(JsonUtil.toString(m), String.class, Object.class)).collect(Collectors.toList());
List<Map<String, Object>> temp01List = tempList.stream().filter(m -> data.get("memberId").equals(m.get("parentId"))).collect(Collectors.toList());
for (Map<String, Object> temp : temp01List) {
List<Map<String, Object>> temp02List = tempList.stream().filter(m -> temp.get("memberId").equals(m.get("parentId"))).collect(Collectors.toList());
recordsList.add(temp);
recordsList.addAll(temp02List);
}
}
return RestResponse.success(recordsList);
} catch (IOException e) {
e.printStackTrace();
return RestResponse.fail("查询会员下级失败");
}
}
}
package com.system.serivce.impl;
import com.system.serivce.IDockingShoppingMallService;
import com.system.utils.HttpClientUtil;
import com.system.utils.JsonUtil;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Inori
*/
@Service
public class DockingShoppingMallServiceImpl implements IDockingShoppingMallService {
@Override
public void shoppingMallOrderList() {
Map<String, Object> data = new HashMap<>(2);
data.put("startTime", "2019-01-01+00:00:00");
data.put("endTime", "2022-10-12+23:59:59");
StringBuilder param = new StringBuilder();
for (Map.Entry<String, Object> entry : data.entrySet()) {
param.append("&").append(entry.getKey()).append("=").append(entry.getValue());
}
String result = HttpClientUtil.sendGet("http://192.168.2.212:81/apis/order/order/page?current=1&size=100" + param.toString());
System.out.println(result);
}
@Override
public void shoppingMallProductList() {
Map<String, Object> data = new HashMap<>(2);
data.put("startTime", "2019-01-01+00:00:00");
data.put("endTime", "2022-10-12+23:59:59");
StringBuilder param = new StringBuilder();
for (Map.Entry<String, Object> entry : data.entrySet()) {
param.append("&").append(entry.getKey()).append("=").append(entry.getValue());
}
String result = HttpClientUtil.sendGet("http://192.168.2.212:81/apis/prod/prod/page?current=1&size=100" + param.toString());
System.out.println(result);
}
@Override
public void shoppingMallMemberList() {
Map<String, Object> data = new HashMap<>(2);
data.put("startTime", "2019-01-01+00:00:00");
data.put("endTime", "2022-10-12+23:59:59");
StringBuilder param = new StringBuilder();
for (Map.Entry<String, Object> entry : data.entrySet()) {
param.append("&").append(entry.getKey()).append("=").append(entry.getValue());
}
String result = HttpClientUtil.sendGet("http://192.168.2.212:81/apis/admin/user/page?current=1&size=100" + param.toString());
System.out.println(result);
Map<String, Object> map = JsonUtil.toMap(result, String.class, Object.class);
if (!CollectionUtils.isEmpty(map) && "true".equals(String.valueOf(map.get("success")))) {
List<Object> objectList = JsonUtil.toList(JsonUtil.toString(map.get("records")), Object.class);
if (!CollectionUtils.isEmpty(objectList)) {
for (Object o : objectList) {
Map<String, Object> temp = JsonUtil.toMap(JsonUtil.toString(o), String.class, Object.class);
temp.get("userId");
temp.get("nickName");
}
}
}
}
}
package com.system.serivce.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.system.constants.KingDeeCommonPushConstants;
import com.system.constants.KingDeeCommonSynConstants;
import com.system.dao.DatabaseTableMapper;
import com.system.dao.KingDeeCommonConfigMapper;
import com.system.serivce.IKingDeeCommonConfigService;
import com.system.transfer.configure.TableStructureCreateInVo;
import com.system.transfer.kingdee.*;
import com.system.transfer.response.RestResponse;
import com.system.utils.StringUtil;
import com.system.utils.TableStructureUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @author Inori
*/
@Service
public class KingDeeCommonConfigServiceImpl implements IKingDeeCommonConfigService {
@Autowired
private KingDeeCommonConfigMapper kingDeeCommonConfigMapper;
@Autowired
private KingDeeCommonPushConstants kingDeeCommonPushConstants;
@Autowired
private KingDeeCommonSynConstants kingDeeCommonSynConstants;
@Autowired
private DatabaseTableMapper databaseTableMapper;
@Override
public KingdeeCommonConfigListOutVo kingDeeCommonConfigList(KingDeeCommonConfigListInVo inVo) {
Page<KingdeeCommonConfigListOutVoRecords> page = new Page<>(inVo.getPageNo(), inVo.getPageSize());
List<KingdeeCommonConfigListOutVoRecords> recordsList = kingDeeCommonConfigMapper.kingDeeCommonConfigList(page, inVo);
KingdeeCommonConfigListOutVo outVo = new KingdeeCommonConfigListOutVo();
outVo.setTotal((int) page.getTotal());
outVo.setRecords(recordsList);
return outVo;
}
@Transactional(rollbackFor = Exception.class)
@Override
public RestResponse kingDeeCommonConfigCreate(KingdeeCommonConfigCreateInVo inVo) {
KingDeeCommonConfigOneInVo oneInVo = new KingDeeCommonConfigOneInVo(inVo.getSFormId(), inVo.getDocType(), inVo.getFlag());
KingdeeCommonConfigListOutVoRecords records = kingDeeCommonConfigMapper.kingDeeCommonConfigOne(oneInVo);
if (StringUtil.isNotNull(records)) {
return RestResponse.fail("配置方向为: " + (inVo.getFlag() == 1 ? "MES->ERP" : "ERP->MES") + " 标识为: " + (inVo.getFlag() == 1 ? inVo.getDocType() : inVo.getSFormId()) + " 的配置已存在");
}
kingDeeCommonConfigMapper.kingDeeCommonConfigCreate(inVo);
if (inVo.getFlag() == 1) {
kingDeeCommonPushConstants.set(inVo.getDocType());
} else {
kingDeeCommonSynConstants.set(inVo.getSFormId());
databaseTableMapper.databaseTableCreate(new TableStructureCreateInVo(inVo.getSFormId().toLowerCase(), "'" + inVo.getName() + "'"), TableStructureUtil.getFieldList(inVo.getKingdeeFiledDetail()));
}
return RestResponse.success();
}
@Override
public RestResponse kingDeeCommonConfigUpdate(KingdeeCommonConfigUpdateInVo inVo) {
kingDeeCommonConfigMapper.kingDeeCommonConfigUpdate(inVo);
if (inVo.getFlag() == 1) {
kingDeeCommonPushConstants.set(inVo.getDocType());
} else {
kingDeeCommonSynConstants.set(inVo.getSFormId());
}
return RestResponse.success();
}
@Override
public RestResponse kingDeeCommonConfigDelete(KingdeeCommonConfigDeleteInVo inVo) {
KingdeeCommonConfigListOutVoRecords records = kingDeeCommonConfigMapper.getKingDeeCommonConfigById(inVo.getId());
kingDeeCommonConfigMapper.kingDeeCommonConfigDelete(inVo);
if (records.getFlag() == 1) {
kingDeeCommonPushConstants.del(records.getDocType());
} else {
kingDeeCommonSynConstants.del(records.getSFormId());
}
return RestResponse.success();
}
}
package com.system.serivce.impl;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.system.constants.KingDeeCommonSynConstants;
import com.system.kingdee.KingDeeCommonGetKingDeeApi;
import com.system.serivce.IKingDeeCommonGetService;
import com.system.transfer.kingdee.KingDeeDataListInVo;
import com.system.transfer.response.RestResponse;
import com.system.utils.JsonUtil;
import com.system.utils.ThirdPartyLogUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author Inori
*/
@Service
public class KingDeeCommonGetServiceImpl implements IKingDeeCommonGetService {
@Autowired
private KingDeeCommonSynConstants kingDeeCommonSynConstants;
@Autowired
private KingDeeCommonGetKingDeeApi kingDeeCommonGetKingDeeApi;
@Autowired
private ThirdPartyLogUtil thirdPartyLogUtil;
@Override
public RestResponse kingDeeDataList(KingDeeDataListInVo inVo) {
String queueId = inVo.getQueueId();
Map<String, String> map = kingDeeCommonSynConstants.getKingDee(inVo.getDocType());
if (CollectionUtils.isEmpty(map)) {
return RestResponse.fail("自定义查询失败! docType为: " + inVo.getDocType() + " 的表单ERP-MES标识不存在");
}
Integer id = thirdPartyLogUtil.thirdPartyLogCreate(map.get("name"), inVo.getDocType(), queueId, JsonUtil.toString(inVo.getData()), null, 0);
List<Object> tempList = JsonUtil.toList(map.get("kingdeeFiledDetail"), Object.class);
List<Map<String, String>> fieldList = tempList.stream().map(m -> JsonUtil.toMap(JsonUtil.toString(m), String.class, String.class)).collect(Collectors.toList());
Map<String, String> where = new HashMap<>(5);
if (!CollectionUtils.isEmpty(inVo.getData())) {
for (Map.Entry<String, Object> entry : inVo.getData().entrySet()) {
where.put(entry.getKey(), String.valueOf(entry.getValue()));
}
}
List<Map<String, Object>> result = kingDeeCommonGetKingDeeApi.getKingDeeData(map.get("sFormId"), fieldList, where, map.get("name"), queueId);
if (!CollectionUtils.isEmpty(result)) {
String temp = "false";
if (result.get(0).containsKey(temp)) {
thirdPartyLogUtil.toThirdPartyLogUpdate(id, JsonUtil.toString(result), String.valueOf(result.get(0).get(temp)));
return RestResponse.fail(String.valueOf(result.get(0).get(temp)));
}
}
thirdPartyLogUtil.toThirdPartyLogUpdate(id, JsonUtil.toString(result), "");
return RestResponse.success(result);
}
}
package com.system.serivce.impl;
import com.system.constants.KingDeeCommonPushConstants;
import com.system.constants.KingDeeConstants;
import com.system.kingdee.KingDeeCommonPushKingDeeApi;
import com.system.scheduler.KingDeeLoginScheduler;
import com.system.serivce.IKingDeeCommonPushService;
import com.system.transfer.kingdee.KingDeeUpdateThirdDataInVo;
import com.system.utils.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author Inori
*/
@Service
public class KingDeeCommonPushServiceImpl implements IKingDeeCommonPushService {
@Autowired
private KingDeeCommonPushKingDeeApi kingDeeCommonpushKingDeeApi;
@Autowired
private KingDeeCommonPushConstants kingDeeCommonPushConstants;
@Autowired
private KingDeeLoginScheduler kingDeeLoginScheduler;
@Autowired
private ThirdPartyLogUtil thirdPartyLogUtil;
@Override
public Object kingDeeUpdateThirdData(KingDeeUpdateThirdDataInVo inVo) {
//读取配置
Map<String, String> map = kingDeeCommonPushConstants.get(inVo.getDocType());
if (CollectionUtils.isEmpty(map)) {
return PushResultUtil.purchaseTo(KingDeeConstants.ERROR_CODE, "操作失败! 第三方标识为: " + inVo.getDocType() + " 的MES-ERP标识不存在", new ArrayList<>());
}
String sFormId = map.get("sFormId");
String entryName = map.get("entryName");
String fathersFormId = map.get("fathersFormId");
String fatherEntryName = map.get("fatherEntryName");
String pushRule = map.get("pushRule");
String isInTransaction = map.get("isInTransaction");
String isAutoPerform = map.get("isAutoPerform");
String kingDeeLogName = StringUtil.isNotBlank(map.get("kingDeeLogName")) ? map.get("kingDeeLogName") : "自定义下推金蝶日志";
String kingDeeFiledDetail = map.get("kingDeeFiledDetail");
String plugInUrl = map.get("plugInUrl");
String customSql = map.get("customSql");
//记录IMS日志
String queueId = String.valueOf(inVo.getData().get(0).get("QUEUE_ID"));
if (thirdPartyLogUtil.isExist(queueId) != 0) {
return PushResultUtil.purchaseTo(KingDeeConstants.ERROR_CODE, "操作失败! QUEUE_ID为: " + queueId + "的唯一标识已存在", new ArrayList<>());
}
Integer id = thirdPartyLogUtil.thirdPartyLogCreate(kingDeeLogName, inVo.getDocType(), queueId, JsonUtil.toString(inVo.getData()), null, 0);
//是否执行插件
if (StringUtil.isNotBlank(plugInUrl)) {
String plugInUrlResult = kingDeeCommonpushKingDeeApi.sendPlugInUnit(plugInUrl, JsonUtil.toString(inVo));
thirdPartyLogUtil.thirdPartyLogCreate(kingDeeLogName + "执行插件", inVo.getDocType(), queueId, JsonUtil.toString(inVo), plugInUrlResult, 1);
Map<String, Object> temp = JsonUtil.toMap(plugInUrlResult, String.class, Object.class);
if (temp.containsKey(KingDeeConstants.CODE_NAME) && !KingDeeConstants.ERROR_CODE.equals(temp.get(KingDeeConstants.CODE_NAME))) {
if (temp.containsKey(KingDeeConstants.DATA_NAME)) {
List<Object> objectList = JsonUtil.toList(JsonUtil.toString(temp.get("data")), Object.class);
List<Map<String, Object>> dataList = objectList.stream().map(m -> JsonUtil.toMap(JsonUtil.toString(m), String.class, Object.class)).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(dataList)) {
inVo.setData(dataList);
}
}
} else {
Object result = PushResultUtil.purchaseTo(KingDeeConstants.ERROR_CODE, "操作失败! docType为: " + inVo.getDocType() + " 的标识执行插件请求错误 " + temp.get("resultMsg"), new ArrayList<>());
thirdPartyLogUtil.thirdPartyLogUpdate(id, JsonUtil.toString(result));
return result;
}
}
//是否执行SQL
if (StringUtil.isNotBlank(customSql)) {
return this.implementSql(inVo, kingDeeLogName, queueId, customSql, id);
}
//保存
List<String> fatherEntryIdList = inVo.getData().stream().filter(m -> m.containsKey("ERP_SIC")).map(m -> String.valueOf(m.get("ERP_SIC"))).collect(Collectors.toList());
Map<String, Object> data = new LinkedHashMap<>();
this.purchase(data, "FormId", sFormId);
this.purchase(data, "ConvertRule", pushRule);
this.purchase(data, "SrcFormId", fathersFormId);
this.purchase(data, "SrcEntryKey", fatherEntryName);
this.purchase(data, "SrcIds", fatherEntryIdList);
this.purchase(data, "IsInTransaction", "1".equals(isInTransaction));
this.purchase(data, "isAutoSubmit", this.getIsAutoSubmit(isAutoPerform));
List<Object> objectList = JsonUtil.toList(kingDeeFiledDetail, Object.class);
List<Map<String, String>> fieldList = objectList.stream().map(m -> JsonUtil.toMap(JsonUtil.toString(m), String.class, String.class)).collect(Collectors.toList());
String addTwo = kingDeeCommonpushKingDeeApi.kingDeeUpdateThirdData(inVo.getData(), fieldList, data, entryName, kingDeeLogName, queueId);
Map<String, Object> temp = JsonUtil.toMap(addTwo, String.class, Object.class);
if (!CollectionUtils.isEmpty(temp) && KingDeeConstants.NOT_LOGGED_IN_CODE.equals(temp.get(KingDeeConstants.CODE_NAME))) {
kingDeeLoginScheduler.configureTasks();
addTwo = kingDeeCommonpushKingDeeApi.kingDeeUpdateThirdData(inVo.getData(), fieldList, data, entryName, kingDeeLogName + "重新登陆请求", queueId);
temp = JsonUtil.toMap(addTwo, String.class, Object.class);
}
Object result;
if (!CollectionUtils.isEmpty(temp) && !KingDeeConstants.SUCCESS_CODE.equals(temp.get(KingDeeConstants.CODE_NAME))) {
result = PushResultUtil.purchaseTo(KingDeeConstants.ERROR_CODE, "操作失败! " + StringUtil.replaceBlank((String) temp.get("resultMsg")), KingDeeUtil.getPushResultMap(temp));
} else if (CollectionUtils.isEmpty(temp)) {
result = PushResultUtil.purchaseTo(KingDeeConstants.ERROR_CODE, "操作失败! " + StringUtil.replaceBlank(addTwo), KingDeeUtil.getPushResultMap(temp));
} else {
result = PushResultUtil.purchaseTo(KingDeeConstants.SUCCESS_CODE, "", KingDeeUtil.getPushResultMap(temp));
}
thirdPartyLogUtil.thirdPartyLogUpdate(id, JsonUtil.toString(result));
return result;
}
private Object implementSql(KingDeeUpdateThirdDataInVo inVo, String kingDeeLogName, String queueId, String customSql, Integer id) {
String kingDeeSql = "";
for (Map<String, Object> temp : inVo.getData()) {
for (Map.Entry<String, Object> entry : temp.entrySet()) {
if (customSql.contains("@" + entry.getKey())) {
kingDeeSql = customSql.replaceAll("@" + entry.getKey(), String.valueOf(entry.getValue()));
}
}
}
if (StringUtil.isBlank(kingDeeSql)) {
kingDeeSql = customSql;
}
//DES加密
kingDeeSql = DesHelperUtil.encrypt(kingDeeSql, StandardCharsets.UTF_8, "MES&&DES");
String result = kingDeeCommonpushKingDeeApi.kingDeeUpdateBySql(kingDeeSql, kingDeeLogName + "执行SQL", queueId);
Map<String, Object> map = JsonUtil.toMap(result, String.class, Object.class);
if (map.containsKey(KingDeeConstants.CODE_NAME) && !KingDeeConstants.ERROR_CODE.equals(map.get(KingDeeConstants.CODE_NAME))) {
Object object = PushResultUtil.purchaseTo(KingDeeConstants.SUCCESS_CODE, "SQL执行成功", new ArrayList<>());
thirdPartyLogUtil.thirdPartyLogUpdate(id, JsonUtil.toString(object));
return object;
} else {
String message = "";
if (map.containsKey(KingDeeConstants.MSG_NAME)) {
message = StringUtil.replaceBlank(String.valueOf(map.get(KingDeeConstants.MSG_NAME)));
}
Object object = PushResultUtil.purchaseTo(KingDeeConstants.ERROR_CODE, "SQL执行失败 " + message, new ArrayList<>());
thirdPartyLogUtil.thirdPartyLogUpdate(id, JsonUtil.toString(object));
return object;
}
}
private void purchase(Map<String, Object> data, String key, Object value) {
if (value instanceof ArrayList) {
if (!CollectionUtils.isEmpty(JsonUtil.toList(JsonUtil.toString(value), Object.class))) {
data.put(key, value);
}
} else {
if (StringUtil.isNotBlank(String.valueOf(value))) {
data.put(key, value);
}
}
}
private String getIsAutoSubmit(String isAutoPerform) {
String isAutoSubmit = "";
if ("0".equals(isAutoPerform)) {
isAutoSubmit = "draft";
} else if ("1".equals(isAutoPerform)) {
isAutoSubmit = "save";
} else if ("2".equals(isAutoPerform)) {
isAutoSubmit = "submit";
} else if ("3".equals(isAutoPerform)) {
isAutoSubmit = "auto";
}
return isAutoSubmit;
}
}
package com.system.serivce.impl;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.system.constants.KingDeeCommonSynConstants;
import com.system.constants.KingDeeConstants;
import com.system.dao.SynchronizationRecordsMapper;
import com.system.kingdee.KingDeeCommonSynKingDeeApi;
import com.system.serivce.IKingDeeCommonSynService;
import com.system.utils.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author Inori
*/
@Service
public class KingDeeCommonSynServiceImpl implements IKingDeeCommonSynService {
@Autowired
private KingDeeCommonSynConstants kingDeeCommonSynConstants;
@Autowired
private KingDeeCommonSynKingDeeApi kingDeeCommonSynKingDeeApi;
@Autowired
private SynchronizationRecordsMapper synchronizationRecordsMapper;
@Autowired
private KingDeeLogUtil kingDeeLogUtil;
@Autowired
private ThirdPartyLogUtil thirdPartyLogUtil;
@Override
public void synchronization(Integer id, String sFormId, Integer dataId) {
String queueId = SnowFlakeIdUtil.generateId().toString();
//查询表单
Map<String, String> map = kingDeeCommonSynConstants.get(sFormId);
if (CollectionUtils.isEmpty(map)) {
kingDeeLogUtil.kingDeePushLogCreate("自定义同步失败", queueId, "sFormId为: " + sFormId + " 的表单不存在", null);
synchronizationRecordsMapper.synchronizationRecordsUpdate(id, queueId, "sFormId为: " + sFormId + " 的表单不存在", 2);
return;
}
List<Object> tempList = JsonUtil.toList(map.get("kingdeeFiledDetail"), Object.class);
List<Map<String, String>> fieldList = tempList.stream().map(m -> JsonUtil.toMap(JsonUtil.toString(m), String.class, String.class)).collect(Collectors.toList());
List<Map<String, Object>> list = new ArrayList<>();
String customSql = map.get("customSql");
List<Object> objectList = new ArrayList<>();
if (StringUtil.isNotBlank(customSql)) {
customSql = customSql.replaceAll("@" + map.get("primaryKeyField"), String.valueOf(dataId));
//DES加密
customSql = DesHelperUtil.encrypt(customSql, StandardCharsets.UTF_8, "MES&&DES");
String customSqlResult = kingDeeCommonSynKingDeeApi.kingDeeSelectBySql(customSql, map.get("name") + "执行SQL", queueId);
Map<String, Object> temp = JsonUtil.toMap(customSqlResult, String.class, Object.class);
if (!CollectionUtils.isEmpty(temp)) {
if (temp.containsKey(KingDeeConstants.CODE_NAME) && KingDeeConstants.SUCCESS_CODE.equals(temp.get(KingDeeConstants.CODE_NAME))) {
objectList = JsonUtil.toList(JsonUtil.toString(temp.get("data")), Object.class);
if (!CollectionUtils.isEmpty(objectList)) {
Map<String, Object> request = new LinkedHashMap<>();
KingDeeCommonSynConstants.purchaseSqlIms(objectList, fieldList, request);
list.add(request);
kingDeeCommonSynKingDeeApi.synchronizationSqlCreate(sFormId, objectList, fieldList, queueId);
}
} else {
synchronizationRecordsMapper.synchronizationRecordsUpdate(id, queueId, customSqlResult, 2);
return;
}
} else {
synchronizationRecordsMapper.synchronizationRecordsUpdate(id, queueId, customSqlResult, 2);
return;
}
} else {
//设置需要同步的主键
Map<String, String> where = new HashMap<>(1);
where.put(map.get("primaryKeyField"), dataId.toString());
list = kingDeeCommonSynKingDeeApi.synchronization(map.get("sFormId"), map.get("mesEntryName"), fieldList, where, map.get("name"), queueId);
if (list.get(0).containsKey(Constants.FALSE)) {
synchronizationRecordsMapper.synchronizationRecordsUpdate(id, queueId, list.get(0).get(Constants.FALSE).toString(), 2);
return;
}
}
String plugInUrl = map.get("plugInUrl");
if (StringUtil.isNotBlank(plugInUrl)) {
Map<String, Object> request = new HashMap<>(1);
if (!CollectionUtils.isEmpty(objectList)) {
request.put("data", objectList);
} else {
request.put("data", list);
}
String plugInUrlResult = kingDeeCommonSynKingDeeApi.sendPlugInUnit(plugInUrl, JsonUtil.toString(request));
thirdPartyLogUtil.thirdPartyLogCreate(map.get("name") + "执行插件", map.get("docType"), queueId, JsonUtil.toString(request), plugInUrlResult, 1);
List<Object> temp01List = JsonUtil.toList(plugInUrlResult, Object.class);
if (!CollectionUtils.isEmpty(temp01List)) {
list = temp01List.stream().map(m -> JsonUtil.toMap(JsonUtil.toString(m), String.class, Object.class)).collect(Collectors.toList());
}
}
//将数据包装成IMS格式
Map<String, Object> request = new LinkedHashMap<>(3);
request.put("docType", map.get("docType"));
request.put("updateType", "UPDATE");
request.put("data", list);
String json = JsonUtil.toString(request);
String result = kingDeeCommonSynKingDeeApi.sendThirdParty(json);
//记录IMS日志
thirdPartyLogUtil.sendThirdPartyLogCreate(map.get("name"), map.get("docType"), queueId, json, result, id);
Map<String, Object> temp = JsonUtil.toMap(result, String.class, Object.class);
if (!CollectionUtils.isEmpty(temp)) {
if (KingDeeConstants.OVERTIME_CODE.equals(map.get(KingDeeConstants.CODE_NAME))) {
Thread.currentThread().interrupt();
}
}
}
}
package com.system.serivce.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.system.dao.KingDeeLogMapper;
import com.system.serivce.IKingDeeLogService;
import com.system.transfer.kingdee.KingDeeLogListInVo;
import com.system.transfer.kingdee.KingDeeLogListOutVo;
import com.system.transfer.kingdee.KingDeeLogListOutVoRecords;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author Inori
*/
@Service
public class KingDeeLogServiceImpl implements IKingDeeLogService {
@Autowired
private KingDeeLogMapper kingDeeLogMapper;
@Override
public KingDeeLogListOutVo kingDeeLogList(KingDeeLogListInVo inVo) {
Page<KingDeeLogListOutVoRecords> page = new Page<>(inVo.getPageNo(), inVo.getPageSize());
List<KingDeeLogListOutVoRecords> recordsList = kingDeeLogMapper.kingDeeLogList(page, inVo);
KingDeeLogListOutVo outVo = new KingDeeLogListOutVo();
outVo.setTotal((int) page.getTotal());
outVo.setRecords(recordsList);
return outVo;
}
}
package com.system.serivce.impl;
import com.system.constants.Constants;
import com.system.constants.RsaKeyConstant;
import com.system.dao.InitConnectParamMapper;
import com.system.scheduler.LicScheduler;
import com.system.serivce.ILicFileService;
import com.system.transfer.configure.LicInfoFileImportInVo;
import com.system.transfer.response.RestResponse;
import com.system.utils.FileUtil;
import com.system.utils.JsonUtil;
import com.system.utils.RsaUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Map;
import java.util.Objects;
/**
* @author Inori
*/
@Service
public class LicFileServiceImpl implements ILicFileService {
@Autowired
private RsaKeyConstant rsaKeyConstant;
@Autowired
private InitConnectParamMapper initConnectParamMapper;
@Autowired
private LicScheduler licScheduler;
@Override
public RestResponse licInfoFileImport(LicInfoFileImportInVo inVo) {
if (!Objects.requireNonNull(inVo.getFile().getOriginalFilename()).equals(Constants.FILE_FORMAT)) {
return RestResponse.fail("Lic文件格式错误");
}
try {
String data = FileUtil.read(inVo.getFile().getInputStream());
String result = RsaUtil.decryptByPublicKey(data, rsaKeyConstant.getPublicKey());
Map<String, String> map = JsonUtil.toMap(result, String.class, String.class);
if (CollectionUtils.isEmpty(map) || !map.containsKey(Constants.EFFECTIVE_TIME)) {
return RestResponse.fail("Lic文件内容错误");
}
if (LocalDate.now().isAfter(LocalDate.parse(map.get(Constants.EFFECTIVE_TIME), DateTimeFormatter.ofPattern(Constants.TIME_FORMAT)))) {
return RestResponse.fail("Lic文件导入时间已过期");
}
initConnectParamMapper.initConnectParamUpdate(data);
licScheduler.setLicScheduler(Integer.parseInt(map.get(Constants.VERIFICATION_INTERVAL)));
} catch (Exception e) {
e.printStackTrace();
return RestResponse.fail("Lic文件保存失败");
}
return RestResponse.success();
}
}
package com.system.serivce.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.system.dao.SynchronizationRecordsMapper;
import com.system.serivce.ISynchronizationRecordsService;
import com.system.transfer.kingdee.SynchronizationRecordsDeleteInVo;
import com.system.transfer.kingdee.SynchronizationRecordsListInVo;
import com.system.transfer.kingdee.SynchronizationRecordsListOutVo;
import com.system.transfer.kingdee.SynchronizationRecordsListOutVoRecords;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author Inori
*/
@Service
public class SynchronizationRecordsServiceImpl implements ISynchronizationRecordsService {
@Autowired
private SynchronizationRecordsMapper synchronizationRecordsMapper;
@Override
public SynchronizationRecordsListOutVo synchronizationRecordsList(SynchronizationRecordsListInVo inVo) {
Page<SynchronizationRecordsListOutVoRecords> page = new Page<>(inVo.getPageNo(), inVo.getPageSize());
List<SynchronizationRecordsListOutVoRecords> recordsList = synchronizationRecordsMapper.synchronizationRecordsList(page, inVo);
SynchronizationRecordsListOutVo outVo = new SynchronizationRecordsListOutVo();
outVo.setTotal((int) page.getTotal());
outVo.setRecords(recordsList);
return outVo;
}
@Override
public void synchronizationRecordsDelete(SynchronizationRecordsDeleteInVo inVo) {
synchronizationRecordsMapper.synchronizationRecordsDelete(inVo);
}
}
package com.system.serivce.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.system.dao.ThirdPartyLogMapper;
import com.system.serivce.IThirdPartyLogService;
import com.system.transfer.kingdee.ThirdPartyLogListInVo;
import com.system.transfer.kingdee.ThirdPartyLogListOutVo;
import com.system.transfer.kingdee.ThirdPartyLogListOutVoRecords;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author Inori
*/
@Service
public class ThirdPartyLogServiceImpl implements IThirdPartyLogService {
@Autowired
private ThirdPartyLogMapper thirdPartyLogMapper;
@Override
public ThirdPartyLogListOutVo thirdPartyLogList(ThirdPartyLogListInVo inVo) {
Page<ThirdPartyLogListOutVoRecords> page = new Page<>(inVo.getPageNo(), inVo.getPageSize());
List<ThirdPartyLogListOutVoRecords> recordsList = thirdPartyLogMapper.thirdPartyLogList(page, inVo);
ThirdPartyLogListOutVo outVo = new ThirdPartyLogListOutVo();
outVo.setTotal((int) page.getTotal());
outVo.setRecords(recordsList);
return outVo;
}
}
package com.system.transfer.configure;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* @author Inori
*/
@Data
public class InitConnectParamCheckInVo {
/**
* 金蝶地址
*/
@NotBlank(message = "参数k3CloudUrl缺失")
private String k3CloudUrl;
/**
* 金蝶账套ID
*/
@NotBlank(message = "参数dbid缺失")
private String dbid;
/**
* 用户名
*/
@NotBlank(message = "参数uid缺失")
private String uid;
/**
* 密码
*/
@NotBlank(message = "参数pwd缺失")
private String pwd;
/**
* 端口
*/
@NotNull(message = "参数lang缺失")
private int lang;
}
package com.system.transfer.configure;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* @author Inori
*/
@Data
public class InitConnectParamCreateInVo {
/**
* 金蝶地址
*/
@NotBlank(message = "参数k3CloudUrl缺失")
private String k3CloudUrl;
/**
* 金蝶账套ID
*/
@NotBlank(message = "参数dbid缺失")
private String dbid;
/**
* 用户名
*/
@NotBlank(message = "参数uid缺失")
private String uid;
/**
* 密码
*/
@NotBlank(message = "参数pwd缺失")
private String pwd;
/**
* 端口
*/
@NotNull(message = "参数lang缺失")
private int lang;
/**
* 第三方路径
*/
@NotBlank(message = "参数thirdPartyUrl缺失")
private String thirdPartyUrl;
/**
* 分钟
*/
@NotNull(message = "参数duration缺失")
private Integer duration;
}
package com.system.transfer.configure;
import lombok.Data;
/**
* @author Inori
*/
@Data
public class InitConnectParamOutVo {
/**
* ID
*/
private Integer id;
/**
* 金蝶地址
*/
private String k3CloudUrl;
/**
* 金蝶账套ID
*/
private String dbid;
/**
* 用户名
*/
private String uid;
/**
* 密码
*/
private String pwd;
/**
* 端口
*/
private int lang;
/**
* 第三方路径
*/
private String thirdPartyUrl;
/**
* 定时任务时长/分钟
*/
private int duration;
/**
* 创建时间
*/
private String createTime;
}
package com.system.transfer.configure;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;
/**
* @author Inori
*/
@Data
public class LicInfoFileImportInVo {
/**
* 上传文件
*/
private MultipartFile file;
}
package com.system.transfer.configure;
import lombok.Data;
/**
* @author Inori
*/
@Data
public class TableStructureCreateInVo {
/**
* 数据库表名
*/
private String dbTableName;
/**
* 数据库表注释
*/
private String dbTableComment;
public TableStructureCreateInVo() {
}
public TableStructureCreateInVo(String dbTableName, String dbTableComment) {
this.dbTableName = dbTableName;
this.dbTableComment = dbTableComment;
}
}
package com.system.transfer.configure;
import lombok.Data;
/**
* @author Inori
*/
@Data
public class TableStructureCreateInVoRecords {
/**
* 数据库表字段名称
*/
private String dbFieldName;
/**
* 数据库表字段类型
*/
private String dbFieldType;
/**
* 数据库表字段默认值
*/
private String dbFieldDefault;
/**
* 数据库表字段注释
*/
private String dbFieldComment;
}
package com.system.transfer.kingdee;
import com.system.utils.StringUtil;
/**
* @author Inori
*/
public class KingDeeCommonConfigListInVo {
/**
* 日志名称
*/
private String name;
/**
* 配置方向(-1-ERP/MES 1-MES/ERP)
*/
private Integer flag;
/**
* 页码
*/
private Integer pageNo;
/**
* 每页数量
*/
private Integer pageSize;
private static final Integer DEFAULT_PAGE_NO = 1;
private static final Integer DEFAULT_PAGE_SIZE = 20;
public KingDeeCommonConfigListInVo() {
}
public KingDeeCommonConfigListInVo(Integer flag) {
this.flag = flag;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getFlag() {
return flag;
}
public void setFlag(Integer flag) {
this.flag = flag;
}
public Integer getPageNo() {
if (StringUtil.isNull(pageNo) || pageNo == -1) {
return DEFAULT_PAGE_NO;
}
return pageNo;
}
public void setPageNo(Integer pageNo) {
this.pageNo = pageNo;
}
public Integer getPageSize() {
if (StringUtil.isNull(pageSize) || pageSize == -1) {
return DEFAULT_PAGE_SIZE;
}
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
}
package com.system.transfer.kingdee;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author Inori
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class KingDeeCommonConfigOneInVo {
/**
* 金蝶标识
*/
private String sFormId;
/**
* 第三方标识
*/
private String docType;
/**
* 配置方向(-1-ERP/MES 1-MES/ERP)
*/
private Integer flag;
}
package com.system.transfer.kingdee;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Map;
/**
* @author Inori
*/
@Data
public class KingDeeDataListInVo {
/**
* 标识
*/
@NotBlank(message = "参数docType缺失")
private String docType;
/**
* 唯一标识
*/
private String queueId;
/**
* 查询参数
*/
@NotNull(message = "参数data缺失")
private Map<String, Object> data;
}
package com.system.transfer.kingdee;
import lombok.Data;
/**
* @author Inori
*/
@Data
public class KingDeeLogCreateInVo {
/**
* 业务名称
*/
private String name;
/**
* 唯一标识
*/
private String queueId;
/**
* 请求参数
*/
private String request;
/**
* 是否成功(0-失败,1-成功)
*/
private Integer flag;
/**
* 响应信息
*/
private String response;
/**
* 错误原因
*/
private String message;
/**
* 耗时
*/
private Integer costTime;
}
package com.system.transfer.kingdee;
import com.system.utils.StringUtil;
/**
* @author Inori
*/
public class KingDeeLogListInVo {
/**
* 日志名称
*/
private String name;
/**
* 唯一标识
*/
private String queueId;
/**
* 开始时间
*/
private String dateFrom;
/**
* 结束时间
*/
private String dateTo;
/**
* 开始耗时
*/
private Integer costTimeFrom;
/**
* 结束耗时
*/
private Integer costTimeTo;
/**
* 是否成功(0-失败,1-成功)
*/
private String flag;
/**
* 页码
*/
private Integer pageNo;
/**
* 每页数量
*/
private Integer pageSize;
private static final Integer DEFAULT_PAGE_NO = 1;
private static final Integer DEFAULT_PAGE_SIZE = 20;
public KingDeeLogListInVo() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getQueueId() {
return queueId;
}
public void setQueueId(String queueId) {
this.queueId = queueId;
}
public String getDateFrom() {
return dateFrom;
}
public void setDateFrom(String dateFrom) {
this.dateFrom = dateFrom;
}
public String getDateTo() {
return dateTo;
}
public void setDateTo(String dateTo) {
this.dateTo = dateTo;
}
public Integer getCostTimeFrom() {
return costTimeFrom;
}
public void setCostTimeFrom(Integer costTimeFrom) {
this.costTimeFrom = costTimeFrom;
}
public Integer getCostTimeTo() {
return costTimeTo;
}
public void setCostTimeTo(Integer costTimeTo) {
this.costTimeTo = costTimeTo;
}
public String getFlag() {
return flag;
}
public void setFlag(String flag) {
this.flag = flag;
}
public Integer getPageNo() {
if (StringUtil.isNull(pageNo) || pageNo == -1) {
return DEFAULT_PAGE_NO;
}
return pageNo;
}
public void setPageNo(Integer pageNo) {
this.pageNo = pageNo;
}
public Integer getPageSize() {
if (StringUtil.isNull(pageSize) || pageSize == -1) {
return DEFAULT_PAGE_SIZE;
}
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
}
package com.system.transfer.kingdee;
import lombok.Data;
import java.util.List;
/**
* @author Inori
*/
@Data
public class KingDeeLogListOutVo {
/**
* 总数
*/
private Integer total;
/**
* 记录
*/
private List<KingDeeLogListOutVoRecords> records;
}
\ No newline at end of file
package com.system.transfer.kingdee;
import lombok.Data;
/**
* @author Inori
*/
@Data
public class KingDeeLogListOutVoRecords {
/**
* ID
*/
private Integer id;
/**
* 日志名称
*/
private String name;
/**
* 唯一标识
*/
private String queueId;
/**
* 请求参数
*/
private String request;
/**
* 是否成功(0-失败,1-成功)
*/
private Integer flag;
/**
* 响应信息
*/
private String response;
/**
* 错误原因
*/
private String message;
/**
* 耗时(毫秒)
*/
private Integer costTime;
/**
* 创建时间
*/
private String createTime;
}
\ No newline at end of file
package com.system.transfer.kingdee;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
/**
* @author Inori
*/
@Data
public class KingDeeUpdateThirdDataInVo {
/**
* 标识
*/
@NotBlank(message = "参数docType缺失")
private String docType;
/**
* 数据
*/
@NotNull(message = "参数data缺失")
private List<Map<String, Object>> data;
}
package com.system.transfer.kingdee;
import lombok.Data;
/**
* @author Inori
*/
@Data
public class KingdeeCommonConfigCreateInVo {
/**
* 第三方标识
*/
private String docType;
/**
* 金蝶标识
*/
private String sFormId;
/**
* 日志名称
*/
private String name;
/**
* 配置方向(-1-ERP/MES 1-MES/ERP)
*/
private Integer flag;
/**
* 单据主键字段
*/
private String primaryKeyField;
/**
* MES分录标识
*/
private String mesEntryName;
/**
* 分录标识
*/
private String entryName;
/**
* 源单标识
*/
private String fathersFormId;
/**
* 源单分录标识
*/
private String fatherEntryName;
/**
* 下推规则
*/
private String pushRule;
/**
* 是否在事务中
*/
private Integer isInTransaction;
/**
* 执行步骤(0-暂存,1-保存,2-提交,3-审核)
*/
private Integer isAutoPerform;
/**
* 金蝶字段相关明细
*/
private String kingdeeFiledDetail;
/**
* 插件地址
*/
private String plugInUrl;
/**
* 自定义Sql
*/
private String customSql;
}
package com.system.transfer.kingdee;
import lombok.Data;
/**
* @author Inori
*/
@Data
public class KingdeeCommonConfigDeleteInVo {
/**
* ID
*/
private Integer id;
}
package com.system.transfer.kingdee;
import lombok.Data;
import java.util.List;
/**
* @author Inori
*/
@Data
public class KingdeeCommonConfigListOutVo {
/**
* 总数
*/
private Integer total;
/**
* 记录
*/
private List<KingdeeCommonConfigListOutVoRecords> records;
}
\ No newline at end of file
package com.system.transfer.kingdee;
import lombok.Data;
/**
* @author Inori
*/
@Data
public class KingdeeCommonConfigListOutVoRecords {
/**
* ID
*/
private Integer id;
/**
* 第三方标识
*/
private String docType;
/**
* 金蝶标识
*/
private String sFormId;
/**
* 日志名称
*/
private String name;
/**
* 配置方向(-1-ERP/MES 1-MES/ERP)
*/
private Integer flag;
/**
* 单据主键字段
*/
private String primaryKeyField;
/**
* MES分录标识
*/
private String mesEntryName;
/**
* 分录标识
*/
private String entryName;
/**
* 源单标识
*/
private String fathersFormId;
/**
* 源单分录标识
*/
private String fatherEntryName;
/**
* 下推规则
*/
private String pushRule;
/**
* 是否在事务中
*/
private Integer isInTransaction;
/**
* 执行步骤(0-暂存,1-保存,2-提交,3-审核)
*/
private Integer isAutoPerform;
/**
* 金蝶字段相关明细
*/
private String kingdeeFiledDetail;
/**
* 插件地址
*/
private String plugInUrl;
/**
* 自定义Sql
*/
private String customSql;
/**
* 创建时间
*/
private String createTime;
}
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论