Browse Source

亿道接口对接开发DEMO

zhouy 4 năm trước cách đây
mục cha
commit
fe9b1d4c90
30 tập tin đã thay đổi với 1186 bổ sung169 xóa
  1. 10 0
      pom.xml
  2. 27 0
      src/main/java/com/uas/eis/aspect/UasEventListener.java
  3. 28 0
      src/main/java/com/uas/eis/aspect/UasEventListenerAdapter.java
  4. 91 0
      src/main/java/com/uas/eis/aspect/UasEventListenerFactory.java
  5. 38 0
      src/main/java/com/uas/eis/aspect/UasEventListenerProcessor.java
  6. 36 0
      src/main/java/com/uas/eis/config/KingdeeConfig.java
  7. 0 23
      src/main/java/com/uas/eis/config/LingXingConfig.java
  8. 0 8
      src/main/java/com/uas/eis/core/config/DynamicDataSourceRegister.java
  9. 22 0
      src/main/java/com/uas/eis/core/enums/KingdeeFormId.java
  10. 94 0
      src/main/java/com/uas/eis/dto/DataCenter.java
  11. 120 0
      src/main/java/com/uas/eis/dto/Master.java
  12. 17 0
      src/main/java/com/uas/eis/dto/UasEvent.java
  13. 92 0
      src/main/java/com/uas/eis/entity/DataCenter.java
  14. 30 0
      src/main/java/com/uas/eis/entity/K3/AbstractAuditReq.java
  15. 42 0
      src/main/java/com/uas/eis/entity/K3/CommonSaveReq.java
  16. 13 0
      src/main/java/com/uas/eis/entity/K3/FNumberE.java
  17. 13 0
      src/main/java/com/uas/eis/entity/K3/ProdInoutPickingF.java
  18. 10 0
      src/main/java/com/uas/eis/entity/K3/ProdInoutPickingFSerialSub.java
  19. 25 0
      src/main/java/com/uas/eis/entity/K3/ProdInoutPickingSaveReqModel.java
  20. 120 0
      src/main/java/com/uas/eis/entity/Master.java
  21. 15 0
      src/main/java/com/uas/eis/entity/ProdIODetail.java
  22. 17 0
      src/main/java/com/uas/eis/entity/ProdInOut.java
  23. 254 0
      src/main/java/com/uas/eis/listener/UasProdInOutListener.java
  24. 38 0
      src/main/java/com/uas/eis/service/ProdInOutService.java
  25. 0 61
      src/main/java/com/uas/eis/serviceImpl/LingxingServiceImpl.java
  26. 0 56
      src/main/java/com/uas/eis/task/LingxingTask.java
  27. 13 13
      src/main/java/com/uas/eis/utils/SqlUtil.java
  28. 1 1
      src/main/java/com/uas/eis/utils/StringUtil.java
  29. 11 5
      src/main/resources/application.yml
  30. 9 2
      src/test/java/com/uas/eis/UasEisApplicationTests.java

+ 10 - 0
pom.xml

@@ -45,6 +45,11 @@
             <groupId>org.springframework.boot</groupId>  
             <artifactId>spring-boot-starter-data-jpa</artifactId>  
         </dependency>
+
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-redis</artifactId>
+		</dependency>
 	
 		<dependency>
 		    <groupId>log4j</groupId>
@@ -130,6 +135,11 @@
 			<scope>system</scope>
 			<systemPath>${project.basedir}/lib/ojdbc7.jar</systemPath>
 		</dependency>
+		<dependency>
+			<groupId>kingdee-sdk</groupId>
+			<artifactId>k3cloud-webapi-client</artifactId>
+			<version>1.8</version>
+		</dependency>
 	</dependencies>
 
 	<build>

+ 27 - 0
src/main/java/com/uas/eis/aspect/UasEventListener.java

@@ -0,0 +1,27 @@
+package com.uas.eis.aspect;
+
+import java.lang.annotation.*;
+
+/**
+ * @author yingp
+ * @date 2020/2/16
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+@Inherited
+public @interface UasEventListener {
+    /**
+     * uas单据标志
+     *
+     * @return
+     */
+    String caller();
+
+    /**
+     * uas操作类型
+     *
+     * @return
+     */
+    String[] operation();
+}

+ 28 - 0
src/main/java/com/uas/eis/aspect/UasEventListenerAdapter.java

@@ -0,0 +1,28 @@
+package com.uas.eis.aspect;
+
+import com.alibaba.fastjson.JSON;
+import com.uas.eis.dto.UasEvent;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.connection.Message;
+import org.springframework.data.redis.connection.MessageListener;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author yingp
+ * @date 2020/2/16
+ */
+@Component
+public class UasEventListenerAdapter implements MessageListener {
+    @Autowired
+    private RedisTemplate redisTemplate;
+    @Autowired
+    private UasEventListenerFactory eventListenerFactory;
+
+    @Override
+    public void onMessage(Message message, byte[] pattern) {
+        String value = (String) redisTemplate.getValueSerializer().deserialize(message.getBody());
+        UasEvent event = JSON.parseObject(value, UasEvent.class);
+        eventListenerFactory.invokeListeners(event);
+    }
+}

+ 91 - 0
src/main/java/com/uas/eis/aspect/UasEventListenerFactory.java

@@ -0,0 +1,91 @@
+package com.uas.eis.aspect;
+
+import com.uas.eis.core.config.SpObserver;
+import com.uas.eis.dto.DataCenter;
+import com.uas.eis.dto.UasEvent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author yingp
+ * @date 2020/2/16
+ */
+@Component
+public class UasEventListenerFactory {
+    private final Logger logger = LoggerFactory.getLogger(UasEventListenerFactory.class);
+    /**
+     * <caller, <operation, bean+method>>
+     */
+    private Map<String, Map<String, List<BeanMethod>>> beanMethodMap = new HashMap<>();
+
+    public void addListener(UasEventListener listener, Object bean, Method method) {
+        Map<String, List<BeanMethod>> map = beanMethodMap.get(listener.caller());
+        if (null == map) {
+            map = new HashMap<>(1);
+            beanMethodMap.put(listener.caller(), map);
+        }
+        if (null != listener.operation() && listener.operation().length > 0) {
+            for (String opera : listener.operation()) {
+                List<BeanMethod> beanMethodList = map.get(opera);
+                if (null == beanMethodList) {
+                    beanMethodList = new ArrayList<>(1);
+                    map.put(opera, beanMethodList);
+                }
+                beanMethodList.add(new BeanMethod(bean, method));
+            }
+        }
+    }
+
+    /**
+     * 查找配置的事件监听,并执行
+     *
+     * @param event
+     * @throws Exception
+     */
+    @Async
+    public void invokeListeners(UasEvent event) {
+        try {
+            DataCenter dataCenter = DataCenter.INSTANCE;
+            if (null == dataCenter) {
+                return;
+            }
+            SpObserver.putSp(event.getMaster());
+            Map<String, List<BeanMethod>> map = beanMethodMap.get(event.getCaller());
+            if (null != map) {
+                List<BeanMethod> beanMethodList = map.get(event.getOperation());
+                if (null != beanMethodList) {
+                    for (BeanMethod beanMethod : beanMethodList) {
+                        try {
+                            logger.debug("invoke on {}.{} {}", beanMethod.bean.getClass().getSimpleName(), beanMethod.method.getName(), event);
+                            beanMethod.method.invoke(beanMethod.bean, event);
+                        } catch (Exception e) {
+                            logger.error("invoke error on " + event, e);
+                        }
+                    }
+                }
+            }
+        } finally {
+            SpObserver.clear();
+            /*MasterHolder.clear();
+            DataSourceHolder.clear();*/
+        }
+    }
+
+    class BeanMethod {
+        private final Object bean;
+        private final Method method;
+
+        public BeanMethod(Object bean, Method method) {
+            this.bean = bean;
+            this.method = method;
+        }
+    }
+}

+ 38 - 0
src/main/java/com/uas/eis/aspect/UasEventListenerProcessor.java

@@ -0,0 +1,38 @@
+package com.uas.eis.aspect;
+
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.config.BeanPostProcessor;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ReflectionUtils;
+
+import java.lang.reflect.Method;
+
+/**
+ * @author yingp
+ * @date 2020/2/16
+ */
+@Component
+public class UasEventListenerProcessor implements BeanPostProcessor {
+    @Autowired
+    private UasEventListenerFactory eventListenerFactory;
+
+    @Override
+    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
+        return bean;
+    }
+
+    @Override
+    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
+        Method[] methods = ReflectionUtils.getAllDeclaredMethods(bean.getClass());
+        if (methods != null) {
+            for (Method method : methods) {
+                if (method.isAnnotationPresent(UasEventListener.class)) {
+                    UasEventListener listener = method.getAnnotation(UasEventListener.class);
+                    eventListenerFactory.addListener(listener, bean, method);
+                }
+            }
+        }
+        return bean;
+    }
+}

+ 36 - 0
src/main/java/com/uas/eis/config/KingdeeConfig.java

@@ -0,0 +1,36 @@
+package com.uas.eis.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author: zhouy
+ * @date: 2021/9/26 14:10
+ * @desc: 金蝶接口配置
+ */
+@Component
+@ConfigurationProperties(prefix = "extral.kingdee")
+@Data
+public class KingdeeConfig {
+    /**
+     * WebApi地址
+     * */
+    private String url;
+    /**
+     * 数据库Id
+     * */
+    private String dbId;
+    /**
+     * 用户Id
+     * */
+    private String uid;
+    /**
+     * 密码
+     * */
+    private String pwd;
+    /**
+     * 语言
+     * */
+    private Integer lang;
+}

+ 0 - 23
src/main/java/com/uas/eis/config/LingXingConfig.java

@@ -1,23 +0,0 @@
-package com.uas.eis.config;
-
-import lombok.Data;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-/**
- * @author: zhouy
- * @date: 2021/9/16 11:04
- * @desc: 外部资源配置
- */
-@Component
-@ConfigurationProperties(prefix = "extral.lingxing")
-@Data
-public class LingXingConfig {
-
-    private Map<String,String> apps;
-
-    private String apiUrl;
-}
-

+ 0 - 8
src/main/java/com/uas/eis/core/config/DynamicDataSourceRegister.java

@@ -102,14 +102,6 @@ public class DynamicDataSourceRegister  implements ImportBeanDefinitionRegistrar
             customDataSources.put(ma_user, ds);
             dataBinder(ds, env);
     	}
-        /*RelaxedPropertyResolver propertyResolver = new RelaxedPropertyResolver(env, "custom.datasource.");
-        String dsPrefixs = propertyResolver.getProperty("names");
-        for (String dsPrefix : dsPrefixs.split(",")) {// 多个数据源
-            Map<String, Object> dsMap = propertyResolver.getSubProperties(dsPrefix + ".");
-            DataSource ds = buildDataSource(dsMap);
-            customDataSources.put(dsPrefix, ds);
-            dataBinder(ds, env);
-        }*/
     }
    
     /**

+ 22 - 0
src/main/java/com/uas/eis/core/enums/KingdeeFormId.java

@@ -0,0 +1,22 @@
+package com.uas.eis.core.enums;
+
+/**
+ * @author: zhouy
+ * @date: 2021/9/26 15:14
+ * @desc: 金蝶业务类型
+ */
+public enum KingdeeFormId {
+
+    SAL_OUTSTOCK("SAL_OUTSTOCK"), //销售出库单
+    PICKMTRL("PRD_PickMtrl") //生产领料单
+    ;
+    private String formId;
+    private KingdeeFormId(String formId){
+        this.formId = formId;
+    }
+
+    public String getFormId(){
+        return formId;
+    }
+
+}

+ 94 - 0
src/main/java/com/uas/eis/dto/DataCenter.java

@@ -0,0 +1,94 @@
+package com.uas.eis.dto;
+
+
+
+import java.util.Objects;
+
+/**
+ * @author yingp
+ * @date 2020/1/15
+ */
+public class DataCenter {
+
+    private Integer id;
+    private String url;
+    private String username;
+    private String password;
+    private String driverClassName;
+    /**
+     * 当前对接程序,外网地址
+     */
+    private String outerUrl;
+
+    public static DataCenter INSTANCE;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getDriverClassName() {
+        return driverClassName;
+    }
+
+    public void setDriverClassName(String driverClassName) {
+        this.driverClassName = driverClassName;
+    }
+
+    public String getOuterUrl() {
+        return outerUrl;
+    }
+
+    public void setOuterUrl(String outerUrl) {
+        this.outerUrl = outerUrl;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        DataCenter that = (DataCenter) o;
+        return Objects.equals(id, that.id) &&
+                Objects.equals(url, that.url) &&
+                Objects.equals(username, that.username) &&
+                Objects.equals(password, that.password) &&
+                Objects.equals(driverClassName, that.driverClassName) &&
+                Objects.equals(outerUrl, that.outerUrl);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, url, username, password, driverClassName, outerUrl);
+    }
+}

+ 120 - 0
src/main/java/com/uas/eis/dto/Master.java

@@ -0,0 +1,120 @@
+package com.uas.eis.dto;
+
+import java.util.Objects;
+
+/**
+ * @author yingp
+ */
+public class Master  {
+
+    private int ma_id;
+    private String ma_user;// 数据库用户名
+    private String ms_pwd;// 数据库密码
+    private String ma_name;// 帐套名,与bean名一致
+    private String ma_function;
+    private Short ma_enable;// 是否可使用
+    private String ma_url;
+    private String ma_driver;
+
+    public int getMa_id() {
+        return ma_id;
+    }
+
+    public void setMa_id(int ma_id) {
+        this.ma_id = ma_id;
+    }
+
+    public String getMa_user() {
+        return ma_user;
+    }
+
+    public void setMa_user(String ma_user) {
+        this.ma_user = ma_user;
+    }
+
+    public String getMs_pwd() {
+        return ms_pwd;
+    }
+
+    public void setMs_pwd(String ms_pwd) {
+        this.ms_pwd = ms_pwd;
+    }
+
+    public String getMa_name() {
+        return ma_name;
+    }
+
+    public void setMa_name(String ma_name) {
+        this.ma_name = ma_name;
+    }
+
+    public String getMa_function() {
+        return ma_function;
+    }
+
+    public void setMa_function(String ma_function) {
+        this.ma_function = ma_function;
+    }
+
+    public Short getMa_enable() {
+        return ma_enable;
+    }
+
+    public void setMa_enable(Short ma_enable) {
+        this.ma_enable = ma_enable;
+    }
+
+    public String getMa_url() {
+        return ma_url;
+    }
+
+    public void setMa_url(String ma_url) {
+        this.ma_url = ma_url;
+    }
+
+    public String getMa_driver() {
+        return ma_driver;
+    }
+
+    public void setMa_driver(String ma_driver) {
+        this.ma_driver = ma_driver;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        Master master = (Master) o;
+        return ma_id == master.ma_id &&
+                Objects.equals(ma_user, master.ma_user) &&
+                Objects.equals(ms_pwd, master.ms_pwd) &&
+                Objects.equals(ma_name, master.ma_name) &&
+                Objects.equals(ma_function, master.ma_function) &&
+                Objects.equals(ma_enable, master.ma_enable) &&
+                Objects.equals(ma_url, master.ma_url) &&
+                Objects.equals(ma_driver, master.ma_driver);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(ma_id, ma_user, ms_pwd, ma_name, ma_function, ma_enable, ma_url, ma_driver);
+    }
+
+    @Override
+    public String toString() {
+        return "Master{" +
+                "ma_id=" + ma_id +
+                ", ma_user='" + ma_user + '\'' +
+                ", ms_pwd='" + ms_pwd + '\'' +
+                ", ma_name='" + ma_name + '\'' +
+                ", ma_function='" + ma_function + '\'' +
+                ", ma_enable=" + ma_enable +
+                ", ma_url='" + ma_url + '\'' +
+                ", ma_driver='" + ma_driver + '\'' +
+                '}';
+    }
+}

+ 17 - 0
src/main/java/com/uas/eis/dto/UasEvent.java

@@ -0,0 +1,17 @@
+package com.uas.eis.dto;
+
+import lombok.Data;
+
+/**
+ * @author: zhouy
+ * @date: 2021/9/26 10:28
+ * @desc: ERP事件
+ */
+@Data
+public class UasEvent {
+    private String operation;
+    private String caller;
+    private Object key;
+    private String master;
+    private Long timestamp;
+}

+ 92 - 0
src/main/java/com/uas/eis/entity/DataCenter.java

@@ -0,0 +1,92 @@
+package com.uas.eis.entity;
+
+import java.util.Objects;
+
+/**
+ * @author yingp
+ * @date 2020/1/15
+ */
+public class DataCenter {
+
+    private Integer id;
+    private String url;
+    private String username;
+    private String password;
+    private String driverClassName;
+    /**
+     * 当前对接程序,外网地址
+     */
+    private String outerUrl;
+
+    public static DataCenter INSTANCE;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getDriverClassName() {
+        return driverClassName;
+    }
+
+    public void setDriverClassName(String driverClassName) {
+        this.driverClassName = driverClassName;
+    }
+
+    public String getOuterUrl() {
+        return outerUrl;
+    }
+
+    public void setOuterUrl(String outerUrl) {
+        this.outerUrl = outerUrl;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        DataCenter that = (DataCenter) o;
+        return Objects.equals(id, that.id) &&
+                Objects.equals(url, that.url) &&
+                Objects.equals(username, that.username) &&
+                Objects.equals(password, that.password) &&
+                Objects.equals(driverClassName, that.driverClassName) &&
+                Objects.equals(outerUrl, that.outerUrl);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, url, username, password, driverClassName, outerUrl);
+    }
+}

+ 30 - 0
src/main/java/com/uas/eis/entity/K3/AbstractAuditReq.java

@@ -0,0 +1,30 @@
+package com.uas.eis.entity.K3;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author: zhouy
+ * @date: 2021/9/26 11:19
+ * @desc: 审核请求对象
+ */
+@Data
+public abstract class AbstractAuditReq<T> implements Serializable {
+    /**
+     * CreateOrgId:创建者组织内码,字符串类型(非必录)
+     * Numbers:单据编码集合,数组类型,格式:[No1,No2,...](使用编码时必录)
+     * Ids:单据内码集合,字符串类型,格式:"Id1,Id2,..."(使用内码时必录)
+     * InterationFlags:交互标志集合,字符串类型,分号分隔,格式:"flag1;flag2;..."(非必录) 例如(允许负库存标识:STK_InvCheckResult)
+     * NetworkCtrl:是否启用网控,布尔类型,默认false(非必录)
+     * IsVerifyProcInst:是否检验单据关联运行中的工作流实例,布尔类型,默认false(非必录)
+     * IgnoreInterationFlag:是否允许忽略交互,布尔类型,默认true(非必录)
+     * */
+    private String CreateOrgId;
+    private String[] Numbers;
+    private String Ids;
+    private String InterationFlags;
+    private boolean NetworkCtrl = false;
+    private boolean IsVerifyProcInst = false;
+    private boolean IgnoreInterationFlag = true;
+}

+ 42 - 0
src/main/java/com/uas/eis/entity/K3/CommonSaveReq.java

@@ -0,0 +1,42 @@
+package com.uas.eis.entity.K3;
+
+import com.alibaba.fastjson.JSONPObject;
+import lombok.Builder;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author: zhouy
+ * @date: 2021/9/26 11:19
+ * @desc: 保存请求对象
+ */
+@Data
+public  class CommonSaveReq<T> implements Serializable{
+    /**
+     * NeedUpDateFields:需要更新的字段,数组类型,格式:[key1,key2,...] (非必录)注(更新单据体字段得加上单据体key)
+     * NeedReturnFields:需返回结果的字段集合,数组类型,格式:[key,entitykey.key,...](非必录) 注(返回单据体字段格式:entitykey.key)
+     * IsDeleteEntry:是否删除已存在的分录,布尔类型,默认true(非必录)
+     * SubSystemId:表单所在的子系统内码,字符串类型(非必录)
+     * IsVerifyBaseDataField:是否验证所有的基础资料有效性,布尔类,默认false(非必录)
+     * IsEntryBatchFill:是否批量填充分录,默认true(非必录)
+     * ValidateFlag:是否验证标志,布尔类型,默认true(非必录)
+     * NumberSearch:是否用编码搜索基础资料,布尔类型,默认true(非必录)
+     * IsAutoAdjustField:是否自动调整JSON字段顺序,布尔类型,默认false(非必录)
+     * InterationFlags:交互标志集合,字符串类型,分号分隔,格式:"flag1;flag2;..."(非必录) 例如(允许负库存标识:STK_InvCheckResult)
+     * IgnoreInterationFlag:是否允许忽略交互,布尔类型,默认true(非必录)
+     * Model:表单数据包,JSON类型(必录)
+     * */
+    private String[] NeedUpDateFields;
+    private String[] NeedReturnFields;
+    private boolean IsDeleteEntry = true;
+    private String SubSystemId;
+    private boolean IsVerifyBaseDataField = false;
+    private boolean IsEntryBatchFill= true;
+    private boolean ValidateFlag = true;
+    private boolean NumberSearch = true;
+    private boolean IsAutoAdjustField = false;
+    private String InterationFlags;
+    private boolean IgnoreInterationFlag;
+    private  T Model;
+}

+ 13 - 0
src/main/java/com/uas/eis/entity/K3/FNumberE.java

@@ -0,0 +1,13 @@
+package com.uas.eis.entity.K3;
+
+/**
+ * @author: zhouy
+ * @date: 2021/9/26 18:48
+ * @desc:
+ */
+public class FNumberE {
+    private Object FNumber;
+    public FNumberE (Object FNumber) {
+        this.FNumber = FNumber;
+    }
+}

+ 13 - 0
src/main/java/com/uas/eis/entity/K3/ProdInoutPickingF.java

@@ -0,0 +1,13 @@
+package com.uas.eis.entity.K3;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ProdInoutPickingF{
+  private Integer FEntryID;
+  private FNumberE FParentMaterialId;
+  private String FMoBillNo;
+  List<ProdInoutPickingFSerialSub> FSerialSubEntity;
+}

+ 10 - 0
src/main/java/com/uas/eis/entity/K3/ProdInoutPickingFSerialSub.java

@@ -0,0 +1,10 @@
+package com.uas.eis.entity.K3;
+
+import lombok.Data;
+
+@Data
+ public class ProdInoutPickingFSerialSub {
+     private Integer FDetailID;
+     private String FSerialNo;
+     private String FSerialNote;
+  }

+ 25 - 0
src/main/java/com/uas/eis/entity/K3/ProdInoutPickingSaveReqModel.java

@@ -0,0 +1,25 @@
+package com.uas.eis.entity.K3;
+
+import lombok.Builder;
+import lombok.Data;
+import net.sf.json.JSONObject;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author: zhouy
+ * @date: 2021/9/26 16:08
+ * @desc: 生产领料单对象
+ */
+@Data
+@Builder
+public class ProdInoutPickingSaveReqModel{
+    private Integer FID;
+    private FNumberE FBillType;
+    private String FDate;
+    private FNumberE FStockOrgId;
+    private FNumberE FStockId0;
+    private List<ProdInoutPickingF> FEntity;
+}
+

+ 120 - 0
src/main/java/com/uas/eis/entity/Master.java

@@ -0,0 +1,120 @@
+package com.uas.eis.entity;
+
+import java.util.Objects;
+
+/**
+ * @author yingp
+ */
+public class Master  {
+
+    private int ma_id;
+    private String ma_user;// 数据库用户名
+    private String ms_pwd;// 数据库密码
+    private String ma_name;// 帐套名,与bean名一致
+    private String ma_function;
+    private Short ma_enable;// 是否可使用
+    private String ma_url;
+    private String ma_driver;
+
+    public int getMa_id() {
+        return ma_id;
+    }
+
+    public void setMa_id(int ma_id) {
+        this.ma_id = ma_id;
+    }
+
+    public String getMa_user() {
+        return ma_user;
+    }
+
+    public void setMa_user(String ma_user) {
+        this.ma_user = ma_user;
+    }
+
+    public String getMs_pwd() {
+        return ms_pwd;
+    }
+
+    public void setMs_pwd(String ms_pwd) {
+        this.ms_pwd = ms_pwd;
+    }
+
+    public String getMa_name() {
+        return ma_name;
+    }
+
+    public void setMa_name(String ma_name) {
+        this.ma_name = ma_name;
+    }
+
+    public String getMa_function() {
+        return ma_function;
+    }
+
+    public void setMa_function(String ma_function) {
+        this.ma_function = ma_function;
+    }
+
+    public Short getMa_enable() {
+        return ma_enable;
+    }
+
+    public void setMa_enable(Short ma_enable) {
+        this.ma_enable = ma_enable;
+    }
+
+    public String getMa_url() {
+        return ma_url;
+    }
+
+    public void setMa_url(String ma_url) {
+        this.ma_url = ma_url;
+    }
+
+    public String getMa_driver() {
+        return ma_driver;
+    }
+
+    public void setMa_driver(String ma_driver) {
+        this.ma_driver = ma_driver;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        Master master = (Master) o;
+        return ma_id == master.ma_id &&
+                Objects.equals(ma_user, master.ma_user) &&
+                Objects.equals(ms_pwd, master.ms_pwd) &&
+                Objects.equals(ma_name, master.ma_name) &&
+                Objects.equals(ma_function, master.ma_function) &&
+                Objects.equals(ma_enable, master.ma_enable) &&
+                Objects.equals(ma_url, master.ma_url) &&
+                Objects.equals(ma_driver, master.ma_driver);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(ma_id, ma_user, ms_pwd, ma_name, ma_function, ma_enable, ma_url, ma_driver);
+    }
+
+    @Override
+    public String toString() {
+        return "Master{" +
+                "ma_id=" + ma_id +
+                ", ma_user='" + ma_user + '\'' +
+                ", ms_pwd='" + ms_pwd + '\'' +
+                ", ma_name='" + ma_name + '\'' +
+                ", ma_function='" + ma_function + '\'' +
+                ", ma_enable=" + ma_enable +
+                ", ma_url='" + ma_url + '\'' +
+                ", ma_driver='" + ma_driver + '\'' +
+                '}';
+    }
+}

+ 15 - 0
src/main/java/com/uas/eis/entity/ProdIODetail.java

@@ -0,0 +1,15 @@
+package com.uas.eis.entity;
+
+import lombok.Data;
+
+/**
+ * @author: zhouy
+ * @date: 2021/9/26 11:02
+ * @desc: 出入库单明细表
+ */
+@Data
+public class ProdIODetail {
+    private Integer pd_id;
+    private Integer pd_piid;
+    private String pd_prodcode;
+}

+ 17 - 0
src/main/java/com/uas/eis/entity/ProdInOut.java

@@ -0,0 +1,17 @@
+package com.uas.eis.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author: zhouy
+ * @date: 2021/9/26 11:01
+ * @desc: 出入库单主表
+ */
+@Data
+public class ProdInOut {
+    private Integer pi_id;
+    private String pi_class;
+    List<ProdIODetail> detailList;
+}

+ 254 - 0
src/main/java/com/uas/eis/listener/UasProdInOutListener.java

@@ -0,0 +1,254 @@
+package com.uas.eis.listener;
+
+import com.uas.eis.aspect.UasEventListener;
+import com.uas.eis.config.KingdeeConfig;
+import com.uas.eis.core.enums.KingdeeFormId;
+import com.uas.eis.dto.UasEvent;
+import com.uas.eis.entity.K3.CommonSaveReq;
+import com.uas.eis.entity.K3.FNumberE;
+import com.uas.eis.entity.K3.ProdInoutPickingF;
+import com.uas.eis.entity.K3.ProdInoutPickingSaveReqModel;
+import com.uas.eis.entity.ProdInOut;
+import com.uas.eis.service.ProdInOutService;;
+import kingdee.bos.webapi.client.K3CloudApiClient;
+import net.sf.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author: zhouy
+ * @date: 2021/9/26 10:47
+ * @desc: 出入库单事件处理
+ */
+@Component
+public class UasProdInOutListener {
+
+    @Resource
+    private KingdeeConfig kingdeeConfig;
+
+    @Autowired
+    private ProdInOutService prodInOutService;
+    /**
+     * 生产领料单过账->推送金蝶生成对应单据
+     */
+    @UasEventListener(caller = "ProdInOut!Picking", operation = "POST")
+    public void onProdInOutPost_picking(UasEvent event) {
+        ProdInOut prodInout = prodInOutService.findById(Integer.parseInt(event.getKey().toString()));
+        /**封装请求数据*/
+        K3CloudApiClient client = new K3CloudApiClient(kingdeeConfig.getUrl());
+        try {
+            Boolean result = client.login(kingdeeConfig.getDbId(), kingdeeConfig.getUid(), kingdeeConfig.getPwd(), kingdeeConfig.getLang().intValue());
+          /*  String content = "{\"NeedUpDateFields\": []," +
+                    "    \"NeedReturnFields\": []," +
+                    "    \"IsDeleteEntry\": \"true\"," +
+                    "    \"SubSystemId\": \"\"," +
+                    "    \"IsVerifyBaseDataField\": \"false\"," +
+                    "    \"IsEntryBatchFill\": \"true\"," +
+                    "    \"ValidateFlag\": \"true\"," +
+                    "    \"NumberSearch\": \"true\"," +
+                    "    \"IsAutoAdjustField\": \"false\"," +
+                    "    \"InterationFlags\": \"\"," +
+                    "    \"IgnoreInterationFlag\": \"\"," +
+                    "    \"Model\": {" +
+                    "        \"FID\": 0," +
+                    "        \"FBillType\": {" +
+                    "            \"FNUMBER\": \"\"" +
+                    "        }," +
+                    "        \"FDate\": \"1900-01-01\"," +
+                    "        \"FStockOrgId\": {" +
+                    "            \"FNumber\": \"\"" +
+                    "        }," +
+                    "        \"FStockId0\": {" +
+                    "            \"FNumber\": \"\"" +
+                    "        }," +
+                    "        \"FPrdOrgId\": {" +
+                    "            \"FNumber\": \"\"" +
+                    "        }," +
+                    "        \"FWorkShopId\": {" +
+                    "            \"FNumber\": \"\"" +
+                    "        }," +
+                    "        \"FOwnerTypeId0\": \"\"," +
+                    "        \"FOwnerId0\": {" +
+                    "            \"FNumber\": \"\"" +
+                    "        }," +
+                    "        \"FPickerId\": {}," +
+                    "        \"FSTOCKERID\": {" +
+                    "            \"FNAME\": \"\"" +
+                    "        }," +
+                    "        \"FDescription\": \"\"," +
+                    "        \"FCurrId\": {" +
+                    "            \"FNumber\": \"\"" +
+                    "        }," +
+                    "        \"FIsCrossTrade\": \"false\"," +
+                    "        \"FVmiBusiness\": \"false\"," +
+                    "        \"FScanBox\": \"\"," +
+                    "        \"FSourceType\": \"\"," +
+                    "        \"FIsOwnerTInclOrg\": \"false\"," +
+                    "        \"F_EMD_Text\": \"\"," +
+                    "        \"F_EMD_Text1\": \"\"," +
+                    "        \"F_EMD_Text2\": \"\"," +
+                    "        \"F_EMD_PrintTimes\": 0," +
+                    "        \"F_EMD_Qty2\": 0," +
+                    "        \"F_EMD_Base\": {" +
+                    "            \"FNUMBER\": \"\"" +
+                    "        }," +
+                    "        \"FEntity\": [" +
+                    "            {" +
+                    "                \"FEntryID\": 0," +
+                    "                \"FParentMaterialId\": {" +
+                    "                    \"FNumber\": \"\"" +
+                    "                }," +
+                    "                \"FMoBillNo\": \"\"," +
+                    "                \"FBaseStockActualQty\": 0," +
+                    "                \"FFPMBillNo\": \"\"," +
+                    "                \"FConsome\": \"\"," +
+                    "                \"FOptQueue\": \"\"," +
+                    "                \"FReserveType\": \"\"," +
+                    "                \"FMaterialId\": {" +
+                    "                    \"FNumber\": \"\"" +
+                    "                }," +
+                    "                \"FUnitID\": {" +
+                    "                    \"FNumber\": \"\"" +
+                    "                }," +
+                    "                \"FAppQty\": 0," +
+                    "                \"FActualQty\": 0," +
+                    "                \"FEntryVmiBusiness\": \"false\"," +
+                    "                \"FStockId\": {" +
+                    "                    \"FNumber\": \"\"" +
+                    "                }," +
+                    "                \"FOptPlanBillNo\": \"\"," +
+                    "                \"FStockLocId\": {}," +
+                    "                \"FOptPlanBillId\": 0," +
+                    "                \"FWorkCenterId\": {" +
+                    "                    \"FNUMBER\": \"\"" +
+                    "                }," +
+                    "                \"FOptDetailId\": 0," +
+                    "                \"FLot\": {" +
+                    "                    \"FNumber\": \"\"" +
+                    "                }," +
+                    "                \"FProcessId\": {" +
+                    "                    \"FNumber\": \"\"" +
+                    "                }," +
+                    "                \"FCobyBomEntryID\": 0," +
+                    "                \"FBomId\": {" +
+                    "                    \"FNumber\": \"\"" +
+                    "                }," +
+                    "                \"FGroupRow\": \"\"," +
+                    "                \"FSrcPickEntryId\": 0," +
+                    "                \"FSrcBusinessType\": \"\"," +
+                    "                \"FStockStatusId\": {" +
+                    "                    \"FNumber\": \"\"" +
+                    "                }," +
+                    "                \"FQueryStockUpdate\": \"\"," +
+                    "                \"FProduceDate\": \"1900-01-01\"," +
+                    "                \"FSendRowId\": \"\"," +
+                    "                \"FEntrtyMemo\": \"\"," +
+                    "                \"FMtoNo\": \"\"," +
+                    "                \"FProjectNo\": \"\"," +
+                    "                \"FMoEntryId\": 0," +
+                    "                \"FPPBomEntryId\": 0," +
+                    "                \"FOperId\": 0," +
+                    "                \"FOwnerTypeId\": \"\"," +
+                    "                \"FStockUnitId\": {" +
+                    "                    \"FNumber\": \"\"" +
+                    "                }," +
+                    "                \"FStockAppQty\": 0," +
+                    "                \"FStockActualQty\": 0," +
+                    "                \"FStockAllowOverQty\": 0," +
+                    "                \"FSecUnitId\": {" +
+                    "                    \"FNumber\": \"\"" +
+                    "                }," +
+                    "                \"FSecActualQty\": 0," +
+                    "                \"FSecAllowOverQty\": 0," +
+                    "                \"FMoId\": 0," +
+                    "                \"FMoEntrySeq\": 0," +
+                    "                \"FAllowOverQty\": 0," +
+                    "                \"FPPBomBillNo\": \"\"," +
+                    "                \"FBaseUnitId\": {" +
+                    "                    \"FNumber\": \"\"" +
+                    "                }," +
+                    "                \"FBaseAppQty\": 0," +
+                    "                \"FBaseActualQty\": 0," +
+                    "                \"FBaseAllowOverQty\": 0," +
+                    "                \"FEntryWorkShopId\": {" +
+                    "                    \"FNumber\": \"\"" +
+                    "                }," +
+                    "                \"FKeeperTypeId\": \"\"," +
+                    "                \"FKeeperId\": {" +
+                    "                    \"FNumber\": \"\"" +
+                    "                }," +
+                    "                \"FOwnerId\": {" +
+                    "                    \"FNumber\": \"\"" +
+                    "                }," +
+                    "                \"FExpiryDate\": \"1900-01-01\"," +
+                    "                \"FSrcBillType\": \"\"," +
+                    "                \"FSrcBillNo\": \"\"," +
+                    "                \"FPrice\": 0," +
+                    "                \"FAmount\": 0," +
+                    "                \"FEntrySrcInterId\": 0," +
+                    "                \"FEntrySrcEnteryId\": 0," +
+                    "                \"FEntrySrcEntrySeq\": 0," +
+                    "                \"FParentOwnerTypeId\": \"\"," +
+                    "                \"FParentOwnerId\": {" +
+                    "                    \"FNumber\": \"\"" +
+                    "                }," +
+                    "                \"FSRCBIZBILLTYPE\": {" +
+                    "                    \"FNAME\": \"\"" +
+                    "                }," +
+                    "                \"FSRCBIZBILLNO\": \"\"," +
+                    "                \"FSRCBIZINTERID\": 0," +
+                    "                \"FSRCBIZENTRYID\": 0," +
+                    "                \"FSRCBIZENTRYSEQ\": 0," +
+                    "                \"FPickingStatus\": 0," +
+                    "                \"F_EMD_Qty\": 0," +
+                    "                \"F_EMD_Qty1\": 0," +
+                    "                \"F_EMD_Qty3\": 0," +
+                    "                \"F_EMD_Qty4\": 0," +
+                    "                \"F_EMD_Qty5\": 0," +
+                    "                \"FTransRetFormId\": \"\"," +
+                    "                \"FTransRetBillNo\": \"\"," +
+                    "                \"FTransRetId\": 0," +
+                    "                \"FTransRetEntryId\": 0," +
+                    "                \"FTransRetEntrySeq\": 0," +
+                    "                \"FAuxPropId\": {}," +
+                    "                \"FSerialSubEntity\": [" +
+                    "                    {" +
+                    "                        \"FDetailID\": 0," +
+                    "                        \"FSerialNo\": \"\"," +
+                    "                        \"FSerialId\": {" +
+                    "                            \"FNumber\": \"\"" +
+                    "                        }," +
+                    "                        \"FSerialNote\": \"\"" +
+                    "                    }" +
+                    "                ]" +
+                    "            }" +
+                    "        ]" +
+                    "    }";*/
+
+            System.out.println("start----"+KingdeeFormId.PICKMTRL.name());
+            List<ProdInoutPickingF> fList = new ArrayList<ProdInoutPickingF>();
+            ProdInoutPickingF  prodInoutPickingF= null;
+            for(int i = 1; i< 10 ; i++) {
+                prodInoutPickingF =  new ProdInoutPickingF();
+                prodInoutPickingF.setFEntryID(i);
+                fList.add(prodInoutPickingF);
+            }
+            ProdInoutPickingSaveReqModel reqModel = ProdInoutPickingSaveReqModel.builder().FBillType(
+                   new FNumberE(" ")
+            ).FDate("2021-08-09").FStockOrgId(new FNumberE("0")).FStockId0(new FNumberE("0")).FEntity(fList).
+                    build();
+            CommonSaveReq commonSaveReq = new CommonSaveReq<ProdInoutPickingSaveReqModel>();
+            commonSaveReq.setModel(reqModel);
+            System.out.println(JSONObject.fromObject(commonSaveReq).toString());
+            String Result = client.save(KingdeeFormId.PICKMTRL.getFormId(), JSONObject.fromObject(commonSaveReq).toString());
+            System.out.println(" success:" + Result);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+}

+ 38 - 0
src/main/java/com/uas/eis/service/ProdInOutService.java

@@ -0,0 +1,38 @@
+package com.uas.eis.service;
+
+import com.uas.eis.dao.BaseDao;
+import com.uas.eis.entity.ProdIODetail;
+import com.uas.eis.entity.ProdInOut;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.EmptyResultDataAccessException;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.stereotype.Service;
+import java.util.List;
+
+/**
+ * @author: zhouy
+ * @date: 2021/9/26 10:58
+ * @desc: 出入库单据业务
+ */
+@Service
+public class ProdInOutService{
+
+    @Autowired
+    private BaseDao baseDao;
+
+    public ProdInOut findById(Integer id) {
+        try {
+            ProdInOut prodInOut = baseDao.getJdbcTemplate().queryForObject("SELECT * FROM PRODINOUT WHERE PI_ID=?", new BeanPropertyRowMapper<ProdInOut>(ProdInOut.class), id);
+            List<ProdIODetail> prodIODetails = baseDao.getJdbcTemplate().query("SELECT * FROM PRODIODETAIL WHERE PD_PIID=? ORDER BY PD_PDNO ASC ", new BeanPropertyRowMapper<ProdIODetail>(ProdIODetail.class), prodInOut.getPi_id());
+            prodInOut.setDetailList(prodIODetails);
+            return prodInOut;
+        } catch (EmptyResultDataAccessException e) {
+            e.printStackTrace();
+            return null;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+}

+ 0 - 61
src/main/java/com/uas/eis/serviceImpl/LingxingServiceImpl.java

@@ -1,61 +0,0 @@
-package com.uas.eis.serviceImpl;
-
-import com.uas.eis.config.LingXingConfig;
-import com.uas.eis.sdk.entity.Result;
-import com.uas.eis.sdk.okhttp.AKRestClient;
-import com.uas.eis.sdk.resp.AccessTokenGetResp;
-import com.uas.eis.sdk.resp.SellerGetResp;
-import com.uas.eis.service.LingxingService;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author: zhouy
- * @date: 2021/9/16 16:51
- * @desc:
- */
-@Service
-public class LingxingServiceImpl implements LingxingService {
-    @Resource
-    private LingXingConfig lingXingConfig;
-
-
-    @Override
-    @Async("taskExecutor")
-    public void getSellerOrders(String appId) {
-        String appSecret = lingXingConfig.getApps().get(appId);
-        try {
-            /**
-             * 获取Token
-             * */
-            AccessTokenGetResp accessTokenGetResp = AKRestClient.builder().endpoint(lingXingConfig.getApiUrl()).build().getAccessToken(appId, appSecret);
-            System.out.println(accessTokenGetResp.getData());
-            /**
-             * 获取店铺信息
-             * */
-            SellerGetResp sellerGetResp = AKRestClient.builder().endpoint(lingXingConfig.getApiUrl()).build().getSellers(appId,
-                    String.valueOf(accessTokenGetResp.getData().get("access_token")) );
-            //待完善记录店铺信息
-
-
-            //订单信息
-
-            Map<String ,Object> requestParam = new HashMap<>();
-            requestParam.put("sid", 622);
-            requestParam.put("start_date", "2021-07-03");
-            requestParam.put("end_date", "2021-08-04");
-            //上次同步时间
-
-            Object o1 = AKRestClient.builder().endpoint(lingXingConfig.getApiUrl()).build().getSellerOrders(appId,
-                    String.valueOf(accessTokenGetResp.getData().get("access_token")), requestParam);
-
-
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-}

+ 0 - 56
src/main/java/com/uas/eis/task/LingxingTask.java

@@ -1,56 +0,0 @@
-package com.uas.eis.task;
-
-import com.uas.eis.config.LingXingConfig;
-import com.uas.eis.dao.BaseDao;
-import com.uas.eis.service.LingxingService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
-import java.util.concurrent.CountDownLatch;
-import java.util.stream.Collectors;
-
-/**
- * @author: zhouy
- * @date: 2021/9/16 9:11
- * @desc: 亚马逊对接
- */
-@Component
-public class LingxingTask {
-
-    private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
-    @Resource
-    private LingxingService lingxingService;
-
-    @Resource
-    private LingXingConfig lingXingConfig;
-
-    @Autowired
-    private BaseDao baseDao;
-    //定时注解 @cron
-    public void getSellerOrders(){
-        logger.info("同步领星订单-开始");
-        Date date = new Date();
-        Set<String> appSet =lingXingConfig.getApps().keySet();
-        if(appSet.size()>0){
-
-            final CountDownLatch countDownLatch = new CountDownLatch(appSet.size());
-            try {
-                appSet.stream().forEach(appId -> {
-                    lingxingService.getSellerOrders(appId);
-                });
-                countDownLatch.await();
-            } catch (InterruptedException e) {
-                e.printStackTrace();
-            }
-        }
-        logger.info("同步领星订单-结束:用时"+((System.currentTimeMillis()-date.getTime())/1000));
-    }
-
-}

+ 13 - 13
src/main/java/com/uas/eis/utils/SqlUtil.java

@@ -74,7 +74,7 @@ public class SqlUtil {
 				} else if (value.toString().equals("null")) {
 					sb2.append("null");
 				} else if (val.contains("%n")) {
-					sb2.append("'" + val.replaceAll("%n", "\n") + "'");
+					sb2.append("'" + val.replaceAll("%n", "") + "'");
 				} else if (val.contains("'")) {
 					sb2.append("'" + value.toString().replaceAll("'", "''") + "'");
 				} else {
@@ -121,7 +121,7 @@ public class SqlUtil {
 					} else if (value.toString().equals("null")) {
 						sb2.append("null");
 					} else if (val.contains("%n")) {
-						sb2.append("'" + val.replaceAll("%n", "\n") + "'");
+						sb2.append("'" + val.replaceAll("%n", "") + "'");
 					} else if (val.contains("'")) {
 						sb2.append("'" + value.toString().replaceAll("'", "''") + "'");
 					} else {
@@ -205,7 +205,7 @@ public class SqlUtil {
 				} else if (val.equals("null")) {
 					sb2.append("null");
 				} else if (val.contains("%n")) {
-					sb2.append("'" + val.replaceAll("%n", "\n") + "'");
+					sb2.append("'" + val.replaceAll("%n", "") + "'");
 				} else if (val.contains("'")) {
 					sb2.append("'" + val.replaceAll("'", "''") + "'");
 				} else {
@@ -253,7 +253,7 @@ public class SqlUtil {
 					if (val.contains("'")) {
 						val = val.replaceAll("'", "''");
 					} else if (val.contains("%n")) {
-						val = val.replaceAll("%n", "\n");
+						val = val.replaceAll("%n", "");
 					}
 					// 针对较长字段,比如clob类型,防止ORA-01704的简单处理:切割成多个字符串连接起来
 					if (val.length() > 2000) {
@@ -299,7 +299,7 @@ public class SqlUtil {
 				} else if (val.contains("'")) {
 					sb2.append("'" + value.toString().replaceAll("'", "''") + "'");
 				} else if (val.contains("%n")) {
-					sb2.append("'" + val.replaceAll("%n", "\n") + "'");
+					sb2.append("'" + val.replaceAll("%n", "") + "'");
 				} else {
 					sb2.append("'" + value + "'");
 				}
@@ -360,7 +360,7 @@ public class SqlUtil {
 					if (val.contains("'")) {
 						val = val.replaceAll("'", "''");
 					} else if (val.contains("%n")) {
-						val = val.replaceAll("%n", "\n");
+						val = val.replaceAll("%n", "");
 					}
 					// 针对较长字段,比如clob类型,防止ORA-01704的简单处理:切割成多个字符串连接起来
 					if (val.length() > 2000) {
@@ -408,7 +408,7 @@ public class SqlUtil {
 					if (val.contains("'")) {
 						val = val.replaceAll("'", "''");
 					} else if (val.contains("%n")) {
-						val = val.replaceAll("%n", "\n");
+						val = val.replaceAll("%n", "");
 					}
 					sql.set(key, val);
 				}
@@ -482,7 +482,7 @@ public class SqlUtil {
 					} else if (value.toString().equals("null")) {
 						sb1.append("null");
 					} else if (val.contains("%n")) {
-						sb1.append("'" + val.replaceAll("%n", "\n") + "'");
+						sb1.append("'" + val.replaceAll("%n", "") + "'");
 					} else if (val.contains("'")) {
 						sb1.append("'" + value.toString().replaceAll("'", "''") + "'");
 					} else {
@@ -540,7 +540,7 @@ public class SqlUtil {
 						} else if (value.toString().equals("null")) {
 							sb1.append("null");
 						} else if (val.contains("%n")) {
-							sb1.append("'" + val.replaceAll("%n", "\n") + "'");
+							sb1.append("'" + val.replaceAll("%n", "") + "'");
 						} else if (val.contains("'")) {
 							sb1.append("'" + value.toString().replaceAll("'", "''") + "'");
 						} else {
@@ -592,7 +592,7 @@ public class SqlUtil {
 					if (value.toString().equals("null")) {
 						sb1.append("null");
 					} else if (val.contains("%n")) {
-						sb1.append("'" + val.replaceAll("%n", "\n") + "'");
+						sb1.append("'" + val.replaceAll("%n", "") + "'");
 					} else if (val.contains("'")) {
 						sb1.append("'" + value.toString().replaceAll("'", "''") + "'");
 					} else {
@@ -654,7 +654,7 @@ public class SqlUtil {
 					} else if (value.toString().equals("null")) {
 						sb1.append("null");
 					} else if (val.contains("%n")) {
-						sb1.append("'" + val.replaceAll("%n", "\n") + "'");
+						sb1.append("'" + val.replaceAll("%n", "") + "'");
 					} else if (val.contains("'")) {
 						sb1.append("'" + value.toString().replaceAll("'", "''") + "'");
 					} else {
@@ -701,7 +701,7 @@ public class SqlUtil {
 					if (value.toString().equals("null")) {
 						sb1.append("null");
 					} else if (val.contains("%n")) {
-						sb1.append("'" + val.replaceAll("%n", "\n") + "'");
+						sb1.append("'" + val.replaceAll("%n", "") + "'");
 					} else if (val.contains("'")) {
 						sb1.append("'" + value.toString().replaceAll("'", "''") + "'");
 					} else {
@@ -757,7 +757,7 @@ public class SqlUtil {
 						} else if (val.contains("'")) {
 							sb1.append("'" + val.replaceAll("'", "''") + "'");
 						} else if (val.contains("%n")) {
-							sb1.append("'" + val.replaceAll("%n", "\n") + "'");
+							sb1.append("'" + val.replaceAll("%n", "") + "'");
 						} else {
 							sb1.append("'" + value + "'");
 						}

+ 1 - 1
src/main/java/com/uas/eis/utils/StringUtil.java

@@ -284,7 +284,7 @@ public class StringUtil {
 	 */
 	public static String trimBlankChars(String str) {
 		if (null != str) {
-			Pattern p = Pattern.compile("\\s*|\t|\r|\n");
+			Pattern p = Pattern.compile("\\s*|\t|\r|");
 			return p.matcher(str).replaceAll("");
 		}
 		return null;

+ 11 - 5
src/main/resources/application.yml

@@ -2,9 +2,9 @@ spring:
     datasource:
         type: org.apache.tomcat.jdbc.pool.DataSource
         driverClassName: oracle.jdbc.OracleDriver
-        username: FANT_T
+        username: N_HUASL_SZ
         password: select!#%*(
-        url: jdbc:oracle:thin:@usoft.f3322.net:11642:orcl
+        url: jdbc:oracle:thin:@usoft.f3322.net:11756:orcl
     http:
         encoding:
             force: true
@@ -12,6 +12,9 @@ spring:
             enabled: true
     message:
         encoding: UTF-8
+    redis:
+        host: 10.1.81.208
+        port: 26379
 server:
     tomcat:
         uri_encoding: UTF-8
@@ -23,6 +26,9 @@ action:
     public_actions: /EIS/logout,/EIS/hello1
 
 extral:
-    lingxing:
-        apps: {'ak_lZl4KJ3zHdBga':'UlmX06g1tl1g9LPvYAfpbH6825rTAnAoihH2NgdEH/kENYPDJjpwTMvC3AmO1EULR3ZsfzigF1AZ+Lcud6V80KlunahhonEZpkGfGNVm6h+FQCNXGGlqU8cbPZeuUqiw0AbTAG94oD3mpQ7OcOjmt9hkCnIMYZidYLPoGvSkPwoH9reK2HgYclAaJp6M6yT5E1NWLW2+f2ynsZCjzapzcUK71jtUPoza2Ty/SOD79SFDbO8HVfnDyAoBmEais/URE8qOJjCSVdxI+4LJBwTOx5ksraI7vGd4Rozda6nez6/kbjTdfenBe7Eb8wit2xqI1Den5pZesDSpSvldhZ3Gvw==', 'ak_YnORczCAW4WXM':'dtWemTK9KCZct9p34WrFj/ver5+mWEtQsIMn+HDRcd8z0dPxvu/irRJBhFpfhvsqW/MjdrIhCs2ymhGSikgOpaNaY/LdZCzzNlQ1rBgt7d3VJgJjAZMNHM2TMEmjo2puLoDPosIbQ7+yCOpK2JP9i04TuFLX/7IfsnR1TYUNchZtYoboHaPkPxOkyFWLOlcGtEXeh6j+ZYbYY2eVQ0LrmPpKJHGKP7Mu5C0cjDo80W1mOCDEA8XB0nIvrMo3F/YWVUt5LiSMluVbUCk08ipe+3MoA/dFGwt+/Ir0WDnZc4Ynp7gay6x+5fvV/gniffumnz7s7fd6cVu2adudK0/xCw=='}
-        apiUrl: 'https://openapi.lingxing.com'
+    kingdee:
+        url: http://183.62.131.97:9880/k3cloud/
+        dbId: 614562cfb7a481
+        uid: admin1
+        pwd: 123456
+        lang: 2052

+ 9 - 2
src/test/java/com/uas/eis/UasEisApplicationTests.java

@@ -1,5 +1,7 @@
 package com.uas.eis;
 
+import com.uas.eis.dto.UasEvent;
+import com.uas.eis.listener.UasProdInOutListener;
 import com.uas.eis.service.LingxingService;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -11,11 +13,16 @@ import org.springframework.test.context.junit4.SpringRunner;
 @SpringBootTest(classes = {UasEisApplication.class})
 public class UasEisApplicationTests {
 	@Autowired
-	private LingxingService lingxingService;
+	private UasProdInOutListener uasProdInOutListener;
 
 	@Test
 	public void Test() {
-		lingxingService.getSellers("ak_lZl4KJ3zHdBga");
+		UasEvent uasEvent = new UasEvent();
+		uasEvent.setOperation("POST");
+		uasEvent.setCaller("ProdInOut!Picking");
+		uasEvent.setKey(50769674);
+		uasProdInOutListener.onProdInOutPost_picking(uasEvent);
+
 	}
 
 }