chenjx 5 лет назад
Родитель
Сommit
b136a6f515
33 измененных файлов с 3158 добавлено и 12 удалено
  1. 32 3
      pom.xml
  2. 33 0
      src/main/java/com/uas/eis/controller/ErpController.java
  3. 19 0
      src/main/java/com/uas/eis/controller/ProdInOutControlller.java
  4. 13 0
      src/main/java/com/uas/eis/controller/TestController.java
  5. 66 0
      src/main/java/com/uas/eis/controller/XiangXController.java
  6. 12 2
      src/main/java/com/uas/eis/core/WebAppConfig.java
  7. 115 0
      src/main/java/com/uas/eis/core/support/SignatureInterceptor.java
  8. 151 2
      src/main/java/com/uas/eis/dao/BaseDao.java
  9. 15 0
      src/main/java/com/uas/eis/dao/EmployeeDao.java
  10. 11 0
      src/main/java/com/uas/eis/dao/EnterpriseDao.java
  11. 32 0
      src/main/java/com/uas/eis/dao/impl/EmployeeDaoImpl.java
  12. 39 0
      src/main/java/com/uas/eis/dao/impl/EnterpriseDaoImpl.java
  13. 786 0
      src/main/java/com/uas/eis/entity/Employee.java
  14. 349 0
      src/main/java/com/uas/eis/entity/Master.java
  15. 13 0
      src/main/java/com/uas/eis/service/EmployeeService.java
  16. 12 0
      src/main/java/com/uas/eis/service/EnterpriseService.java
  17. 13 0
      src/main/java/com/uas/eis/service/ErpService.java
  18. 11 0
      src/main/java/com/uas/eis/service/ProdInOutService.java
  19. 18 0
      src/main/java/com/uas/eis/service/XiangXService.java
  20. 23 0
      src/main/java/com/uas/eis/serviceImpl/EmployeeServiceImpl.java
  21. 26 0
      src/main/java/com/uas/eis/serviceImpl/EnterpriseServiceImpl.java
  22. 382 0
      src/main/java/com/uas/eis/serviceImpl/ErpServiceImpl.java
  23. 146 0
      src/main/java/com/uas/eis/serviceImpl/ProdInOutServiceImpl.java
  24. 401 0
      src/main/java/com/uas/eis/serviceImpl/XiangXServiceImpl.java
  25. 32 0
      src/main/java/com/uas/eis/utils/BaseUrlUtil.java
  26. 17 0
      src/main/java/com/uas/eis/utils/BaseUtil.java
  27. 6 0
      src/main/java/com/uas/eis/utils/CollectionUtil.java
  28. 76 1
      src/main/java/com/uas/eis/utils/HttpUtil.java
  29. 24 0
      src/main/java/com/uas/eis/utils/MD5Util.java
  30. 60 0
      src/main/java/com/uas/eis/utils/RedisConfig.java
  31. 144 0
      src/main/java/com/uas/eis/utils/RedisUtil.java
  32. 51 0
      src/main/java/com/uas/eis/utils/TokenCaches.java
  33. 30 4
      src/main/resources/application.yml

+ 32 - 3
pom.xml

@@ -50,6 +50,17 @@
             <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>
+
+		<!-- Spring Boot 响应式 Redis 依赖 -->
+		<dependency>
+			<groupId>redis.clients</groupId>
+			<artifactId>jedis</artifactId>
+		</dependency>
 	
 		<dependency>
 		    <groupId>log4j</groupId>
@@ -180,10 +191,28 @@
 			</resource>
 
 			<!-- 某些情况下,打包后运行不起来需要打开注释 -->
-			<!-- <resource>
+			<resource>
                 <directory>src/main/resources</directory>
-                <targetPath>BOOT-INF/classes/</targetPath>
-            </resource> -->
+                <!--<targetPath>BOOT-INF/classes/</targetPath>-->
+            </resource>
+			<!--<resource>-->
+				<!--<directory>src/main/java</directory>-->
+				<!--<includes>-->
+					<!--<include>**/*.yml</include>-->
+					<!--<include>**/*.properties</include>-->
+					<!--<include>**/*.xml</include>-->
+				<!--</includes>-->
+				<!--<filtering>false</filtering>-->
+			<!--</resource>-->
+			<!--<resource>-->
+				<!--<directory>src/main/resources</directory>-->
+				<!--<includes>-->
+					<!--<include>**/*.yml</include>-->
+					<!--<include>**/*.properties</include>-->
+					<!--<include>**/*.xml</include>-->
+				<!--</includes>-->
+				<!--<filtering>false</filtering>-->
+			<!--</resource>-->
 		</resources>
 
 	</build>

+ 33 - 0
src/main/java/com/uas/eis/controller/ErpController.java

@@ -0,0 +1,33 @@
+package com.uas.eis.controller;
+
+import com.uas.eis.service.ErpService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * 对接ERP业务
+ *
+ * @author cjx
+ * @date 2020-5-21
+ */
+@RestController
+public class ErpController {
+
+    @Autowired
+    ErpService erpService;
+
+    @RequestMapping("/openapi/applicant/postxx.action")
+    public Map<String, Object> auditafter_post_xx(int pi_id, String master){
+        return erpService.auditafter_post_xx(pi_id,master);
+    }
+
+    @RequestMapping("/openapi/applicant/respostxx.action")
+    public Map<String, Object> resuditafter_post_xx(int pi_id, String master){
+        return erpService.resuditafter_post_xx(pi_id,master);
+    }
+
+}

+ 19 - 0
src/main/java/com/uas/eis/controller/ProdInOutControlller.java

@@ -0,0 +1,19 @@
+package com.uas.eis.controller;
+
+import com.uas.eis.service.ProdInOutService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 出入库单过账
+ *
+ * @author cjx
+ * @date 2020-5-20
+ */
+@RestController
+public class ProdInOutControlller {
+
+    @Autowired
+    private ProdInOutService prodInOutService;
+
+}

+ 13 - 0
src/main/java/com/uas/eis/controller/TestController.java

@@ -1,7 +1,11 @@
 package com.uas.eis.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.uas.eis.dao.BaseDao;
+import com.uas.eis.utils.BaseUtil;
+import com.uas.eis.utils.HttpUtil;
 import com.uas.eis.utils.JacksonUtil;
+import com.uas.eis.utils.RedisUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,9 +32,18 @@ public class TestController {
 
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
+    @Autowired
+    RedisUtil redisUtils;
+
     @Autowired
     BaseDao baseDao;
 
+    @GetMapping(value = "/test/redis")
+    public void testJdbc(){
+        redisUtils.set("redisTest","123456",180);
+        System.out.println("redisResult11:"+redisUtils.get("redisTest").toString());
+    }
+
     @GetMapping(value = "/test/jdbc")
     public String testJdbc(Integer id){
         String res = "1";

+ 66 - 0
src/main/java/com/uas/eis/controller/XiangXController.java

@@ -0,0 +1,66 @@
+package com.uas.eis.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.uas.eis.service.XiangXService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import sun.misc.BASE64Decoder;
+import sun.misc.BASE64Encoder;
+
+import java.net.URLDecoder;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 对接湘芯业务
+ *
+ * @author cjx
+ * @date 2020-5-20
+ */
+@RestController
+public class XiangXController {
+
+    @Autowired
+    XiangXService xiangXService;
+
+    static BASE64Encoder encoder = new BASE64Encoder();
+    static BASE64Decoder decoder = new BASE64Decoder();
+
+    @PostMapping("/openapi/applicant/postInOutInfo.action")
+    public Map<String, Object> postInOutInfo(int inOutId, String items, String master){
+        return xiangXService.postInOutInfo(inOutId,items,master);
+    }
+
+    @PostMapping(value="/openapi/applicant/createVoucher.action")
+    public Map<String,Object> createAccountRegister(@RequestBody String data) throws Exception {
+        Map<String, Object> map = new HashMap<String, Object>();
+        String voInfo=new String(decoder.decodeBuffer(data), "UTF-8");
+        JSONObject jsonobj=new JSONObject();
+        String param="";
+        try{
+            jsonobj =JSON.parseObject(URLDecoder.decode(voInfo, "UTF-8"));
+            param=jsonobj.get("data").toString();
+        }catch (Exception e){
+            xiangXService.createLog(voInfo,"0","银行登记","参数异常:"+e.getMessage(),"");
+            map.put("success",false);
+            map.put("error","参数异常");
+            map.put("numbers","");
+            return map;
+        }
+        map=xiangXService.createAccountRegister(param);
+        return map;
+    }
+
+    /**
+     * 湘芯获取审批信息
+     * @param page
+     * @param pageSize
+     * @param type  数据类型
+     * */
+    @GetMapping(value="/openapi/applicant/getProcessList.action")
+    public Map<String,Object> getProcessList(int page, int pageSize, String type, String keyword, String emcode){
+        return xiangXService.getProcessList(page,pageSize,type,keyword,emcode);
+    }
+
+}

+ 12 - 2
src/main/java/com/uas/eis/core/WebAppConfig.java

@@ -5,6 +5,7 @@ import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.List;
 
+import com.uas.eis.core.support.SignatureInterceptor;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.http.converter.HttpMessageConverter;
@@ -25,14 +26,23 @@ public class WebAppConfig extends WebMvcConfigurationSupport{
 	public LoginInterceptor loginInterceptor(){
 		return new LoginInterceptor();
 	}
+
+	@Bean
+	public SignatureInterceptor getSignatureInterceptor(){
+		return new SignatureInterceptor();
+	}
 	
 	public void addInterceptors(InterceptorRegistry registry){
 		registry.addInterceptor(loginInterceptor()).addPathPatterns("/**")
 				.excludePathPatterns("/EIS/login")
 				.excludePathPatterns("/test/*")
 				.excludePathPatterns("/favicon.ico")
-				.excludePathPatterns("/error");
-		registry.addInterceptor(new DataSourceInterceptor()).addPathPatterns("/*/**");
+				.excludePathPatterns("/error")
+				.excludePathPatterns("/openapi/*");
+		registry.addInterceptor(getSignatureInterceptor()).addPathPatterns("/**")
+				.excludePathPatterns("/error")
+				.excludePathPatterns("/test/*")
+				.excludePathPatterns("/favicon.ico");
 	}
 	
 	@Bean

+ 115 - 0
src/main/java/com/uas/eis/core/support/SignatureInterceptor.java

@@ -0,0 +1,115 @@
+package com.uas.eis.core.support;
+
+import com.uas.eis.core.config.SpObserver;
+import com.uas.eis.entity.Master;
+import com.uas.eis.service.EmployeeService;
+import com.uas.eis.service.EnterpriseService;
+import com.uas.eis.service.ErpService;
+import com.uas.eis.utils.BaseUtil;
+import com.uas.eis.utils.HmacUtils;
+import com.uas.eis.utils.StringUtil;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * 自定义拦截器
+ *
+ * @author cjx
+ * @date 2020-5-20
+ */
+public class SignatureInterceptor extends HandlerInterceptorAdapter {
+
+	private final static String signatureParam = "_signature";
+
+	private final static String timestampParam = "_timestamp";
+	
+	private static final String master = "master";
+
+	private final static int timeout = 60000;
+	// 已使用签名
+	private Map<String, Long> signatureCache = new ConcurrentHashMap<>();
+	
+	@Autowired
+	public EnterpriseService enterpriseService;
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+		HttpSession session = request.getSession();
+		Object obj = session.getAttribute("employee");
+		if (obj != null) {
+			return super.preHandle(request, response, handler);
+		} else {
+			String sign = request.getParameter(signatureParam);
+			String dbmaster = request.getParameter(master);
+			if (sign != null&&master != null) {
+				String urlMessage = request.getRequestURL() + "?"
+						+ request.getQueryString().substring(0, request.getQueryString().indexOf(signatureParam) - 1);
+				Master master = null;
+				if(dbmaster!=null){
+					master = enterpriseService.getMasterByName(dbmaster);
+				}else{
+					BaseUtil.showError("账套参数为空");
+				}
+				if (master!=null) {
+					SpObserver.putSp(master.getMa_name());
+				}else{
+					BaseUtil.showError("企业信息为空");
+				}
+				String servletPath = request.getServletPath();
+
+				boolean check = false;
+				if (servletPath.indexOf("applicant")>-1) {
+					check = sign.equals(HmacUtils.encode(urlMessage));
+				}else if (servletPath.indexOf("factoring")>-1) {
+					check = StringUtil.hasText(master.getMa_fssecret())&&sign.equals(HmacUtils.encode(urlMessage,master.getMa_fssecret()));
+				}
+				if(sign==null || "".equals(sign)){
+					BaseUtil.showError("签名参数为空");
+				}
+				if (check) {
+					String timestamp = request.getParameter(timestampParam);
+					if(timestamp==null || "".equals(timestamp)){
+						BaseUtil.showError("时间戳参数为空");
+					}
+					long now = System.currentTimeMillis();
+					if (!StringUtils.isEmpty(timestamp) && Math.abs(now - Long.parseLong(timestamp)) <= timeout
+							&& !signatureCache.containsKey(sign)) {
+						// 加入历史记录
+						signatureCache.put(sign, now);
+						return true;
+					}else{
+						BaseUtil.showError("签名校验不通过,自方签名:"+HmacUtils.encode(urlMessage)+",对方签名:"+sign+",urlMessage:"+urlMessage);
+					}
+				}else{
+					BaseUtil.showError("签名不相等,自方签名:"+HmacUtils.encode(urlMessage)+",对方签名:"+sign+",urlMessage:"+urlMessage);
+				}
+			}
+		}
+		return true;
+	}
+
+	/**
+	 * 清除签名池历史记录
+	 */
+	@Scheduled(cron = "0 0/3 * * * ?")
+	public void clearCache() {
+		long now = System.currentTimeMillis();
+		for (String key : signatureCache.keySet()) {
+			long time = signatureCache.get(key);
+			if (now - time > timeout) {
+				signatureCache.remove(key);
+			}
+		}
+	}
+
+}

+ 151 - 2
src/main/java/com/uas/eis/dao/BaseDao.java

@@ -25,7 +25,7 @@ import com.uas.eis.utils.DateUtil;
 import net.sf.json.JSONObject;
 
 @Repository
-public class BaseDao{
+public class BaseDao {
 	
 	@Autowired
 	private JdbcTemplate jdbcTemplate;
@@ -34,6 +34,9 @@ public class BaseDao{
 		return jdbcTemplate;
 	}
 
+	static final String CREATE_SEQ = "CREATE SEQUENCE ?" + // 创建序列
+			" MINVALUE 1 MAXVALUE 99999999999 INCREMENT BY 1 START WITH 3000 CACHE 20 NOORDER NOCYCLE ";
+
 	public List<Map<String, Object>> queryForList(String sql) {
 		try {
 			return jdbcTemplate.queryForList(sql);
@@ -256,6 +259,52 @@ public class BaseDao{
 		}
 		return null;
 	}
+
+	/**
+	 * 多个字段,<=1条结果
+	 *
+	 * @param tableName
+	 *            对应要查询的表
+	 * @param fields
+	 *            要查询的字段集合
+	 * @param condition
+	 *            查询条件
+	 * @return fields对应的数据
+	 */
+	public Object[] getFieldsDataByCondition(String tableName, String[] fields, String condition) {
+		StringBuffer sql = new StringBuffer("SELECT ");
+		sql.append(BaseUtil.parseArray2Str(fields, ","));
+		sql.append(" FROM ");
+		sql.append(tableName);
+		sql.append(" WHERE ");
+		sql.append(condition);
+		List<Map<String, Object>> list = getJdbcTemplate().queryForList(sql.toString());
+		Iterator<Map<String, Object>> iter = list.iterator();
+		int length = fields.length;
+		Object[] results = new Object[length];
+		Object value = null;
+		if (iter.hasNext()) {
+			Map<String, Object> m = iter.next();
+			for (int i = 0; i < length; i++) {
+				String upperField = fields[i].toUpperCase();
+				if (upperField.indexOf(" AS ") > 0) {
+					upperField = upperField.split(" AS ")[1].trim();
+				}
+				value = m.get(upperField);
+				if (value != null && value.getClass().getSimpleName().toUpperCase().equals("TIMESTAMP")) {
+					Timestamp time = (Timestamp) value;
+					try {
+						value = DateUtil.parseDateToString(new Date(time.getTime()), Constant.YMD_HMS);
+					} catch (Exception e) {
+						e.printStackTrace();
+					}
+				}
+				results[i] = value;
+			}
+			return results;
+		}
+		return null;
+	}
 	
 	/**
 	 * 多个字段,多条结果
@@ -579,5 +628,105 @@ public class BaseDao{
 		}
 		return datas;
 	}
-	
+
+	/**
+	 * 一个字段,一条结果
+	 *
+	 * @param tableName
+	 *            对应要查询的表
+	 * @param field
+	 *            要查询的字段
+	 * @param condition
+	 *            查询条件
+	 * @return field对应的数据
+	 */
+	public <T> T getFieldValue(String tableName, String field, String condition, Class<T> requiredType) {
+		StringBuffer sql = new StringBuffer("SELECT ");
+		sql.append(field);
+		sql.append(" FROM ");
+		sql.append(tableName);
+		sql.append(" WHERE ");
+		sql.append(condition);
+		SqlRowList srs = queryForRowSet(sql.toString());
+		if (srs.next()) {
+			RowConvert<T> convert = new RowConvert<T>(requiredType);
+			return convert.convert(srs.getObject(1));
+		} else {
+			return null;
+		}
+	}
+
+	/**
+	 * 一个字段,多条结果
+	 *
+	 * @param tableName
+	 *            对应要查询的表
+	 * @param field
+	 *            要查询的字段
+	 * @param condition
+	 *            查询条件
+	 * @return field对应的数据
+	 */
+	public <T> List<T> getFieldValues(String tableName, String field, String condition, Class<T> requiredType) {
+		StringBuffer sb = new StringBuffer("SELECT ");
+		sb.append(field);
+		sb.append(" FROM ");
+		sb.append(tableName);
+		sb.append(((condition == null || "".equals(condition)) ? "" : (" WHERE " + condition)));
+		SqlRowList srs = queryForRowSet(sb.toString());
+		List<T> list = new ArrayList<T>();
+		RowConvert<T> convert = new RowConvert<T>(requiredType);
+		while (srs.next()) {
+			list.add(convert.convert(srs.getObject(1)));
+		}
+		return list;
+	}
+
+	public int getCount(String sql) {
+		SqlRowList rs = queryForRowSet(sql);
+		if (rs.next()) {
+			return rs.getInt(1);
+		}
+		return 0;
+	}
+
+	/**
+	 * 获取编号序列
+	 *
+	 * @param myTable
+	 *            Caller
+	 * @param thisType
+	 *            2
+	 */
+	public synchronized String sGetMaxNumber(String myTable, int thisType) {
+		return callProcedure("Sp_GetMaxNumber", new Object[] { myTable, thisType });
+	}
+
+
+	/**
+	 * 获取序列号
+	 *
+	 * @param seq
+	 *            指定的序列名
+	 */
+	public int getSeqId(String seq) {
+		try {
+			String sql = "select " + seq + ".nextval from dual";
+			SqlRowList rs = queryForRowSet(sql);
+			if (rs.next()) {
+				return rs.getInt(1);
+			} else {// 如果不存在就创建序列
+				int count = getCountByCondition("user_sequences", "Sequence_Name='" + seq.toUpperCase() + "'");
+				if (count == 0)
+					getJdbcTemplate().execute(CREATE_SEQ.replace("?", seq));
+				return getSeqId(seq);
+			}
+		} catch (Exception e) {
+			int count = getCountByCondition("user_sequences", "Sequence_Name='" + seq.toUpperCase() + "'");
+			if (count == 0)
+				getJdbcTemplate().execute(CREATE_SEQ.replace("?", seq));
+			return getSeqId(seq);
+		}
+	}
+
 }

+ 15 - 0
src/main/java/com/uas/eis/dao/EmployeeDao.java

@@ -0,0 +1,15 @@
+package com.uas.eis.dao;
+
+import com.uas.eis.entity.Employee;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * @author cjx
+ * @date 2020-5-21
+ */
+public interface EmployeeDao {
+	Employee getEmployeeByConditon(String condition);
+}

+ 11 - 0
src/main/java/com/uas/eis/dao/EnterpriseDao.java

@@ -0,0 +1,11 @@
+package com.uas.eis.dao;
+import com.uas.eis.entity.Master;
+
+/**
+ *
+ * @author cjx
+ * @date 2020-5-20
+ */
+public interface EnterpriseDao {
+    Master getMasterByName(String dbname);
+}

+ 32 - 0
src/main/java/com/uas/eis/dao/impl/EmployeeDaoImpl.java

@@ -0,0 +1,32 @@
+package com.uas.eis.dao.impl;
+
+import com.uas.eis.dao.BaseDao;
+import com.uas.eis.dao.EmployeeDao;
+import com.uas.eis.entity.Employee;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.EmptyResultDataAccessException;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.stereotype.Repository;
+
+@Repository("employeeDao")
+public class EmployeeDaoImpl extends BaseDao implements EmployeeDao {
+
+    @Autowired
+    private BaseDao baseDao;
+
+    @Override
+    public Employee getEmployeeByConditon(String condition) {
+        String sql = "select * from Employee";
+        if (condition != null)
+            sql += " where rownum=1 and " + condition;
+        try {
+            Employee employee = getJdbcTemplate().queryForObject(sql, new BeanPropertyRowMapper<Employee>(Employee.class));
+            return employee;
+        } catch (EmptyResultDataAccessException e) {
+            return null;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+}

+ 39 - 0
src/main/java/com/uas/eis/dao/impl/EnterpriseDaoImpl.java

@@ -0,0 +1,39 @@
+package com.uas.eis.dao.impl;
+
+import com.uas.eis.core.config.SpObserver;
+import com.uas.eis.dao.BaseDao;
+import com.uas.eis.dao.EnterpriseDao;
+import com.uas.eis.entity.Master;
+import org.springframework.dao.EmptyResultDataAccessException;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 获取企业信息
+ *
+ * @author cjx
+ * @date 2020-5-20
+ */
+@Repository("enterpriseDao")
+public class EnterpriseDaoImpl extends BaseDao implements EnterpriseDao {
+
+	@SuppressWarnings("finally")
+	@Override
+	public Master getMasterByName(String dbname) {
+		String sob = SpObserver.getSp();
+		SpObserver.putSp("N_DATACENTER");
+		Master master = null;
+		try {
+			master = getJdbcTemplate().queryForObject("SELECT * FROM master where ma_user='" + dbname + "'",
+					new BeanPropertyRowMapper<Master>(Master.class));
+		} catch (EmptyResultDataAccessException e) {
+			e.printStackTrace();
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			SpObserver.putSp(sob);
+			return master;
+		}
+	}
+
+}

+ 786 - 0
src/main/java/com/uas/eis/entity/Employee.java

@@ -0,0 +1,786 @@
+package com.uas.eis.entity;
+
+import org.codehaus.jackson.annotate.JsonIgnore;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 人员信息
+ * @author cjx
+ * @date 2020-5-21
+ */
+public class Employee implements Serializable {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 9154546832037377352L;
+	private Integer em_id;// Id
+	private String em_code;// 员工编号
+	private Long em_uu;// 员工uu
+	private Integer em_defaultorid = 0;// 默认的组织ID(HrOrg)
+	private Integer em_defaultjbid = 0;// 默认的职位ID
+	private Integer em_defaulthsid = 0;// 默认的岗位ID(JOB)
+	private String em_name;// 姓名
+	private String em_sex;// 性别
+	private String em_iccode;// 身份证号
+	private Date em_birthday;// 出入年月
+	private String em_nation;// 民族
+	private String em_marry;// 婚否
+	private String em_polity;// 政党
+	private String em_tel;// 联系电话
+	private String em_mobile;// 移动电话
+	private String em_email;// 邮箱
+	private String em_mailpassword;// 邮箱密码
+	private String em_native;// 籍贯
+	private String em_address;// 地址
+	private String em_finishschool;// 毕业学校
+	private String em_speciality;// 专业
+	private String em_culture;// 文化程度
+	private Float em_worktime;// 工作年限
+	private String em_remark;// 备注
+	private String em_status;// 状态
+	private String em_statuscode;
+	private String em_bank;// 开户行
+	private String em_accounts;// 帐号
+	private String em_recorder;// 录入
+	private Date em_indate;// 入职日期
+	private Integer em_imageid;// 照片ID
+	private String em_contact;// 联系人
+	private String em_ctel;// 联系人电话
+	private Integer em_maid = 0;// 帐套ID
+	private String em_master;// 当前帐套名称
+	private String em_masters;// 可登录的帐套
+	private Integer em_remind = 1;// 是否刷新寻呼,1-是,0-否
+	private Master currentMaster;// 当前登录帐套
+	private Date em_mologintime;// 移动客户端最新登录时间
+	private Integer em_pdamobilelogin;// PDA移动端是否登录
+	private String em_cardcode;
+	private String em_photourl;// 人员照片在服务器端的存储路径
+	private Integer virtual_enuu;// 虚拟账号对应客户方UU
+	private Integer joborgnorelation;// 岗位不关联组织
+	private Integer em_onlyinner;
+	private String em_defaulthscode;//岗位编号
+	private String em_defaulthsname;//岗位名称
+	private Date em_pwdupdatedate;//密码修改时间
+	private String em_saledepart;//所属销售部
+	
+	private String em_cop;//所属公司
+	private String em_factory ;//所属工厂
+
+	private String em_dingdingid ;//对应的钉钉ID
+
+	private String em_lastsob ;//最近登录的账套
+
+	public Date getEm_pwdupdatedate() {
+		return em_pwdupdatedate;
+	}
+
+	public void setEm_pwdupdatedate(Date em_pwdupdatedate) {
+		this.em_pwdupdatedate = em_pwdupdatedate;
+	}
+
+	private Integer em_dtremind=0;//是否桌面提醒(20170309 by zyc)
+	
+	
+	public String getEm_defaulthscode() {
+		return em_defaulthscode;
+	}
+
+	public void setEm_defaulthscode(String em_defaulthscode) {
+		this.em_defaulthscode = em_defaulthscode;
+	}
+
+	public String getEm_defaulthsname() {
+		return em_defaulthsname;
+	}
+
+	public void setEm_defaulthsname(String em_defaulthsname) {
+		this.em_defaulthsname = em_defaulthsname;
+	}
+
+	public Integer getJoborgnorelation() {
+		return joborgnorelation;
+	}
+
+	public void setJoborgnorelation(Integer joborgnorelation) {
+		this.joborgnorelation = joborgnorelation;
+	}
+
+	public String getEm_cardcode() {
+		return em_cardcode;
+	}
+
+	public void setEm_cardcode(String em_cardcode) {
+		this.em_cardcode = em_cardcode;
+	}
+
+	public Date getEm_mologintime() {
+		return em_mologintime;
+	}
+
+	public void setEm_mologintime(Date em_mologintime) {
+		this.em_mologintime = em_mologintime;
+	}
+
+	private String model_code;
+	private String model_name;
+
+	public String getModel_code() {
+		return model_code;
+	}
+
+	public void setModel_code(String model_code) {
+		this.model_code = model_code;
+	}
+
+	public String getModel_name() {
+		return model_name;
+	}
+
+	public void setModel_name(String model_name) {
+		this.model_name = model_name;
+	}
+
+	public Master getCurrentMaster() {
+		return currentMaster;
+	}
+
+	public void setCurrentMaster(Master currentMaster) {
+		this.currentMaster = currentMaster;
+	}
+
+	public String getEm_master() {
+		return em_master;
+	}
+
+	public void setEm_master(String em_master) {
+		this.em_master = em_master;
+	}
+
+	private String em_type = "normal";// 员工账号类型,超级账号、普通账号
+	private String em_password;// 登录密码
+	private Integer em_enid;// 员工所在企业id
+	private String em_position; // 岗位
+	private String em_depart; // 部门
+	private String em_departmentcode;// 部门编号
+	private String em_professname;// 职称
+	private String em_class;// 员工类型 (试用,正式,离职)
+	private String em_endinsu;
+	private String em_medinsu;
+	private String em_unempinsu;
+	private String em_eminjuinsu;
+	private String em_mateinsu;
+	private String em_socailcard;
+	private String em_accumucard;
+	private String em_accimount;
+	private String em_secuclass;
+	private String em_height;
+	private String em_weight;
+	private String em_blood;
+	private String em_heathlevel;
+	private String em_defaultorname;
+	private String em_lastip;
+	private Date em_leavedate;// 离职时间
+	private String em_leavetype;// 离职类型
+	private Integer em_imid;// IM的ID
+
+	public Integer getEm_id() {
+		return em_id;
+	}
+
+	public void setEm_id(Integer em_id) {
+		this.em_id = em_id;
+	}
+
+	public String getEm_code() {
+		return em_code;
+	}
+
+	public void setEm_code(String em_code) {
+		this.em_code = em_code;
+	}
+
+	public Long getEm_uu() {
+		return em_uu;
+	}
+
+	public void setEm_uu(Long em_uu) {
+		this.em_uu = em_uu;
+	}
+
+	public Integer getEm_defaultorid() {
+		return em_defaultorid == null ? 0 : em_defaultorid;
+	}
+
+	public void setEm_defaultorid(Integer em_defaultorid) {
+		this.em_defaultorid = em_defaultorid;
+	}
+
+	public Integer getEm_defaultjbid() {
+		return em_defaultjbid;
+	}
+
+	public void setEm_defaultjbid(Integer em_defaultjbid) {
+		this.em_defaultjbid = em_defaultjbid;
+	}
+
+	public Integer getEm_defaulthsid() {
+		return em_defaulthsid;
+	}
+
+	public void setEm_defaulthsid(Integer em_defaulthsid) {
+		this.em_defaulthsid = em_defaulthsid;
+	}
+
+	public String getEm_name() {
+		return em_name;
+	}
+
+	public void setEm_name(String em_name) {
+		this.em_name = em_name;
+	}
+
+	public String getEm_sex() {
+		return em_sex;
+	}
+
+	public void setEm_sex(String em_sex) {
+		this.em_sex = em_sex;
+	}
+
+	public String getEm_iccode() {
+		return em_iccode;
+	}
+
+	public void setEm_iccode(String em_iccode) {
+		this.em_iccode = em_iccode;
+	}
+
+	public Date getEm_birthday() {
+		return em_birthday;
+	}
+
+	public void setEm_birthday(Date em_birthday) {
+		this.em_birthday = em_birthday;
+	}
+
+	public String getEm_nation() {
+		return em_nation;
+	}
+
+	public void setEm_nation(String em_nation) {
+		this.em_nation = em_nation;
+	}
+
+	public String getEm_marry() {
+		return em_marry;
+	}
+
+	public void setEm_marry(String em_marry) {
+		this.em_marry = em_marry;
+	}
+
+	public String getEm_polity() {
+		return em_polity;
+	}
+
+	public void setEm_polity(String em_polity) {
+		this.em_polity = em_polity;
+	}
+
+	public String getEm_tel() {
+		return em_tel;
+	}
+
+	public void setEm_tel(String em_tel) {
+		this.em_tel = em_tel;
+	}
+
+	public String getEm_mobile() {
+		return em_mobile;
+	}
+
+	public void setEm_mobile(String em_mobile) {
+		this.em_mobile = em_mobile;
+	}
+
+	public String getEm_email() {
+		return em_email;
+	}
+
+	public void setEm_email(String em_email) {
+		this.em_email = em_email;
+	}
+
+	public String getEm_mailpassword() {
+		return em_mailpassword;
+	}
+
+	public void setEm_mailpassword(String em_mailpassword) {
+		this.em_mailpassword = em_mailpassword;
+	}
+
+	public String getEm_native() {
+		return em_native;
+	}
+
+	public void setEm_native(String em_native) {
+		this.em_native = em_native;
+	}
+
+	public String getEm_address() {
+		return em_address;
+	}
+
+	public void setEm_address(String em_address) {
+		this.em_address = em_address;
+	}
+
+	public String getEm_finishschool() {
+		return em_finishschool;
+	}
+
+	public void setEm_finishschool(String em_finishschool) {
+		this.em_finishschool = em_finishschool;
+	}
+
+	public String getEm_speciality() {
+		return em_speciality;
+	}
+
+	public void setEm_speciality(String em_speciality) {
+		this.em_speciality = em_speciality;
+	}
+
+	public String getEm_culture() {
+		return em_culture;
+	}
+
+	public void setEm_culture(String em_culture) {
+		this.em_culture = em_culture;
+	}
+
+	public Float getEm_worktime() {
+		return em_worktime;
+	}
+
+	public void setEm_worktime(Float em_worktime) {
+		this.em_worktime = em_worktime;
+	}
+
+	public String getEm_remark() {
+		return em_remark;
+	}
+
+	public void setEm_remark(String em_remark) {
+		this.em_remark = em_remark;
+	}
+
+	public String getEm_status() {
+		return em_status;
+	}
+
+	public void setEm_status(String em_status) {
+		this.em_status = em_status;
+	}
+
+	public String getEm_bank() {
+		return em_bank;
+	}
+
+	public void setEm_bank(String em_bank) {
+		this.em_bank = em_bank;
+	}
+
+	public String getEm_accounts() {
+		return em_accounts;
+	}
+
+	public void setEm_accounts(String em_accounts) {
+		this.em_accounts = em_accounts;
+	}
+
+	public String getEm_recorder() {
+		return em_recorder;
+	}
+
+	public void setEm_recorder(String em_recorder) {
+		this.em_recorder = em_recorder;
+	}
+
+	public Date getEm_indate() {
+		return em_indate;
+	}
+
+	public void setEm_indate(Date em_indate) {
+		this.em_indate = em_indate;
+	}
+
+	public Integer getEm_imageid() {
+		return em_imageid;
+	}
+
+	public void setEm_imageid(Integer em_imageid) {
+		this.em_imageid = em_imageid;
+	}
+
+	public String getEm_contact() {
+		return em_contact;
+	}
+
+	public void setEm_contact(String em_contact) {
+		this.em_contact = em_contact;
+	}
+
+	public String getEm_ctel() {
+		return em_ctel;
+	}
+
+	public void setEm_ctel(String em_ctel) {
+		this.em_ctel = em_ctel;
+	}
+
+	public Integer getEm_maid() {
+		return em_maid;
+	}
+
+	public void setEm_maid(Integer em_maid) {
+		this.em_maid = em_maid;
+	}
+
+	public String getEm_type() {
+		return em_type;
+	}
+
+	public void setEm_type(String em_type) {
+		this.em_type = em_type;
+	}
+
+	public String getEm_password() {
+		return em_password;
+	}
+
+	public void setEm_password(String em_password) {
+		this.em_password = em_password;
+	}
+
+	public Integer getEm_enid() {
+		return em_enid;
+	}
+
+	public void setEm_enid(Integer em_enid) {
+		this.em_enid = em_enid;
+	}
+
+	public String getEm_position() {
+		return em_position;
+	}
+
+	public void setEm_position(String em_position) {
+		this.em_position = em_position;
+	}
+
+	public String getEm_depart() {
+		return em_depart;
+	}
+
+	public void setEm_depart(String em_depart) {
+		this.em_depart = em_depart;
+	}
+
+	public String getEm_departmentcode() {
+		return em_departmentcode;
+	}
+
+	public void setEm_departmentcode(String em_departmentcode) {
+		this.em_departmentcode = em_departmentcode;
+	}
+
+	public String getEm_professname() {
+		return em_professname;
+	}
+
+	public void setEm_professname(String em_professname) {
+		this.em_professname = em_professname;
+	}
+
+	public String getEm_class() {
+		return em_class;
+	}
+
+	public void setEm_class(String em_class) {
+		this.em_class = em_class;
+	}
+
+	public String getEm_endinsu() {
+		return em_endinsu;
+	}
+
+	public void setEm_endinsu(String em_endinsu) {
+		this.em_endinsu = em_endinsu;
+	}
+
+	public String getEm_medinsu() {
+		return em_medinsu;
+	}
+
+	public void setEm_medinsu(String em_medinsu) {
+		this.em_medinsu = em_medinsu;
+	}
+
+	public String getEm_unempinsu() {
+		return em_unempinsu;
+	}
+
+	public void setEm_unempinsu(String em_unempinsu) {
+		this.em_unempinsu = em_unempinsu;
+	}
+
+	public String getEm_eminjuinsu() {
+		return em_eminjuinsu;
+	}
+
+	public void setEm_eminjuinsu(String em_eminjuinsu) {
+		this.em_eminjuinsu = em_eminjuinsu;
+	}
+
+	public String getEm_mateinsu() {
+		return em_mateinsu;
+	}
+
+	public void setEm_mateinsu(String em_mateinsu) {
+		this.em_mateinsu = em_mateinsu;
+	}
+
+	public String getEm_socailcard() {
+		return em_socailcard;
+	}
+
+	public void setEm_socailcard(String em_socailcard) {
+		this.em_socailcard = em_socailcard;
+	}
+
+	public String getEm_accumucard() {
+		return em_accumucard;
+	}
+
+	public void setEm_accumucard(String em_accumucard) {
+		this.em_accumucard = em_accumucard;
+	}
+
+	public String getEm_accimount() {
+		return em_accimount;
+	}
+
+	public void setEm_accimount(String em_accimount) {
+		this.em_accimount = em_accimount;
+	}
+
+	public String getEm_secuclass() {
+		return em_secuclass;
+	}
+
+	public void setEm_secuclass(String em_secuclass) {
+		this.em_secuclass = em_secuclass;
+	}
+
+	public Integer getEm_remind() {
+		return em_remind;
+	}
+
+	public void setEm_remind(Integer em_remind) {
+		em_remind = em_remind == null ? 1 : em_remind;
+		this.em_remind = em_remind;
+	}
+
+	public String getEm_lastip() {
+		return em_lastip;
+	}
+
+	public void setEm_lastip(String em_lastip) {
+		this.em_lastip = em_lastip;
+	}
+
+	public String getEm_height() {
+		return em_height;
+	}
+
+	public void setEm_height(String em_height) {
+		this.em_height = em_height;
+	}
+
+	public String getEm_weight() {
+		return em_weight;
+	}
+
+	public void setEm_weight(String em_weight) {
+		this.em_weight = em_weight;
+	}
+
+	public String getEm_masters() {
+		return em_masters;
+	}
+
+	public void setEm_masters(String em_masters) {
+		this.em_masters = em_masters;
+	}
+
+	public String getEm_blood() {
+		return em_blood;
+	}
+
+	public void setEm_blood(String em_blood) {
+		this.em_blood = em_blood;
+	}
+
+	public String getEm_heathlevel() {
+		return em_heathlevel;
+	}
+
+	public void setEm_heathlevel(String em_heathlevel) {
+		this.em_heathlevel = em_heathlevel;
+	}
+
+	public String getEm_defaultorname() {
+		return em_defaultorname;
+	}
+
+	public void setEm_defaultorname(String em_defaultorname) {
+		this.em_defaultorname = em_defaultorname;
+	}
+
+	public Date getEm_leavedate() {
+		return em_leavedate;
+	}
+
+	public void setEm_leavedate(Date em_leavedate) {
+		this.em_leavedate = em_leavedate;
+	}
+
+	public String getEm_leavetype() {
+		return em_leavetype;
+	}
+
+	public void setEm_leavetype(String em_leavetype) {
+		this.em_leavetype = em_leavetype;
+	}
+
+	public Integer getEm_pdamobilelogin() {
+		return em_pdamobilelogin;
+	}
+
+	public void setEm_pdamobilelogin(Integer em_pdamobilelogin) {
+		this.em_pdamobilelogin = em_pdamobilelogin;
+	}
+
+	public String getEm_statuscode() {
+		return em_statuscode;
+	}
+
+	public void setEm_statuscode(String em_statuscode) {
+		this.em_statuscode = em_statuscode;
+	}
+
+	public String getEm_photourl() {
+		return em_photourl;
+	}
+
+	public void setEm_photourl(String em_photourl) {
+		this.em_photourl = em_photourl;
+	}
+
+	public Integer getVirtual_enuu() {
+		return virtual_enuu;
+	}
+
+	public void setVirtual_enuu(Integer virtual_enuu) {
+		this.virtual_enuu = virtual_enuu;
+	}
+
+	/**
+	 * 超级账户
+	 * 
+	 * @return
+	 */
+	@JsonIgnore
+	public boolean isAdmin() {
+		return "admin".equals(this.em_type);
+	}
+
+
+	public Integer getEm_imid() {
+		return em_imid;
+	}
+
+	public void setEm_imid(Integer em_imid) {
+		this.em_imid = em_imid;
+	}
+
+	public Integer getEm_onlyinner() {
+		return em_onlyinner;
+	}
+
+	public void setEm_onlyinner(Integer em_onlyinner) {
+		this.em_onlyinner = em_onlyinner;
+	}
+
+	@Override
+	public String toString() {
+		return this.em_code + "(" + this.em_name + ")";
+	}
+
+	public Integer getEm_dtremind() {
+		return em_dtremind;
+	}
+
+	public void setEm_dtremind(Integer em_dtremind) {
+		this.em_dtremind = em_dtremind;
+	}
+
+	public String getEm_saledepart() {
+		return em_saledepart;
+	}
+
+	public void setEm_saledepart(String em_saledepart) {
+		this.em_saledepart = em_saledepart;
+	}
+
+	public String getEm_cop() {
+		return em_cop;
+	}
+
+	public void setEm_cop(String em_cop) {
+		this.em_cop = em_cop;
+	}
+
+	/**
+	 * @return the em_factory
+	 */
+	public String getEm_factory() {
+		return em_factory;
+	}
+
+	/**
+	 * @param em_factory the em_factory to set
+	 */
+	public void setEm_factory(String em_factory) {
+		this.em_factory = em_factory;
+	}
+
+	public String getEm_dingdingid() {
+		return em_dingdingid;
+	}
+
+	public void setEm_dingdingid(String em_dingdingid) {
+		this.em_dingdingid = em_dingdingid;
+	}
+
+	public String getEm_lastsob() {
+		return em_lastsob;
+	}
+
+	public void setEm_lastsob(String em_lastsob) {
+		this.em_lastsob = em_lastsob;
+	}
+}

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

@@ -0,0 +1,349 @@
+package com.uas.eis.entity;
+
+import com.uas.eis.utils.Constant;
+import org.springframework.util.StringUtils;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 帐套
+ * 
+ * @author cjx
+ * @date 2020-5-20
+ */
+public class Master implements Serializable {
+
+	private static final long serialVersionUID = 7479469727810677867L;
+	private int ma_id;
+	private String ma_user;// 数据库用户名
+	private String ms_pwd;// 数据库密码
+	private String ma_name;// 帐套名,与bean名一致
+	private String ma_man;
+	private Date ma_time;
+	private String ma_language;
+	private String ma_function;
+	private Integer ma_type = 3;// 类型,0--集团中心,1--资料中心,2--子集团,3--营运中心
+	private Integer ma_pid = 0;// 上级集团ID
+	private Integer ma_kind = 0;//帐套种类
+	private String ma_soncode;
+	private Long ma_uu;// 帐套绑定UU号
+	private Integer ma_b2benable;// 是否启用B2B,1启用,0未启用
+	private String ma_b2bwebsite;// B2B平台站点
+	private String ma_accesssecret;// 密钥
+	private String ma_domain;// 域名
+	private List<Master> children;
+	private long ma_selectTime;// 查询待办事宜的比较时间
+	private String ma_driver;
+	private String ma_url;
+	private String ma_installtype;// 初始化类型:make/trade
+	private Short ma_init;// 是否初始化完成
+	private Short ma_enable;// 是否可使用
+	private Long ma_manageid; // 对应后台管理的企业ID
+	private String ma_env;// 对应商城环境
+	private String ma_fssecret;//保理密钥
+	private String ma_finwebsite;//金融服务站点
+	private String ma_ccwebsite;//产城服务站点
+
+	public String getMa_env() {
+		return ma_env;
+	}
+
+	public void setMa_env(String ma_env) {
+		this.ma_env = ma_env;
+	}
+
+	public long getMa_selectTime() {
+		return ma_selectTime;
+	}
+
+	public void setMa_selectTime(long ma_selectTime) {
+		this.ma_selectTime = ma_selectTime;
+	}
+
+	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_language() {
+		return ma_language;
+	}
+
+	public void setMa_language(String ma_language) {
+		this.ma_language = ma_language;
+	}
+
+	public String getMa_man() {
+		return ma_man;
+	}
+
+	public void setMa_man(String ma_man) {
+		this.ma_man = ma_man;
+	}
+
+	public Date getMa_time() {
+		return ma_time;
+	}
+
+	public void setMa_time(Date ma_time) {
+		this.ma_time = ma_time;
+	}
+
+	public String getMa_function() {
+		return ma_function;
+	}
+
+	public void setMa_function(String ma_function) {
+		this.ma_function = ma_function;
+	}
+
+	public Integer getMa_type() {
+		return ma_type;
+	}
+
+	public void setMa_type(Integer ma_type) {
+		this.ma_type = ma_type;
+	}
+
+	public Integer getMa_kind() {
+		return ma_kind;
+	}
+
+	public void setMa_kind(Integer ma_kind) {
+		this.ma_kind = ma_kind;
+	}
+
+	public Integer getMa_pid() {
+		return ma_pid;
+	}
+
+	public void setMa_pid(Integer ma_pid) {
+		this.ma_pid = ma_pid;
+	}
+
+	public String getMa_soncode() {
+		return ma_soncode;
+	}
+
+	public void setMa_soncode(String ma_soncode) {
+		this.ma_soncode = ma_soncode;
+	}
+
+	public Long getMa_uu() {
+		return ma_uu;
+	}
+
+	public void setMa_uu(Long ma_uu) {
+		this.ma_uu = ma_uu;
+	}
+
+	public List<Master> getChildren() {
+		return children;
+	}
+
+	public void setChildren(List<Master> children) {
+		this.children = children;
+	}
+
+	public Integer getMa_b2benable() {
+		return ma_b2benable;
+	}
+
+	public void setMa_b2benable(Integer ma_b2benable) {
+		this.ma_b2benable = ma_b2benable;
+	}
+
+	public String getMa_b2bwebsite() {
+		 return this.ma_b2bwebsite;
+	}
+
+	public void setMa_b2bwebsite(String ma_b2bwebsite) {
+		this.ma_b2bwebsite = ma_b2bwebsite;
+	}
+
+	public String getMa_driver() {
+		return ma_driver;
+	}
+
+	public void setMa_driver(String ma_driver) {
+		this.ma_driver = ma_driver;
+	}
+
+	public String getMa_url() {
+		return ma_url;
+	}
+
+	public void setMa_url(String ma_url) {
+		this.ma_url = ma_url;
+	}
+
+	public String getMa_domain() {
+		return ma_domain;
+	}
+
+	public void setMa_domain(String ma_domain) {
+		this.ma_domain = ma_domain;
+	}
+
+	public String getMa_installtype() {
+		return ma_installtype;
+	}
+
+	public void setMa_installtype(String ma_installtype) {
+		this.ma_installtype = ma_installtype;
+	}
+
+	public Short getMa_init() {
+		return ma_init;
+	}
+
+	public void setMa_init(Short ma_init) {
+		this.ma_init = ma_init;
+	}
+
+	public Short getMa_enable() {
+		return ma_enable;
+	}
+
+	public void setMa_enable(Short ma_enable) {
+		this.ma_enable = ma_enable;
+	}
+
+	public String getMa_ccwebsite() {
+		return ma_ccwebsite;
+	}
+
+	public void setMa_ccwebsite(String ma_ccwebsite) {
+		this.ma_ccwebsite = ma_ccwebsite;
+	}
+
+	/**
+	 * 是否初始化完成
+	 * 
+	 * @return
+	 */
+	public boolean isInit() {
+		return this.ma_init != null && Constant.YES == this.ma_init;
+	}
+
+	/**
+	 * 是否有效
+	 * 
+	 * @return
+	 */
+	public boolean isEnable() {
+		return this.ma_enable != null && Constant.YES == this.ma_enable;
+	}
+
+	/**
+	 * 是否演示
+	 * 
+	 * @return
+	 */
+	public boolean isGuest() {
+		return "guest".equals(this.ma_installtype);
+	}
+
+	public Long getMa_manageid() {
+		return ma_manageid;
+	}
+
+	public void setMa_manageid(Long ma_manageid) {
+		this.ma_manageid = ma_manageid;
+	}
+
+	public String getMa_accesssecret() {
+		return ma_accesssecret;
+	}
+
+	public void setMa_accesssecret(String ma_accesssecret) {
+		this.ma_accesssecret = ma_accesssecret;
+	}
+
+	public String getEnv() {
+		if (StringUtils.isEmpty(this.getMa_env())) {
+			return Env.test.name();
+		}
+		return this.getMa_env();
+	}
+
+	enum Env {
+		test, prod
+	}
+
+	public String getMa_fssecret() {
+		return ma_fssecret;
+	}
+
+	public void setMa_fssecret(String ma_fssecret) {
+		this.ma_fssecret = ma_fssecret;
+	}
+
+	
+	public String getMa_finwebsite() {
+		return ma_finwebsite;
+	}
+
+	public void setMa_finwebsite(String ma_finwebsite) {
+		this.ma_finwebsite = ma_finwebsite;
+	}
+
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ma_id;
+		result = prime * result + ((ma_user == null) ? 0 : ma_user.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		Master other = (Master) obj;
+		if (ma_id != other.ma_id)
+			return false;
+		if (ma_user == null) {
+			if (other.ma_user != null)
+				return false;
+		} else if (!ma_user.equals(other.ma_user))
+			return false;
+		return true;
+	}
+
+}

+ 13 - 0
src/main/java/com/uas/eis/service/EmployeeService.java

@@ -0,0 +1,13 @@
+package com.uas.eis.service;
+
+import com.uas.eis.entity.Employee;
+
+/**
+ * @author cjx
+ * @date 2020-5-21
+ */
+public interface EmployeeService {
+
+	Employee getByCondition(String condition);
+
+}

+ 12 - 0
src/main/java/com/uas/eis/service/EnterpriseService.java

@@ -0,0 +1,12 @@
+package com.uas.eis.service;
+
+import com.uas.eis.entity.Master;
+
+/**
+ * @author cjx
+ * @date 2020-5-20
+ */
+public interface EnterpriseService {
+    Master getMasterByName(String name);
+}
+

+ 13 - 0
src/main/java/com/uas/eis/service/ErpService.java

@@ -0,0 +1,13 @@
+package com.uas.eis.service;
+
+import java.util.Map;
+
+/**
+ * @author cjx
+ * @date 2020-5-21
+ */
+public interface ErpService {
+    Map<String, Object> auditafter_post_xx(Integer id, String masterName);
+
+    Map<String, Object> resuditafter_post_xx(Integer id, String masterName);
+}

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

@@ -0,0 +1,11 @@
+package com.uas.eis.service;
+
+import java.util.Map;
+
+/**
+ * @author cjx
+ * @date 2020-5-20
+ */
+public interface ProdInOutService {
+    Map<String, Object> postProdInOut(int pi_id, String caller);
+}

+ 18 - 0
src/main/java/com/uas/eis/service/XiangXService.java

@@ -0,0 +1,18 @@
+package com.uas.eis.service;
+
+import java.util.Map;
+
+/**
+ * @author cjx
+ * @date 2020-5-20
+ */
+public interface XiangXService {
+    Map<String, Object> postInOutInfo(int inOutId, String items, String master);
+
+    Map<String, Object> createAccountRegister(String data);
+
+    void createLog(String data,String result,String type,String err,String code);
+
+    Map<String, Object> getProcessList (int page, int pageSize, String type, String keyword, String emcode);
+
+}

+ 23 - 0
src/main/java/com/uas/eis/serviceImpl/EmployeeServiceImpl.java

@@ -0,0 +1,23 @@
+package com.uas.eis.serviceImpl;
+
+import com.uas.eis.dao.EmployeeDao;
+import com.uas.eis.entity.Employee;
+import com.uas.eis.service.EmployeeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author cjx
+ * @date 2020-5-21
+ */
+@Service
+public class EmployeeServiceImpl implements EmployeeService {
+
+    @Autowired
+    private EmployeeDao employeeDao;
+
+    @Override
+    public Employee getByCondition(String condition) {
+        return employeeDao.getEmployeeByConditon(condition);
+    }
+}

+ 26 - 0
src/main/java/com/uas/eis/serviceImpl/EnterpriseServiceImpl.java

@@ -0,0 +1,26 @@
+package com.uas.eis.serviceImpl;
+
+import com.uas.eis.dao.EnterpriseDao;
+import com.uas.eis.entity.Master;
+import com.uas.eis.service.EnterpriseService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+/**
+ * 获取企业信息
+ *
+ * @author cjx
+ * @date 2020-5-20
+ */
+@Service
+public class EnterpriseServiceImpl implements EnterpriseService {
+
+    @Autowired
+    private EnterpriseDao enterpriseDao;
+
+    @Override
+    public Master getMasterByName(String dbname) {
+        return enterpriseDao.getMasterByName(dbname);
+    }
+}

+ 382 - 0
src/main/java/com/uas/eis/serviceImpl/ErpServiceImpl.java

@@ -0,0 +1,382 @@
+package com.uas.eis.serviceImpl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.uas.eis.dao.BaseDao;
+import com.uas.eis.dao.SqlRowList;
+import com.uas.eis.entity.Master;
+import com.uas.eis.service.EnterpriseService;
+import com.uas.eis.service.ErpService;
+import com.uas.eis.utils.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import sun.misc.BASE64Encoder;
+
+import java.io.UnsupportedEncodingException;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 对接Erp接口
+ * @author cjx
+ * @date 2020-5-21
+ */
+@Service
+public class ErpServiceImpl implements ErpService {
+
+    @Autowired
+    private BaseDao baseDao;
+
+    @Autowired
+    private EnterpriseService enterpriseService;
+
+    @Autowired
+    private BaseUrlUtil baseUrlUtil;
+
+    @Autowired
+    private TokenCaches tokenCaches;
+
+    @Autowired
+    private MD5Util md5Util;
+
+    @Override
+    public Map<String, Object> auditafter_post_xx(Integer id, String masterName) {
+        Map<String, Object> modelMap = new HashMap<String, Object>();
+        int count = baseDao.getCount("select count(*) from prodinout where nvl(pi_issendxx,0)<>0 and pi_id=" + id);
+        if (count>0){
+            Master master = enterpriseService.getMasterByName(masterName);;
+            String baseUrl = baseUrlUtil.getBaseUrl(master.getMa_env(),"WMS");
+            String piClass = baseDao.getFieldValue("prodinout", "pi_class", "pi_id=" + id, String.class);
+            String inoutno = baseDao.getFieldValue("prodinout", "pi_inoutno", "pi_id=" + id, String.class);
+            try {
+                String Authorization = "Bearer "+ tokenCaches.getTokenCache("ProdInOutToken");
+                String url="";
+                Object inorout = baseDao.getFieldDataByCondition("DOCUMENTSETUP", "ds_inorout", "DS_NAME='" + piClass + "'");
+                Boolean isOut=false;
+                if("OUT".equals(inorout)||"-IN".equals(inorout)){
+                    url=baseUrl+"/api/open/entrustOrder/createOutboundOrder";
+                    isOut=true;
+                }else{
+                    url=baseUrl+"/api/open/entrustOrder/createInboundOrder";
+                }
+                //传数据到湘芯科技
+                Map<String, Object> dataMaps = new HashMap<>();
+                List<Map<String, Object>> datas = new LinkedList<Map<String, Object>>();
+                Object wmsclientcode = baseDao.getFieldDataByCondition("Enterprise", "en_wmsclientcode", "1=1");
+                Object[] prodinouts = baseDao.getFieldsDataByCondition("prodinout", new String[]{"pi_whcode","pi_title","pi_biztype","pi_istoimport","pi_purposename","pi_expresscode",
+                        "pi_linkcompany","pi_transportcode","pi_remark","pi_paytype","pi_pickman","pi_idcard","pi_pickcompany","pi_logisticscompany","pi_logisticscode","to_char(pi_deliverytime,'yyyy-MM-dd')","pi_isoutergood","pi_sendcode","pi_address","pi_deliveryfileurl","pi_transport","pi_settlementaccount","pi_expressaccountname","pi_expressrecordcode","pi_attach","pi_recordman","pi_packingcode","pi_remark2"}, "pi_id=" + id);
+                //业务类型 默认05(纯物流)
+                dataMaps.put("bizType",prodinouts[2]);
+                //委托方编码
+                dataMaps.put("principalCode",wmsclientcode);
+                //仓库编码
+                dataMaps.put("warehouseCode",prodinouts[0]);
+                //送货方式
+                // SELF_PICK:上门提货
+                //LOGISTICS_SEND:物流送货
+                //DELIVERY:快递送货
+                dataMaps.put("deliveryType",prodinouts[20]);
+                //单号
+                dataMaps.put("thirdPartyOrderCode",inoutno);
+                //提货人类型
+                //PERSON:个人
+                //ENTERPRISE:企业
+                //OTHER:其他:
+                dataMaps.put("pickType","ENTERPRISE");
+                Map<String, Object> extraMap = new HashMap<>();
+                extraMap.put("master",master.getMa_user());
+                extraMap.put("inOutId",id);
+                dataMaps.put("extraInfo",extraMap);
+                //付费方式
+                //1:寄付(中芯垫付)
+                //2:到付
+                //3:寄付(我方月结)
+                dataMaps.put("payType",(prodinouts[9] == null ? 0:Integer.parseInt(prodinouts[9].toString())));
+                //快递公司
+                dataMaps.put("expressCompany",prodinouts[13]);
+                //快递单号
+                dataMaps.put("expressCode",prodinouts[14]);
+                //预计时间或要求送货时间
+                dataMaps.put("deliveryTime",prodinouts[15]);
+                //附件
+                if(prodinouts[24]!=null&&prodinouts[24]!=""){
+                    String[] arr = {"http://39.108.86.204:8099/ERP/openSystem/downloadAttachById.action?ids="+prodinouts[24].toString()+"&master="+masterName+"&zipFileName=提货委托书附件"};
+                    dataMaps.put("fileUrls",arr);
+                }
+                //制单人
+                dataMaps.put("createBy",prodinouts[25]);
+                if(isOut){
+                    //客户名称
+                    dataMaps.put("customerName",prodinouts[1]);
+                    //是否转进口
+                    dataMaps.put("isToImport",prodinouts[3]);
+                    //对接一些根据条件判断是否必填
+                    //收货联系人
+                    dataMaps.put("linkMan",prodinouts[4]);
+                    //收货联系人电话
+                    dataMaps.put("linkPhone",prodinouts[5]);
+                    //收货联系公司
+                    dataMaps.put("linkCompany",prodinouts[6]);
+                    //运输单号
+                    dataMaps.put("transportCode",prodinouts[7]);
+                    //收货地址(详细)
+                    dataMaps.put("deliveryAddress",prodinouts[18]);
+                    //提货人
+                    dataMaps.put("pickMan",prodinouts[10]);
+                    //身份证号
+                    dataMaps.put("idCard",prodinouts[11]);
+                    //提货公司
+                    dataMaps.put("pickCompany",prodinouts[12]);
+                    //备注
+                    dataMaps.put("orderRemark",prodinouts[27]);
+                }else{
+                    //是否境外来货
+                    dataMaps.put("isOuterGood",prodinouts[16]);
+                    //对接一些根据条件判断是否必填
+                    //提货单号
+                    dataMaps.put("deliveryCode",prodinouts[17]);
+                    //联系人
+                    dataMaps.put("linkMan",prodinouts[4]);
+                    //联系方式
+                    dataMaps.put("linkPhone",prodinouts[5]);
+                    //收货地址(详细)
+                    dataMaps.put("deliveryAddress",prodinouts[18]);
+                    String deliveryFileUrl="";
+                    if(prodinouts[19]!=null&&prodinouts[19]!=""){
+                        deliveryFileUrl="http://39.108.86.204:8099/ERP/openSystem/downloadAttachById.action?ids="+prodinouts[19].toString()+"&master="+masterName+"&zipFileName=提货委托书附件";
+                    }
+                    //提货委托书附件
+                    dataMaps.put("deliveryFileUrl",deliveryFileUrl);
+                    //月结账户
+                    dataMaps.put("settlementAccount",prodinouts[21]);
+                    //开户公司名
+                    dataMaps.put("expressAccountName",prodinouts[22]);
+                    //回单单号
+                    dataMaps.put("expressRecordCode",prodinouts[23]);
+                    //发票号
+                    dataMaps.put("invoiceNumber",prodinouts[26]);
+                    //备注
+                    dataMaps.put("orderRemark",prodinouts[8]);
+                }
+                SqlRowList rs = baseDao.queryForRowSet("select pi_id,pi_class,pi_inoutno,pi_whcode,pr_brand,pr_detail,pd_prodcode,pd_orderprice,pi_currency,pr_spec,pd_ordercode,pd_orderdetno,pi_inoutno,pd_pdno,pd_inqty,pd_outqty,pd_needcheck,pr_needserialnumber,ba_ordercode,to_char(ba_date,'yyyy-MM-dd') ba_date,ba_orderdetno,nvl(pr_ts_user,0) pr_ts_user from prodinout left join ProdIODetail  on pd_piid=pi_id  left join Product on pd_prodcode = pr_code left join batch on ba_code=pd_batchcode where pi_id=" + id+" order by pd_pdno");
+                while (rs.next()) {
+                    Map<String, Object> data = new HashMap<>();
+                    //物料编码
+                    data.put("materialCode",rs.getString("pd_prodcode"));
+                    //物料名
+                    data.put("materialName",rs.getString("pr_detail"));
+                    if(rs.getGeneralInt("pr_ts_user")!=0){
+                        //型号
+                        data.put("materialModel",rs.getString("pd_prodcode"));
+                    }else{
+                        //型号
+                        data.put("materialModel",rs.getString("pr_spec"));
+                    }
+                    //品牌
+                    data.put("materialBrand",rs.getString("pr_brand"));
+                    //序列号必填
+                    data.put("needSerialNumber",rs.getGeneralInt("pr_needserialnumber"));
+                    //序号
+                    data.put("seqNum",rs.getGeneralInt("pd_pdno"));
+
+
+                    if(isOut){
+                        //数量
+                        data.put("materialNumber",rs.getGeneralDouble("pd_outqty"));
+                        //无库存下单
+//						data.put("ignoreStock","Y");
+                        //入库日期
+                        data.put("receiptDate",rs.getString("ba_date"));
+                        if (rs.getString("ba_ordercode")!=null&&rs.getString("ba_ordercode")!=""){
+                            if(!rs.getString("ba_ordercode").startsWith("45")){
+                                //采购订单号
+                                data.put("purchaseOrderCode",rs.getString("ba_ordercode"));
+                                //采购订单行号
+                                data.put("purchaseOrderItem",rs.getGeneralInt("ba_orderdetno"));
+                            }
+                        }
+
+                    }else{
+                        //数量
+                        data.put("materialNumber",rs.getGeneralDouble("pd_inqty"));
+                        //单价
+                        data.put("unitPrice",rs.getGeneralDouble("pd_orderprice"));
+                        //是否质检
+                        data.put("needCheck",rs.getString("pd_needcheck"));
+                        //采购订单号
+                        data.put("purchaseOrderCode",rs.getString("pd_ordercode"));
+                        //采购订单行号
+                        data.put("purchaseOrderItem",rs.getGeneralInt("pd_orderdetno"));
+                    }
+                    //币别
+                    String currency = rs.getString("pi_currency");
+                    if("RMB".equals(currency)){
+                        data.put("currencyCode","CNY");
+                    }else{
+                        data.put("currencyCode",rs.getString("pi_currency"));
+                    }
+                    datas.add(data);
+                }
+                dataMaps.put("items",datas);
+                //Base64加密
+                byte byteXl[]  = JSON.toJSONString(dataMaps, SerializerFeature.WriteMapNullValue, SerializerFeature.QuoteFieldNames).getBytes(	"UTF-8"); //字符串转化为一个字节数组byte[]
+                BASE64Encoder encoder = new BASE64Encoder();
+                String encodedText = encoder.encode(byteXl); //第一种 转Base6
+                String encodedStr = encodedText.replace("\r\n", "");
+                HashMap<String, String> params = new HashMap<String, String>();
+                String secretKey="A51B497B93814189BC489D725C8361AD";
+                String timestamp = String.valueOf(System.currentTimeMillis());
+                params.put("appId", "UAS");
+                // base64转码的json数据
+                params.put("data", encodedStr);
+                // data + secretKey + 时间戳 拼接的字符串计算出的MD5的base64值
+                params.put("signature", md5Util.Md5String(encodedStr+secretKey+timestamp));
+                // 当前时间戳
+                params.put("timeStamp", timestamp);
+                HttpUtil.Response response = null;
+                try {
+                    response = HttpUtil.doPostWithHead("", JSON.toJSONString(params),false,null,Authorization);
+                } catch (Exception e) {
+                    baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                            "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','发送湘芯科技请求失败',sysdate,0,'" + inoutno + "')");
+                    UpdateProdinOutLog(id,false);
+                    e.printStackTrace();
+                    modelMap.put("success", false);
+                    modelMap.put("error","发送湘芯科技请求失败:"+e.getMessage());
+                    return modelMap;
+                }
+                String responseText = response.getResponseText();
+                com.alibaba.fastjson.JSONObject parseObject = JSONArray.parseObject(responseText);
+                String responseCode = parseObject.getString("code");
+                String err = parseObject.getString("message");
+                if("S0000".equals(responseCode)){
+                    baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                            "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','发送湘芯科技成功',sysdate,0,'" + inoutno + "')");
+                    UpdateProdinOutLog(id,true);
+                }else if("F0000".equals(responseCode)){
+                    baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                            "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','发送湘芯科技失败,参数错误:"+err+"',sysdate,0,'" + inoutno + "')");
+                    UpdateProdinOutLog(id,false);
+                    BaseUtil.showError("发送湘芯科技失败,参数错误:"+err);
+                }else if("F0001".equals(responseCode)){
+                    baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                            "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','发送湘芯科技失败,签名不匹配:"+err+"',sysdate,0,'" + inoutno + "')");
+                    UpdateProdinOutLog(id,false);
+                    BaseUtil.showError("发送湘芯科技失败,签名不匹配:"+err);
+                }else if("F0002".equals(responseCode)){
+                    baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                            "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','发送湘芯科技失败,请求超时:"+err+"',sysdate,0,'" + inoutno + "')");
+                    UpdateProdinOutLog(id,false);
+                    BaseUtil.showError("发送湘芯科技失败,请求超时:"+err);
+                }else if("E0003".equals(responseCode)){
+                    baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                            "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','发送湘芯科技失败,Token失效:"+err+"("+Authorization+")',sysdate,0,'" + inoutno + "')");
+                    UpdateProdinOutLog(id,false);
+                    BaseUtil.showError("发送湘芯科技失败,Token失效:"+err+"("+Authorization+")");
+                }else{
+                    baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                            "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','发送湘芯科技失败:"+err+"("+Authorization+")',sysdate,0,'" + inoutno + "')");
+                    UpdateProdinOutLog(id,false);
+                    BaseUtil.showError("发送湘芯科技失败:"+err);
+                }
+
+            } catch (UnsupportedEncodingException e) {
+                baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                        "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','Base64加密失败',sysdate,0,'" + inoutno + "')");
+                UpdateProdinOutLog(id,false);
+                e.printStackTrace();
+                BaseUtil.showError("Base64加密失败");
+            }
+        }
+        modelMap.put("success", true);
+        modelMap.put("error","");
+        return modelMap;
+    }
+
+    @Override
+    public Map<String, Object> resuditafter_post_xx(Integer id, String masterName) {
+        Map<String, Object> modelMap = new HashMap<String, Object>();
+        int count = baseDao.getCount("select count(*) from prodinout where nvl(pi_issendxx,0)<>0 and pi_id=" + id);
+        if(count>0){
+            Master master = enterpriseService.getMasterByName(masterName);;
+            String baseUrl = baseUrlUtil.getBaseUrl(master.getMa_env(),"WMS");
+            String inoutno = baseDao.getFieldValue("prodinout", "pi_inoutno", "pi_id=" + id, String.class);
+            String piClass = baseDao.getFieldValue("prodinout", "pi_class", "pi_id=" + id, String.class);
+            Object inorout = baseDao.getFieldDataByCondition("DOCUMENTSETUP", "ds_inorout", "DS_NAME='" + piClass + "'");
+            String orderType="";
+            if("OUT".equals(inorout)||"-IN".equals(inorout)){
+                orderType="OUT";
+            }else{
+                orderType="IN";
+            }
+            String Authorization = "Bearer "+ tokenCaches.getTokenCache("ProdInOutToken");
+            Map<String, Object> dataMap = new HashMap<>();
+            dataMap.put("master",master.getMa_user());
+            dataMap.put("inOutId",id);
+            dataMap.put("orderType",orderType);
+            dataMap.put("thirdPartyOrderCode",inoutno);
+            byte byteXl[]  = new byte[0]; //字符串转化为一个字节数组byte[]
+            try {
+                byteXl = JSON.toJSONString(dataMap).getBytes(	"UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                        "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','Base64加密失败',sysdate,0,'" + inoutno + "')");
+                e.printStackTrace();
+                BaseUtil.showError("反审核 Base64加密失败");
+            }
+            BASE64Encoder encoder = new BASE64Encoder();
+            String encodedText = encoder.encode(byteXl); //第一种 转Base6
+            String encodedStr = encodedText.replace("\r\n", "");
+            HashMap<String, String> params = new HashMap<String, String>();
+            String secretKey="A51B497B93814189BC489D725C8361AD";
+            String timestamp = String.valueOf(System.currentTimeMillis());
+            params.put("appId", "UAS");
+            // base64转码的json数据
+            params.put("data", encodedStr);
+            // data + secretKey + 时间戳 拼接的字符串计算出的MD5的base64值
+            params.put("signature", md5Util.Md5String(encodedStr+secretKey+timestamp));
+            // 当前时间戳
+            params.put("timeStamp", timestamp);
+            HttpUtil.Response response = null;
+            try {
+                response = HttpUtil.doPostWithHead(baseUrl+"/api/open/entrustOrder/cancelOrder", JSON.toJSONString(params),false,null,Authorization);
+            } catch (Exception e) {
+                baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                        "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','反审核,发送湘芯科技失败',sysdate,0,'" + inoutno + "')");
+                BaseUtil.showError("反审核,发送湘芯科技失败");
+            }
+            String res = response.getResponseText();
+            com.alibaba.fastjson.JSONObject parseObject = JSONArray.parseObject(res);
+            String responseCode = parseObject.getString("code");
+            String err = parseObject.getString("message");
+            if("S0000".equals(responseCode)){
+                baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                        "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','反审核 发送湘芯科技成功',sysdate,0,'" + inoutno + "')");
+            }else if("E0003".equals(responseCode)){
+                baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                        "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','发送湘芯科技失败,Token失效:"+err+"("+Authorization+")',sysdate,0,'" + inoutno + "')");
+                BaseUtil.showError("发送湘芯科技失败,Token失效:"+err+"("+Authorization+")");
+            }else {
+                baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                        "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','反审核 发送湘芯科技失败:"+err+"("+Authorization+")',sysdate,0,'" + inoutno + "')");
+                BaseUtil.showError(err);
+            }
+        }
+        modelMap.put("success", true);
+        modelMap.put("error","");
+        return modelMap;
+    }
+
+    public void UpdateProdinOutLog(int inOutId,boolean isSuccess){
+
+        if(isSuccess){
+            baseDao.updateByCondition("ProdInOut","pi_sendwmsstatus='成功'","pi_id="+inOutId);
+        }else{
+            baseDao.updateByCondition("ProdInOut","pi_sendwmsstatus='失败'","pi_id="+inOutId);
+        }
+
+    }
+}

+ 146 - 0
src/main/java/com/uas/eis/serviceImpl/ProdInOutServiceImpl.java

@@ -0,0 +1,146 @@
+package com.uas.eis.serviceImpl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.uas.eis.dao.BaseDao;
+import com.uas.eis.dao.SqlRowList;
+import com.uas.eis.service.ProdInOutService;
+import com.uas.eis.utils.BaseUtil;
+import com.uas.eis.utils.HmacUtils;
+import com.uas.eis.utils.HttpUtil;
+import com.uas.eis.utils.HttpUtil.Response;
+import com.uas.eis.utils.NumberUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.Map;
+
+@Service("prodInOutService")
+public class ProdInOutServiceImpl implements ProdInOutService {
+
+    @Autowired
+    private BaseDao baseDao;
+
+    @Override
+    public Map<String, Object> postProdInOut(int pi_id, String caller) {
+        Map<String, Object> modelMap = new HashMap<String, Object>();
+        String inoutno = baseDao.getFieldValue("prodinout", "pi_inoutno", "pi_id=" + pi_id, String.class);
+        String piClass = baseDao.getFieldValue("prodinout", "pi_class", "pi_id=" + pi_id, String.class);
+        Object inorout = baseDao.getFieldDataByCondition("DOCUMENTSETUP", "ds_inorout", "DS_NAME='" + piClass + "'");
+        HashMap<String, String> header = new HashMap<String, String>();
+        Map<String, String> params = new HashMap<>();
+        //只有出库才会回调湘芯获取序列号的接口
+        if("OUT".equals(inorout)||"-IN".equals(inorout)){
+            dockingQtyDiff(pi_id);
+        }
+        //时间戳
+        String timestamp = String.valueOf(System.currentTimeMillis());
+        //请求地址+时间戳+dataURL编码+master
+        String urlMessage="https://uas.cicsc.com/ERP/scm/reserve/postProdInOut.action?_timestamp="+timestamp+"&master=ZXGYL_TEST&id="+pi_id+"&caller="+caller;
+        //Hmac加密作为签名
+        String Url=urlMessage+"&_signature="+HmacUtils.encode(urlMessage);
+        try {
+            Response response = HttpUtil.sendPostRequest(Url,header,params,false,null);
+            String res = response.getResponseText();
+            JSONObject jsonObject = JSON.parseObject(res);
+            if(!jsonObject.getBoolean("success")){
+                modelMap.put("success", false);
+                modelMap.put("error",piClass+"(inoutno)过账失败!");
+                return modelMap;
+            }
+            modelMap.put("success", true);
+            modelMap.put("error","");
+            return modelMap;
+        } catch (Exception e) {
+            modelMap.put("success", false);
+            modelMap.put("error",e.getMessage());
+            return modelMap;
+        }
+    }
+
+    public void dockingQtyDiff(int pi_id){
+        SqlRowList rs = baseDao.queryForRowSet("select pi_id,pi_class,pi_type from prodinout where pi_id="+pi_id+" and nvl(pi_issendxx,0)<>0" +
+                "and exists(select 1 from prodiodetail where pd_piid=pi_id and nvl(pd_inqty,0)<>nvl(pd_dockingactqty,0))");
+        if (rs.next()) {
+            String piclass=rs.getGeneralString("pi_class");
+            if("采购验收单".equals(piclass)||"委外验收单".equals(piclass)){//需要更新来源已转数
+                SqlRowList rs_detail = baseDao.queryForRowSet("select pd_ordercode  ,pd_orderdetno " +
+                        " from prodiodetail " +
+                        " where pd_piid="+pi_id+" and nvl(pd_inqty,0)<>nvl(pd_dockingactqty,0) and nvl(pd_ordercode,' ')<>' ' " +
+                        " group by pd_ordercode,pd_orderdetno");
+                while (rs_detail.next()){
+                    String ordercode=rs_detail.getGeneralString("pd_ordercode");
+                    int orderdetno=rs_detail.getGeneralInt("pd_orderdetno");
+                    if("采购验收单".equals(piclass)){
+                        Object qty = baseDao.getFieldDataByCondition("ProdIODetail",
+                                "sum(nvl(pd_inqty,0)-case when pd_status=99 then nvl(pd_outqty,0) else 0 end)", "pd_ordercode='"
+                                        + ordercode+ "' and pd_orderdetno='" +  orderdetno
+                                        + "' and pd_piclass in ('采购验收单','采购验退单') AND pd_piid <>" + pi_id);
+                        Object tQty=baseDao.getFieldDataByCondition("ProdIODetail","sum(nvl(pd_dockingactqty,0))",
+                                "pd_ordercode='"+ ordercode + "' and pd_orderdetno='" +  orderdetno
+                                        + "' and pd_piid =" + pi_id);
+                        qty = qty == null ? 0 : qty;
+                        tQty = tQty == null ? 0 : tQty;
+                        SqlRowList rs_check = baseDao.queryForRowSet("select pd_code,pd_detno,pd_qty from purchasedetail" +
+                                " where pd_code ='"+ordercode+"' and pd_detno="+orderdetno+" and " +
+                                "pd_qty<"+ NumberUtil.add(Double.parseDouble(qty.toString()), Double.parseDouble(tQty.toString())));
+                        if(rs_check.next()){
+                            StringBuffer sb = new StringBuffer("按实际入库数量调整后会超出采购单可转数量],采购单号:").append(ordercode).append(",行号:")
+                                    .append(orderdetno).append(",采购数量:").append(rs_check.getGeneralDouble("pd_qty")).append(",已转数量:")
+                                    .append(qty).append(",本单实际数量:").append(tQty);
+                            BaseUtil.showError(sb.toString());
+                        }else{
+                            // 采购单
+                            baseDao.updateByCondition("PurchaseDetail", "pd_yqty=" + NumberUtil.add(Double.parseDouble(qty.toString()), Double.parseDouble(tQty.toString())),
+                                    "pd_code='"+ordercode+"' and pd_detno="+orderdetno);
+                            baseDao.updateByCondition("PurchaseDetail", "pd_yqty=0",
+                                    "NVL(pd_yqty,0)<=0 and pd_code='"+ordercode+"' and pd_detno="+orderdetno);
+                            baseDao.updateByCondition("PurchaseDetail", "pd_status='AUDITED'",
+                                    "NVL(pd_yqty,0)=0 and pd_code='"+ordercode+"' and pd_detno="+orderdetno);
+                            baseDao.updateByCondition("PurchaseDetail", "pd_status='TURNIN'",
+                                    "NVL(pd_yqty,0)=pd_qty AND NVL(pd_yqty,0) <> 0 and pd_code='"+ordercode+"' and pd_detno="+orderdetno);
+                            baseDao.updateByCondition("PurchaseDetail", "pd_status='PART2IN'",
+                                    "nvl(pd_yqty,0)<nvl(pd_qty,0) and nvl(pd_yqty,0)<>0 and pd_code='"+ordercode+"' and pd_detno="+orderdetno);
+                            Integer puid = baseDao.queryForObject("select nvl(pd_puid,0) from PurchaseDetail where pd_code=? and pd_detno=?", Integer.class,
+                                    ordercode,orderdetno);
+                            if (puid != null && puid > 0) {
+                                int count = baseDao.getCountByCondition("PurchaseDetail", "pd_puid=" + puid);
+                                int yCount = baseDao.getCountByCondition("PurchaseDetail", "pd_puid=" + puid
+                                        + " and nvl(pd_acceptqty,0)=pd_qty");
+                                int xCount = baseDao
+                                        .getCountByCondition("PurchaseDetail", "pd_puid=" + puid + " and nvl(pd_acceptqty,0)=0");
+                                String status = "PART2IN",name="部分入库";
+                                if (yCount == count) {
+                                    status = "TURNIN";
+                                    name="已入库";
+                                }
+                                if (xCount == count) {
+                                    status = "";
+                                    name="";
+                                }
+                                baseDao.updateByCondition("Purchase",
+                                        "pu_turnstatuscode='" + status + "',pu_turnstatus='" + name + "'",
+                                        "pu_id=" + puid);
+                            }
+                        }
+
+                    }else if("委外验收单".equals(piclass)){
+                        Object qty = baseDao.getFieldDataByCondition("ProdIODetail",
+                                "sum(nvl(pd_inqty,0)-case when pd_status=99 then nvl(pd_outqty,0) else 0 end)", "pd_ordercode='"
+                                        + ordercode + "' and pd_piclass in ('委外验收单','委外验退单') AND pd_piid <>" + pi_id);
+                        Object tQty=baseDao.getFieldDataByCondition("ProdIODetail","sum(nvl(pd_dockingactqty,0))",
+                                "pd_ordercode='"+ ordercode + "' and pd_piid =" + pi_id);
+                        qty = qty == null ? 0 : qty;
+                        tQty = tQty == null ? 0 : tQty;
+                        baseDao.updateByCondition("make", " ma_tomadeqty="+NumberUtil.add(Double.parseDouble(qty.toString()), Double.parseDouble(tQty.toString())),
+                                "ma_code='"+ ordercode+ "'");
+                    }
+                }
+            }
+            baseDao.execute("update prodiodetail set pd_inqty=pd_dockingactqty where pd_piid="+pi_id);
+        }
+    }
+
+}

+ 401 - 0
src/main/java/com/uas/eis/serviceImpl/XiangXServiceImpl.java

@@ -0,0 +1,401 @@
+package com.uas.eis.serviceImpl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.uas.eis.dao.BaseDao;
+import com.uas.eis.entity.Employee;
+import com.uas.eis.service.EmployeeService;
+import com.uas.eis.service.ProdInOutService;
+import com.uas.eis.service.XiangXService;
+import com.uas.eis.utils.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import sun.misc.BASE64Decoder;
+import sun.misc.BASE64Encoder;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.security.MessageDigest;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 对接湘芯业务
+ * @author cjx
+ * @date 2020-5-20
+ */
+@Service
+public class XiangXServiceImpl implements XiangXService {
+
+    @Autowired
+    private TokenCaches tokenCaches;
+
+    @Autowired
+    private BaseDao baseDao;
+
+    @Autowired
+    private ProdInOutService prodInOutService;
+
+    @Autowired
+    private EmployeeService employeeService;
+
+    @Autowired
+    private BaseUrlUtil baseUrlUtil;
+
+    static final String GET_PROCESS_UNDO_GROUP_U="SELECT * FROM (SELECT JPROCESSVIEW.*,EM_IMID, ROW_NUMBER() OVER(ORDER BY JP_LAUNCHTIME DESC,JP_ID DESC) RN FROM JPROCESSVIEW LEFT JOIN EMPLOYEE ON EM_CODE=JP_LAUNCHERID WHERE ((JP_NODEDEALMAN= ? AND JP_STATUS='待审批' ) AND CONCAT(CONCAT(JP_CODEVALUE,'#'||JP_NAME),'#'||JP_LAUNCHERNAME) LIKE ? ) OR ((JP_LAUNCHERID= ? AND JP_STATUS='未通过')  AND CONCAT(CONCAT(JP_CODEVALUE,'#'||JP_NAME),'#'||JP_PROCESSNOTE) LIKE ? )) WHERE RN<=? AND RN>=? ORDER BY CASE TYPECODE  WHEN 'process' THEN 1 WHEN 'transferprocess' THEN 2 WHEN 'procand' THEN 3 WHEN 'unprocess' THEN 4 END,RN ASC";
+    static final String GET_PROCESS_ALREADYDO_U="SELECT * FROM (select JPROCESSALREADYDOVIEW.* ,ROW_NUMBER() OVER(ORDER BY JN_DEALTIME DESC) RN from JPROCESSALREADYDOVIEW WHERE JP_CODEVALUE IS NOT NULL AND CONCAT(CONCAT(JP_NAME,'#'||JP_LAUNCHERNAME),'#'||JP_CODEVALUE) LIKE ? AND JN_DEALMANID= ?)WHERE RN<=? AND RN >= ? ORDER BY RN ASC";
+
+    @Override
+    public Map<String, Object> postInOutInfo(int inOutId, String items, String master) {
+        Map<String, Object> modelMap = new HashMap<String, Object>();
+        Employee employee = new Employee();
+        if(employee==null){
+            employee = employeeService.getByCondition("em_code='1000000000'");
+        }
+        if(employee==null){
+            employee.setEm_code("1000000000");
+            employee.setEm_name("WMS过账账号");
+            employee.setEm_type("admin");
+            employee.setEm_master(master);
+        }
+        final String piClass = baseDao.getFieldValue("prodinout", "pi_class", "pi_id=" + inOutId, String.class);
+        final String inoutno = baseDao.getFieldValue("prodinout", "pi_inoutno", "pi_id=" + inOutId, String.class);
+        BASE64Decoder decoder = new BASE64Decoder();
+        Object caller = baseDao.getFieldDataByCondition("DOCUMENTSETUP", "DS_TABLE", "DS_NAME='" + piClass + "'");
+        if (items!=null&&!"".equals(items)){
+            JSONObject json=null;
+            try {
+                String info = new String(decoder.decodeBuffer(items), "UTF-8");
+                info=info.replaceAll("\n","").replaceAll("\r","");
+                json = JSON.parseObject(URLDecoder.decode(info, "UTF-8"));//.replaceAll("\n","")
+            } catch (Exception e) {
+                e.printStackTrace();
+                baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                        "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','差异过账失败,JSON解析失败:"+e.getMessage()+"',sysdate,0,'" + inoutno + "')");
+                modelMap.put("success", false);
+                modelMap.put("error","差异过账失败,JSON解析失败:"+e.getMessage());
+                return modelMap;
+            }
+            try {
+                String itemsStr = json.getString("items");
+                List<Map<Object, Object>> grid = BaseUtil.parseGridStoreToMaps(itemsStr);
+                for (Map<Object, Object> map : grid){
+                    baseDao.updateByCondition("ProdIODetail","PD_DOCKINGACTQTY="+map.get("actualNum"),"pd_piid="+inOutId+" and pd_pdno="+map.get("detailNo"));
+                }
+            }catch (Exception e){
+                baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                        "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','差异过账失败:"+e.getMessage()+"',sysdate,0,'" + inoutno + "')");
+                modelMap.put("success", false);
+                modelMap.put("error","差异过账失败:"+e.getMessage());
+            }
+            //差异过账
+            try {
+                //更新单据日期为当前时间
+                baseDao.updateByCondition("ProdInOut","pi_date=sysdate","pi_id="+inOutId);
+                prodInOutService.postProdInOut(inOutId, caller.toString());
+            }catch (Exception e){
+                UpdateProdinOutLog(inOutId,false);
+                baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                        "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','湘芯差异过账:"+e.getMessage()+"',sysdate,0,'" + inoutno + "')");
+                modelMap.put("success", false);
+                modelMap.put("error",e.getMessage());
+                return modelMap;
+            }
+            baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                    "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','差异过账成功',sysdate,0,'" + inoutno + "')");
+            modelMap.put("success", true);
+            modelMap.put("error","");
+            return modelMap;
+        }else {
+            try {
+                //更新单据日期为当前时间
+                baseDao.updateByCondition("ProdInOut","pi_date=sysdate","pi_id="+inOutId);
+                prodInOutService.postProdInOut(inOutId, caller.toString());
+            }catch (Exception e){
+                UpdateProdinOutLog(inOutId,false);
+                baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                        "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','湘芯过账失败:"+e.getMessage()+"',sysdate,0,'" + inoutno + "')");
+                modelMap.put("success", false);
+                modelMap.put("error",e.getMessage());
+                return modelMap;
+            }
+            Object inorout = baseDao.getFieldDataByCondition("DOCUMENTSETUP", "ds_inorout", "DS_NAME='" + piClass + "'");
+            //只有出库才会回调湘芯获取序列号的接口
+            if("OUT".equals(inorout)||"-IN".equals(inorout)){
+                getMaterialSerialNumber(piClass,inOutId,inoutno,master);
+            }
+            UpdateProdinOutLog(inOutId,true);
+            modelMap.put("success", true);
+            modelMap.put("error","");
+            return modelMap;
+        }
+    }
+
+    @Override
+    public Map<String, Object> createAccountRegister(String data) {
+        Map<String, Object> result = new HashMap<String, Object>();
+        int ar_id=0;
+        try {
+            String accountcode = baseDao.getFieldValue("configs", "data", "caller='AccountRegister!Bank' and code='accountcode'", String.class);
+            if (accountcode==null) {
+                BaseUtil.showError("默认银行科目未设置!");
+            } else {
+                JSONObject jsonobj_Data = JSON.parseObject(data);
+                Map<Object, Object> paramStore = BaseUtil.parseFormStoreToMap(jsonobj_Data.get("Head").toString());
+                Object[] cateInfo = baseDao.getFieldsDataByCondition("Category", new String[] { "ca_name", "ca_currency","ca_id" },
+                        "ca_code ='"+accountcode+"' and nvl(ca_iscashbank,0)<>0 and nvl(ca_isleaf,0)<>0 and nvl(ca_statuscode,' ')='AUDITED'");
+                if(cateInfo==null){
+                    BaseUtil.showError("默认银行科目不存在或未审核!");
+                }
+                if(cateInfo[1]==null){
+                    BaseUtil.showError("默认银行科目币别未设置!");
+                }
+                Object[] currencysmonth  = baseDao.getFieldsDataByCondition("currencysmonth", new String[] { "cm_crrate"},
+                        "CM_CRNAME='"+cateInfo[1]+"' AND cm_yearmonth=to_char(to_date('"+paramStore.get("vo_date")+"','yyyy-mm-dd'),'yyyymm')");
+                if(currencysmonth==null){
+                    BaseUtil.showError("币别"+cateInfo[1]+"单据期间月度汇率未设置!");
+                }
+                if(cateInfo[1]==null){
+                    BaseUtil.showError("默认银行科目币别未设置!");
+                }
+                String arCode = baseDao.sGetMaxNumber("AccountRegister", 2);
+                try {
+                    Map<String, Object> store = new HashMap<String, Object>();
+
+                    ar_id = baseDao.getSeqId("AccountRegister_SEQ");
+                    store.put("ar_id", ar_id);
+                    store.put("ar_code", arCode);
+                    store.put("ar_date", paramStore.get("vo_date").toString());
+                    store.put("ar_type", "费用");
+                    store.put("ar_status", "已提交");
+                    store.put("ar_statuscode", "COMMITED");
+                    //银行信息
+                    store.put("ar_cateid", cateInfo[2]);
+                    store.put("ar_accountcode", accountcode);
+                    store.put("ar_accountname", cateInfo[0]);
+                    store.put("ar_accountcurrency", cateInfo[1]);
+                    store.put("ar_accountrate", (currencysmonth[0] == null ? 1 : currencysmonth[0]));
+                    store.put("ar_sourcetype", "OA上传");
+                    store.put("ar_source", paramStore.get("vo_refno"));
+                    store.put("ar_recordman", (paramStore.get("recordman")==null? "管理员":paramStore.get("recordman")));
+                    store.put("ar_recorddate", paramStore.get("vo_date"));
+                    store.put("ar_departmentcode", paramStore.get("departmentcode"));
+                    store.put("ar_departmentname", paramStore.get("departmentname"));
+                    store.put("ar_errstring", "");
+                    List<String> sqls = new ArrayList<String>();
+                    sqls.add(SqlUtil.getInsertSqlByMap(store, "AccountRegister"));
+                    //明细处理
+                    JSONArray EntriesArray = jsonobj_Data.getJSONArray("Entries");
+                    for (int i = 0; i < EntriesArray.size(); i++) {
+                        Map<String, Object> currentMap = new HashMap<String, Object>();
+                        JSONObject EntriesInfo = JSON.parseObject(EntriesArray.get(i).toString());
+                        int ard_id = baseDao.getSeqId("AccountRegisterdetail_SEQ");
+                        currentMap.put("ARD_ID", ard_id);
+                        currentMap.put("ARD_ARID", ar_id);
+                        currentMap.put("ARD_DETNO", EntriesInfo.get("vd_detno"));
+                        currentMap.put("ard_explanation", EntriesInfo.get("vd_explanation"));
+                        currentMap.put("ard_catecode", EntriesInfo.get("vd_catecode"));
+                        currentMap.put("ard_currency", EntriesInfo.get("vd_currency"));
+                        currentMap.put("ard_rate", EntriesInfo.get("vd_rate"));
+                        currentMap.put("ard_doubledebit", EntriesInfo.get("vd_debit"));
+                        //currentMap.put("ard_doublecredit",EntriesInfo.get("vd_credit"));
+                        sqls.add(SqlUtil.getInsertSqlByMap(currentMap, "AccountRegisterdetail"));
+                        if (EntriesInfo.get("detailass") != null) {
+                            List<Map<Object, Object>> grid = BaseUtil.parseGridStoreToMaps(EntriesInfo.get("detailass").toString());
+                            List<Map<Object, Object>> assGrid = new ArrayList<Map<Object, Object>>();
+                            int n = 1;
+                            for (Map<Object, Object> map : grid) {
+                                Map<Object, Object> assMap = new HashMap<Object, Object>();
+                                int ars_id = baseDao.getSeqId("ACCOUNTREGISTERDETAILASS_SEQ");
+                                assMap.put("ARS_ID", ars_id);
+                                assMap.put("ARS_ARDID", ard_id);
+                                assMap.put("ARS_DETNO", n++);
+                                assMap.put("ars_asstype", map.get("vds_asstype"));
+                                assMap.put("ARS_ASSID", ar_id);
+                                assMap.put("ARS_ASSCODE", map.get("vds_asscode"));
+                                assMap.put("ARS_ASSNAME", map.get("vds_assname"));
+                                assMap.put("ARS_TYPE", "AccountRegister!Bank");
+                                assGrid.add(assMap);
+                            }
+                            sqls.addAll(SqlUtil.getInsertSqlbyList(assGrid, "ACCOUNTREGISTERDETAILASS", "ars_id"));
+                        }
+                    }
+                    sqls.add("update AccountRegisterdetail set (ard_catedesc)=(select ca_name from Category where ca_Code=ard_catecode) where ard_arid=" + ar_id);
+                    sqls.add("update AccountRegisterdetail set ard_debit=ard_doubledebit*ard_rate where ard_arid=" + ar_id);
+                    sqls.add("update AccountRegisterdetail set ard_currency='RMB' where nvl(ard_currency,' ')='CNY' and ard_arid=" + ar_id);
+                    sqls.add("delete from ACCOUNTREGISTERDETAIL  where  ard_arid=" + ar_id + " and nvl(ard_debit,0)=0");
+                    //复币  根据明细科目
+                    sqls.add("update  AccountRegister set ar_currencytype=-1 where ar_id=" + ar_id + " and exists(" +
+                            "select 1 from ACCOUNTREGISTERDETAIL left join Category on ca_code=ard_catecode" +
+                            " where ard_arid=ar_id and nvl(ca_currencytype,0)<>0)");
+                    sqls.add("update  AccountRegister set ar_payment=(select sum(nvl(ard_debit,0)) from ACCOUNTREGISTERDETAIL where ard_arid=ar_id ) where ar_id=" + ar_id);
+                    sqls.add("update  AccountRegister set ar_memo=(select ard_explanation from(select * from ACCOUNTREGISTERDETAIL where ard_arid=" + ar_id + " order by ard_detno) where rownum<2) where ar_id=" + ar_id);
+
+                    baseDao.execute(sqls);
+                }catch (Exception e){
+                    result.put("success",false);
+                    result.put("error","参数错误");
+                    result.put("numbers","");
+                    createLog(data,"0","银行登记","参数错误","");
+                    return result;
+                }
+                String errStr =baseDao.callProcedure("SP_ACCOUNTREGISTERCHECK", new Object[] { arCode});
+                if (errStr != null)
+                    BaseUtil.showError(errStr);
+                result.put("success",true);
+                result.put("error","");
+                result.put("numbers",arCode);
+                createLog(data,"1","银行登记","",arCode);
+                return result;
+            }
+        }catch(Exception e){
+            List<String> dealSqls = new ArrayList<String>();
+            //e.printStackTrace();
+            dealSqls.add("delete AccountRegisterdetailASS where ARS_ASSID ="+ar_id);
+            dealSqls.add("delete AccountRegisterdetail where ard_arid="+ar_id);
+            dealSqls.add("delete AccountRegister where ar_id="+ar_id);
+            baseDao.execute(dealSqls);
+            result.put("success",false);
+            result.put("error",e.getMessage());
+            result.put("numbers","");
+            createLog(data,"0","银行登记",e.getMessage(),"");
+            return result;
+        }
+        return null;
+    }
+
+    @Override
+    public void createLog(String data, String result, String type, String err, String code) {
+        baseDao.execute("insert into ERPSYNC_MESSAGELOG(EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) " +
+                "values('"+data+"','"+type+"','"+err+"',sysdate,'"+result+"','"+code+"')");
+    }
+
+    @Override
+    public Map<String, Object> getProcessList(int page, int pageSize, String type, String keyword, String emcode) {
+        Map<String, Object> map = new HashMap<String, Object>();
+        Employee em = employeeService.getByCondition("em_code='"+emcode+"'");
+        if (em!=null){
+            int start = ((page - 1) * pageSize + 1);
+            int end = page * pageSize;
+            keyword = "%"+(String.valueOf(keyword).toUpperCase().equals("NULL") ? "" : keyword)+"%";
+            if("toDo".equals(type)) {//待审批
+                //需要汇集数据
+                map.put("data", baseDao.queryForList(GET_PROCESS_UNDO_GROUP_U,new Object[]{em.getEm_code(),keyword,em.getEm_code(),keyword,end,start}));
+                map.put("totalCount", baseDao.getCountByCondition("JPROCESSVIEW",
+                        "(JP_NODEDEALMAN='"+em.getEm_code()+"' AND JP_STATUS='待审批' AND CONCAT(CONCAT(JP_CODEVALUE,'#'||JP_NAME),'#'||JP_LAUNCHERNAME) LIKE '"+keyword+"') " +
+                                "OR (JP_LAUNCHERID='"+em.getEm_code()+"' AND JP_STATUS='未通过' AND CONCAT(CONCAT(JP_CODEVALUE,'#'||JP_NAME),'#'||JP_PROCESSNOTE) LIKE '"+keyword+"') "));
+            }else if("alreadyDo".equals(type)){//已审批
+                map.put("totalCount", baseDao.getCountByCondition("JPROCESSALREADYDOVIEW",
+                        "(JP_CODEVALUE IS NOT NULL AND JN_DEALMANID='"+em.getEm_code()+"' AND CONCAT(CONCAT(JP_NAME,'#'||JP_LAUNCHERNAME),'#'||JP_CODEVALUE) LIKE '"+keyword+"')"));
+                map.put("data", baseDao.queryForList(GET_PROCESS_ALREADYDO_U,new Object[]{keyword,em.getEm_code(),end,start}));
+            }
+            map.put("success",true);
+            map.put("error","");
+        }else{
+            map.put("success", false);
+            map.put("error", "编号("+emcode+")系统找不到人员");
+        }
+
+        return map;
+    }
+
+    public void UpdateProdinOutLog(int inOutId,boolean isSuccess){
+
+        if(isSuccess){
+            baseDao.updateByCondition("ProdInOut","pi_wmspoststastus='成功'","pi_id="+inOutId);
+        }else{
+            baseDao.updateByCondition("ProdInOut","pi_wmspoststastus='失败'","pi_id="+inOutId);
+        }
+
+    }
+
+    //回调获取湘芯物料序列号
+    public void getMaterialSerialNumber(final String piClass, final int inOutId, final String inoutno, final String master){
+        new Thread() {
+            public void run() {
+                String ma_env = baseDao.getFieldValue("N_DATACENTER.master", "ma_env", "ma_user='"+master+"'", String.class);
+                String Authorization = "Bearer "+ tokenCaches.getTokenCache("ProdInOutToken");
+                Map<String, Object> dataMap = new HashMap<>();
+                dataMap.put("master",master);
+                dataMap.put("thirdPartyOrderCode",inoutno);
+                dataMap.put("inOutId",inOutId);
+                byte byteXl[]  = new byte[0]; //字符串转化为一个字节数组byte[]
+                try {
+                    byteXl = JSON.toJSONString(dataMap).getBytes(	"UTF-8");
+                } catch (UnsupportedEncodingException e) {
+                    baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                            "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','Base64加密失败',sysdate,0,'" + inoutno + "')");
+                    e.printStackTrace();
+                }
+                BASE64Encoder encoder = new BASE64Encoder();
+                String encodedText = encoder.encode(byteXl); //第一种 转Base6
+                String encodedStr = encodedText.replace("\r\n", "");
+                HashMap<String, String> params = new HashMap<String, String>();
+                String secretKey="A51B497B93814189BC489D725C8361AD";
+                String timestamp = String.valueOf(System.currentTimeMillis());
+                params.put("appId", "UAS");
+                // base64转码的json数据
+                params.put("data", encodedStr);
+                // data + secretKey + 时间戳 拼接的字符串计算出的MD5的base64值
+                params.put("signature", Md5String(encodedStr+secretKey+timestamp));
+                // 当前时间戳
+                params.put("timeStamp", timestamp);
+                HttpUtil.Response response = null;
+                String baseUrl = baseUrlUtil.getBaseUrl(ma_env, "WMS");
+                try {
+                    response = HttpUtil.doPostWithHead(baseUrl+"/api/open/entrustOrder/queryMaterialSerialNumber", JSON.toJSONString(params),false,null,Authorization);
+                    String res = response.getResponseText();
+                    JSONObject datajson = JSON.parseObject(res);
+                    String responseCode = datajson.getString("code");
+                    String err = datajson.getString("message");
+                    if ("S0000".equals(responseCode)){
+                        baseDao.execute("delete from BARCODE where bar_piid='" + inOutId+"'");
+                        String datainfo = datajson.getString("data");
+                        List<Map<Object, Object>> griddata = BaseUtil.parseGridStoreToMaps(datainfo);
+                        for (Map<Object, Object> map : griddata){
+                            baseDao.execute("insert into BARCODE(bar_id,bar_code,bar_prodcode,bar_indate,bar_piid,bar_inoutno,bar_pdno) " +
+                                    "values(barcode_seq.nextval,'"+map.get("bar_code")+"','"+map.get("bar_prodcode")+"',sysdate,"+inOutId+",'"+inoutno+"',"+map.get("bar_pdno")+")");
+                        }
+                    }else if("E0003".equals(responseCode)){
+                        baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                                "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','发送湘芯科技失败,Token失效:"+err+"("+Authorization+")',sysdate,0,'" + inoutno + "')");
+                        BaseUtil.showError("发送湘芯科技失败,Token失效:"+err+"("+Authorization+")");
+                    }else {
+                        baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                                "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','回调湘芯科技获取序列号请求失败:"+err+"("+Authorization+")',sysdate,0,'" + inoutno + "')");
+                    }
+
+                } catch (Exception e) {
+                    baseDao.execute("insert into ERPSYNC_MESSAGELOG (EL_ID,EL_DATA,EL_TYPE,EL_ERROR,EL_DATE,EL_STATUS,EL_CODE) values " +
+                            "(ERPSYNC_MESSAGELOG_SEQ.nextval,'','" + piClass + "','回调湘芯科技获取序列号请求失败',sysdate,0,'" + inoutno + "')");
+                    e.printStackTrace();
+                }
+            }
+        }.start();
+    }
+
+
+    /**
+     * md5加密
+     * @param old
+     * @return
+     *
+     */
+    public String Md5String(String old) {
+        try {
+            //java自带工具包MessageDigest
+            MessageDigest md5 = MessageDigest.getInstance("md5");
+            //实现Base64的编码
+            BASE64Encoder base64 = new BASE64Encoder();
+            //进行加密
+            String newStr = base64.encode(md5.digest(old.getBytes("utf-8")));
+            return newStr;//返回加密后的字符
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+}

+ 32 - 0
src/main/java/com/uas/eis/utils/BaseUrlUtil.java

@@ -0,0 +1,32 @@
+package com.uas.eis.utils;
+
+import org.springframework.stereotype.Component;
+
+/**
+ * 获取对应业务的URL
+ */
+@Component
+public class BaseUrlUtil {
+
+    public String getBaseUrl(String ma_env,String flag) {
+        String url = "";
+        if (("WMS").equals(flag)){
+            //WMS数据对接
+            if(("test").equals(ma_env)){
+                url = "http://scp.test2.cicsc.com";
+            }else if("prod".equals(ma_env)){
+                url = "http://scp.on.cicsc.com";
+            }
+        }else if("Page".equals(flag)){
+            //嵌套界面
+            if(("test").equals(ma_env)){
+                url = "http://wms.test2.cicsc.com";
+            }else if("prod".equals(ma_env)){
+                url = "https://scp.cicsc.com";
+            }
+        }
+
+        return url;
+    }
+
+}

+ 17 - 0
src/main/java/com/uas/eis/utils/BaseUtil.java

@@ -151,5 +151,22 @@ public class BaseUtil {
 		json.put("grid", JSONArray.fromObject(gridList));
 		return json.toString();
 	}
+
+	/**
+	 * 将formStore解析成一个map
+	 *
+	 * @param formStore
+	 *            字符串形式的表单数据
+	 * @return map形式的表单数据
+	 */
+	public static Map<Object, Object> parseFormStoreToMap(String formStore) {
+		try {
+			return FlexJsonUtil.fromJson(formStore);
+		} catch (Exception e) {
+			return JSONUtil.toMap(formStore);
+		}
+	}
+
+
 	
 }

+ 6 - 0
src/main/java/com/uas/eis/utils/CollectionUtil.java

@@ -15,6 +15,7 @@ import java.util.Set;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
 
+import org.springframework.util.ObjectUtils;
 import org.springframework.util.StringUtils;
 
 public class CollectionUtil {
@@ -332,4 +333,9 @@ public class CollectionUtil {
 		Collections.reverse(lists);
 		return lists;
 	}
+
+	public static List arrayToList(Object source) {
+		return Arrays.asList(ObjectUtils.toObjectArray(source));
+	}
+
 }

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

@@ -251,6 +251,38 @@ public class HttpUtil {
         return Response.getResponse(response);
     }
 
+	/**
+	 * 发送post请求
+	 *
+	 * @param postUrl
+	 * @param formData
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response doXXPost(String postUrl, String formData,  boolean sign, String signKey) throws Exception {
+		//采用绕过验证的方式处理https请求
+		SSLContext sslcontext = createIgnoreVerifySSL();
+
+		// 设置协议http和https对应的处理socket链接工厂的对象
+		Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
+				.register("http", PlainConnectionSocketFactory.INSTANCE)
+				.register("https", new SSLConnectionSocketFactory(sslcontext))
+				.build();
+		PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
+		HttpClients.custom().setConnectionManager(connManager);
+
+		//创建自定义的httpclient对象
+		CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connManager).build();
+		//CloseableHttpClient httpClient = HttpClients.createDefault();
+		postUrl = getUrl(postUrl, sign, signKey);
+		HttpPost post = new HttpPost(postUrl);
+		StringEntity postingString = new StringEntity(formData, HTTP.UTF_8);
+		post.setEntity(postingString);
+		post.setHeader("Content-type", "application/json");
+		CloseableHttpResponse response = httpClient.execute(post);
+		return Response.getResponse(response);
+	}
+
 	/*云顶传输数据*/
 	public static Response doPostToYunding(String url,String data,String timestamp) throws Exception{
 		url = getUrlToYunding(url,data,timestamp);
@@ -334,9 +366,13 @@ public class HttpUtil {
 	 */
 	private static String getUrl(String url, boolean sign, String signKey) {
 		StringBuilder buf = new StringBuilder(url);
+		if (url.indexOf("?") == -1)
+			buf.append("?");
+		else if (!url.endsWith("&"))
+			buf.append("&");
 		if (sign) {
 			// 加时间戳,保持相同请求每次签名均不一样
-			buf.append("&_timestamp=").append(System.currentTimeMillis());
+			buf.append("_timestamp=").append(System.currentTimeMillis());
 			String message = buf.toString();
 			// 对请求串进行签名
 			buf.append("&_signature=").append(HmacUtils.encode(message, signKey));
@@ -998,4 +1034,43 @@ public class HttpUtil {
 			return null;
 		}
 	}
+
+	/**
+	 * 发起http请求
+	 *
+	 * @param method
+	 *            请求方法POST、PUT
+	 * @param url
+	 *            请求链接
+	 * @param datas
+	 *            参数
+	 * @param sign
+	 *            是否签名
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response doPostWithHead(String postUrl, String formData,  boolean sign, String signKey,String authorization) throws Exception {
+		//采用绕过验证的方式处理https请求
+		SSLContext sslcontext = createIgnoreVerifySSL();
+
+		// 设置协议http和https对应的处理socket链接工厂的对象
+		Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
+				.register("http", PlainConnectionSocketFactory.INSTANCE)
+				.register("https", new SSLConnectionSocketFactory(sslcontext))
+				.build();
+		PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
+		HttpClients.custom().setConnectionManager(connManager);
+
+		//创建自定义的httpclient对象
+		CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connManager).build();
+		//CloseableHttpClient httpClient = HttpClients.createDefault();
+		postUrl = getUrl(postUrl, sign, signKey);
+		HttpPost post = new HttpPost(postUrl);
+		StringEntity postingString = new StringEntity(formData, HTTP.UTF_8);
+		post.setEntity(postingString);
+		post.setHeader("Content-type", "application/json");
+		post.setHeader("Authorization",authorization);
+		CloseableHttpResponse response = httpClient.execute(post);
+		return Response.getResponse(response);
+	}
 }

+ 24 - 0
src/main/java/com/uas/eis/utils/MD5Util.java

@@ -1,10 +1,14 @@
 package com.uas.eis.utils;
 
+import org.springframework.stereotype.Component;
+import sun.misc.BASE64Encoder;
+
 import java.io.UnsupportedEncodingException;
 import java.math.BigInteger;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 
+@Component
 public class MD5Util {
 
 	public static String MD5(String plainText) {
@@ -66,4 +70,24 @@ public class MD5Util {
 		return result;
 		
 	}
+
+	/**
+	 * md5加密
+	 * @param old
+	 * @return
+	 *
+	 */
+	public String Md5String(String old) {
+		try {
+			//java自带工具包MessageDigest
+			MessageDigest md5 = MessageDigest.getInstance("md5");
+			//实现Base64的编码
+			BASE64Encoder base64 = new BASE64Encoder();
+			//进行加密
+			String newStr = base64.encode(md5.digest(old.getBytes("utf-8")));
+			return newStr;//返回加密后的字符
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
 }

+ 60 - 0
src/main/java/com/uas/eis/utils/RedisConfig.java

@@ -0,0 +1,60 @@
+package com.uas.eis.utils;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.cache.CacheManager;
+import org.springframework.cache.annotation.CachingConfigurerSupport;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.cache.RedisCacheManager;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+/**
+ * redis配置类
+ *
+ * @author cjx
+ * @date 2020-5-21
+ */
+@Configuration
+//@EnableCaching // 开启注解
+public class RedisConfig extends CachingConfigurerSupport {
+
+    @Bean
+    public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate) {
+        return new RedisCacheManager(redisTemplate);
+    }
+
+    /**
+     * key 序列号的要使用:StringRedisSerializer
+     * @param redisConnectionFactory
+     * @return
+     */
+    @Bean
+    @SuppressWarnings("all")
+    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
+        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
+        template.setConnectionFactory(factory);
+        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
+        ObjectMapper om = new ObjectMapper();
+        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+        jackson2JsonRedisSerializer.setObjectMapper(om);
+        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
+        // key采用String的序列化方式
+        template.setKeySerializer(stringRedisSerializer);
+        // hash的key也采用String的序列化方式
+        template.setHashKeySerializer(stringRedisSerializer);
+        // value序列化方式采用jackson
+        template.setValueSerializer(jackson2JsonRedisSerializer);
+        // hash的value序列化方式采用jackson
+        template.setHashValueSerializer(jackson2JsonRedisSerializer);
+        template.afterPropertiesSet();
+        return template;
+    }
+
+}

+ 144 - 0
src/main/java/com/uas/eis/utils/RedisUtil.java

@@ -0,0 +1,144 @@
+package com.uas.eis.utils;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+import java.util.concurrent.TimeUnit;
+
+
+/**
+ * Redis工具类
+ *
+ * @author cjx
+ * @date 2020-5-21
+ */
+@Component
+public class RedisUtil {
+
+    @Autowired
+    private RedisTemplate<String, Object> redisTemplate;
+
+    /**
+     * 指定缓存失效时间
+     * @param key 键
+     * @param time 时间(秒)
+     * @return
+     */
+    public boolean expire(String key, long time) {
+        try {
+            if (time > 0) {
+                redisTemplate.expire(key, time, TimeUnit.SECONDS);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 根据key 获取过期时间
+     * @param key 键 不能为null
+     * @return 时间(秒) 返回0代表为永久有效
+     */
+    public long getExpire(String key) {
+        return redisTemplate.getExpire(key, TimeUnit.SECONDS);
+    }
+
+    /**
+    * @Description 判断key是否存在
+    * @Param: [key]
+    * @return: boolean
+    */
+    public boolean hasKey(String key) {
+        try {
+            return redisTemplate.hasKey(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+    * @Description 删除缓存
+    * @Param: [keys]
+    * @return: void
+    */
+    @SuppressWarnings("unchecked")
+    public void del(String... keys) {
+        if (null != keys && keys.length > 0) {
+            if (keys.length == 1) {
+                redisTemplate.delete(keys[0]);
+            } else {
+                redisTemplate.delete(CollectionUtil.arrayToList(keys));
+            }
+        }
+    }
+
+    /**
+    * @Description 获取key
+    * @Param: [key]
+    * @return: java.lang.Object
+    */
+    public Object get(String key) {
+        return key == null ? null : redisTemplate.opsForValue().get(key);
+    }
+
+    /**
+    * @Description 放入缓存
+    * @Param: [key, obj]
+    * @return: boolean
+    */
+    public boolean set(String key, Object obj) {
+        try {
+            redisTemplate.opsForValue().set(key, obj);
+            return true;
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+    /**
+    * @Description 添加时间
+    * @Param: [key, value, time]
+    * @return: boolean
+    */
+    public boolean set(String key, Object value, long time) {
+        try {
+            if (time > 0) {
+                redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
+            } else {
+                set(key, value);
+            }
+            return true;
+        }catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+    * @Description 要增加delta
+    * @Param: [key, delta]
+    * @return: long
+    */
+    public long incr(String key, long delta) {
+        if (delta < 0) {
+            throw new RuntimeException("递增因子必须大于0");
+        }
+        return redisTemplate.opsForValue().increment(key, delta);
+    }
+
+
+    /**
+     * @Description 要减少delta
+     * @Param: [key, delta]
+     * @return: long
+     */
+    public long decr(String key, long delta) {
+        if (delta < 0) {
+            throw new RuntimeException("递减因子必须大于0");
+        }
+        return redisTemplate.opsForValue().increment(key, -delta);
+    }
+}

+ 51 - 0
src/main/java/com/uas/eis/utils/TokenCaches.java

@@ -0,0 +1,51 @@
+package com.uas.eis.utils;
+
+import com.alibaba.fastjson.JSON;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 获取Token并缓存
+ *
+ * @author cjx
+ * @date 2020-5-21
+ */
+@Component
+public class TokenCaches {
+
+    @Autowired
+    RedisUtil redisUtils;
+
+    /**
+     * Redis缓存token 取token
+     */
+    public String  getTokenCache(String key) {
+        if (redisUtils.hasKey(key)) {
+            return redisUtils.get(key).toString();
+        } else {
+            if ("ProdInOutToken".equals(key)) {
+                String url = "http://scp.test2.cicsc.com";
+                HashMap<Object, Object> params = new HashMap<Object, Object>();
+                params.put("appId", "UAS");
+                params.put("appKey", "LTAIE8bntQ4MLMc0");
+                String baseUrl = url+"/api/gateway/openApiAuth";
+                try {
+                    HttpUtil.Response response = HttpUtil.doPost(baseUrl, JSON.toJSONString(params), false, null);
+                    String res = response.getResponseText();
+                    Map<Object, Object> resMap = BaseUtil.parseFormStoreToMap(res);
+                    if ("S0000".equals(String.valueOf(resMap.get("code")))) {
+                        String accessToken = resMap.get("result").toString();
+                        redisUtils.set(key,accessToken,3600);
+                        return accessToken;
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return null;
+    }
+}

+ 30 - 4
src/main/resources/application.yml

@@ -2,10 +2,10 @@ spring:
     datasource:
         type: com.alibaba.druid.pool.DruidDataSource
         driverClassName: oracle.jdbc.OracleDriver
-        username: yunding
-        password: select!#%@$^
-#        url: jdbc:oracle:thin:@oclean.uicp.net:1521:orcl
-        url: jdbc:oracle:thin:@127.0.0.1:1521:orcl
+        username: ZXGYL_TEST
+        password: select!#%*(
+        url: jdbc:oracle:thin:@10.8.0.19:1521:orcl
+#        url: jdbc:oracle:thin:@127.0.0.1:1521:orcl
         initialSize: 10
         maxActive: 80
         minIdle: 10
@@ -21,6 +21,32 @@ spring:
         filters: stat
         removeAbandoned: true
         removeAbandonedTimeout: 1800
+     ## Redis 配置
+    redis:
+        ## Redis数据库索引(默认为0)
+        database: 0
+        ## Redis服务器地址
+        host: 127.0.0.1
+        ## Redis服务器连接端口
+        port: 6379
+        ## Redis服务器连接密码(默认为空)
+        password:
+        jedis:
+          pool:
+            ## 连接池最大连接数(使用负值表示没有限制)
+            #spring.redis.pool.max-active=8
+            max-active: 8
+            ## 连接池最大阻塞等待时间(使用负值表示没有限制)
+            #spring.redis.pool.max-wait=-1
+            max-wait: -1
+            ## 连接池中的最大空闲连接
+            #spring.redis.pool.max-idle=8
+            max-idle: 8
+            ## 连接池中的最小空闲连接
+            #spring.redis.pool.min-idle=0
+            min-idle: 0
+        ## 连接超时时间(毫秒)
+        timeout: 1200
     http:
         encoding:
             force: true