浏览代码

用工实名制接口测试。

zhengqiang 5 年之前
父节点
当前提交
002e6d69a4

+ 5 - 1
common/pom.xml

@@ -194,7 +194,11 @@
             <version>3.7.0</version>
         </dependency>
 
-
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk16</artifactId>
+            <version>1.46</version>
+        </dependency>
     </dependencies>
 
 </project>

+ 134 - 0
common/src/main/java/com/jpsoft/smart/modules/common/utils/AESUtil.java

@@ -0,0 +1,134 @@
+package com.jpsoft.smart.modules.common.utils;
+
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+
+import java.io.UnsupportedEncodingException;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.security.Security;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.crypto.Cipher;
+import javax.crypto.KeyGenerator;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.IvParameterSpec;
+import javax.crypto.spec.SecretKeySpec;
+
+public class AESUtil{
+    private static final String KEY_ALGORITHM = "AES";
+    private static final String DEFAULT_CIPHER_ALGORITHM = "AES/CBC/PKCS7Padding";//默认的加密算法
+
+    static {
+        Security.addProvider(new BouncyCastleProvider());
+    }
+
+    /**
+     * AES 加密操作
+     * @param content 待加密内容
+     * @param key 加密密钥
+     * @return 返回Base64转码后的加密数据
+     */
+    public static String encrypt(String content, String key) {
+        try {
+            Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);// 创建密码器
+
+            byte[] byteContent = content.getBytes("utf-8");
+            IvParameterSpec ivParameterSpec = createIV(key);
+
+            cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(key),ivParameterSpec);// 初始化为加密模式的密码器
+
+            byte[] result = cipher.doFinal(byteContent);// 加密
+
+            System.out.println(cipher.getBlockSize());
+
+            return Base64.encode(result);//通过Base64转码返回
+
+        } catch (Exception ex) {
+            Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex);
+        }
+
+        return null;
+    }
+
+    /**
+     * AES 解密操作
+     *
+     * @param content
+     * @param key
+     * @return
+     */
+    public static String decrypt(String content, String key) {
+
+        try {
+            //实例化
+            Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
+            IvParameterSpec ivParameterSpec = createIV(key);
+
+            //使用密钥初始化,设置为解密模式
+            cipher.init(Cipher.DECRYPT_MODE, getSecretKey(key),ivParameterSpec);
+
+            //执行操作
+            byte[] result = cipher.doFinal(Base64.decode(content));
+
+            return new String(result, "utf-8");
+        } catch (Exception ex) {
+            Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex);
+        }
+
+        return null;
+    }
+
+    // 创建初始化向量, 长度为16bytes, 向量的作用其实就是salt
+    private static IvParameterSpec createIV(String key) throws UnsupportedEncodingException {
+        byte[] src = key.getBytes("UTF-8");
+
+        if (src.length < 16) {
+            throw new RuntimeException("无法从Key中获取偏移量!");
+        }
+
+        byte[] bs = new byte[16];
+        for (int i=0; i<16; i++){
+            bs[i] = src[i];
+        }
+
+        return new IvParameterSpec(bs);
+    }
+
+    /**
+     * 生成加密秘钥
+     *
+     * @return
+     */
+    private static SecretKeySpec getSecretKey(final String key) throws UnsupportedEncodingException {
+        //返回生成指定算法密钥生成器的 KeyGenerator 对象
+//        KeyGenerator kg = null;
+//
+//        try {
+//            kg = KeyGenerator.getInstance(KEY_ALGORITHM);
+//
+//            //AES 要求密钥长度为 256
+//            kg.init(256, new SecureRandom(key.getBytes("UTF-8")));
+//
+//            //生成一个密钥
+//            SecretKey secretKey = kg.generateKey();
+//
+//            return new SecretKeySpec(secretKey.getEncoded(), KEY_ALGORITHM);// 转换为AES专用密钥
+//        } catch (Exception ex) {
+//            Logger.getLogger(AESUtil.class.getName()).log(Level.SEVERE, null, ex);
+//        }
+
+        SecretKeySpec keySpec = new SecretKeySpec(key.getBytes("UTF-8"), KEY_ALGORITHM);
+
+        return keySpec;
+    }
+
+    public static void main(String[] args) {
+        String content = "421002198311131816";
+        String key = "534a33e888b001a246b635b76e42d0dd";
+
+        //g5mIt+8LgfpLWpPOXg1vyl7j1jv+wN3vwIb6wdpir5M=
+        String enc = encrypt(content,key);
+
+        System.out.println(enc);
+    }
+}

+ 64 - 0
common/src/main/java/com/jpsoft/smart/modules/realname/dto/CorpDTO.java

@@ -0,0 +1,64 @@
+package com.jpsoft.smart.modules.realname.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@NoArgsConstructor
+@Data
+public class CorpDTO {
+
+    /**
+     * SOCIALCREDITCODE : 91320100MA1MK8H24G
+     * PROJECTCODE : 4201051561042227178
+     * COMPANYTYPE : 2
+     * NAME : 南京中建劳务有限公司
+     * OFFICEADDRESS : 南京市
+     * REGISTEREDAREA : 420101
+     * REGISTEREDADDRESS : 江苏省南京市
+     * LEGALPERSON : 小刚
+     * LEGALPERSONPHONE : 13222222222
+     * PROJECTLEADER : 项目
+     * PROJECTLEADERPHONE : 15112341234
+     * LABORLEADER : 项目
+     * LABORLEADERPHONE : 13533332222
+     * DESPOSIT : 1000.0
+     * REGISTERDATE : 2010-03-23
+     */
+    @JSONField(name="SOCIALCREDITCODE")
+    private String socialCreditCode;
+    @JSONField(name="PROJECTCODE")
+    private String projectCode;
+    @JSONField(name="COMPANYTYPE")
+    private int companyType;
+    @JSONField(name="NAME")
+    private String name;
+    @JSONField(name="OFFICEADDRESS")
+    private String officeAddress;
+    @JSONField(name="REGISTEREDAREA")
+    private String registeredArea;
+    @JSONField(name="REGISTEREDADDRESS")
+    private String registeredAddress;
+    @JSONField(name="LEGALPERSON")
+    private String legalPerson;
+    @JSONField(name="LEGALPERSONPHONE")
+    private String legalPersonPhone;
+    @JSONField(name="PROJECTLEADER")
+    private String projectLeader;
+    @JSONField(name="PROJECTLEADERPHONE")
+    private String projectLeaderPhone;
+    @JSONField(name="LABORLEADER")
+    private String laborLeader;
+    @JSONField(name="LABORLEADERPHONE")
+    private String laborLeaderPhone;
+    @JSONField(name="PROJECTMANAGER")
+    private String projectManager;
+    @JSONField(name="PROJECTMANAGERPHONE")
+    private String projectManagerPhone;
+    @JSONField(name="DESPOSIT")
+    private BigDecimal desposit;
+    @JSONField(name="REGISTERDATE")
+    private String registerDate;
+}

+ 82 - 0
common/src/main/java/com/jpsoft/smart/modules/realname/dto/ProjectDTO.java

@@ -0,0 +1,82 @@
+package com.jpsoft.smart.modules.realname.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class ProjectDTO {
+
+    /**
+     * ADDRESS : 湖北省
+     * CONTRACTPRICE : 80000
+     * DEPARTMENTINDUSTRYID : 5
+     * DISTRICTCCODE : 420105
+     * DISTRICTCODE : 420105
+     * ENDTIME : 859
+     * GCPROCESS : 1
+     * LATLNG : 114.225446,30.560052
+     * MONEYSOURCE : 86
+     * NAME : 万科国际
+     * PROJECTDESC : .
+     * PROJECTTYPE : 14
+     * STARTTIME : 2018-11-02
+     */
+    @JSONField(name = "ADDRESS")
+    private String address;
+    @JSONField(name = "CONTRACTPRICE")
+    private BigDecimal contractPrice;
+    @JSONField(name = "DEPARTMENTINDUSTRYID")
+    private String departmentIndustryId;
+    @JSONField(name = "DISTRICTCCODE")
+    private String districtCCode;
+    @JSONField(name = "DISTRICTCODE")
+    private String districtCode;
+    @JSONField(name = "ENDTIME")
+    private String endTime;
+
+    /**
+     * 工程进度。1:在建,2:完工,3:停工
+     */
+    @JSONField(name = "GCPROCESS")
+    private String gcProcess;
+
+    @JSONField(name = "LATLNG")
+    private String latLng;
+
+    /**
+     * 编码	资金来源
+     * 129	政府投资
+     * 130	社会资本
+     * 131	其他资本
+     */
+    @JSONField(name = "MONEYSOURCE")
+    private String moneySource;
+
+    @JSONField(name = "NAME")
+    private String name;
+
+    @JSONField(name = "PROJECTDESC")
+    private String projectDesc;
+    /**
+     * 编码	项目类型
+     * 117	房屋建筑工程
+     * 118	市政公用工程
+     * 119	机电安装工程
+     * 120	铁路工程公路工程
+     * 121	港口与航道工程
+     * 122	水利水电工程
+     * 123	电力工程
+     * 124	矿山工程
+     * 125	冶炼工程
+     * 126	化工石油工程
+     * 127	通信工程
+     * 128	其它
+     */
+    @JSONField(name = "PROJECTTYPE")
+    private String projectType;
+
+    @JSONField(name = "STARTTIME")
+    private String startTime;
+}

+ 76 - 0
common/src/main/java/com/jpsoft/smart/modules/realname/dto/ProjectWorker.java

@@ -0,0 +1,76 @@
+package com.jpsoft.smart.modules.realname.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor
+@Data
+public class ProjectWorker {
+
+    /**
+     * PROJECTCODE : 4201051561042227178
+     * SOCIALCREDITCODE : 91120222797261880N
+     * TEAMSYSNO : BZ1561086843150
+     * COMPANYCODE : 91120222797261880N
+     * NAME : 宝宝
+     * IDNUMBER : YHNBQYBy7XSqgQ+UHIz62DE54VKVHayoHcOvSsNQPws=
+     * WORKCLASSES : 21030209
+     * BIRTHDAY : 1960-01-01
+     * BANKACCOUNT : +JRe/ha9xrqU9LqvADYX2LcHNeFjgslFyiZHo9jCq9Y=
+     * BANKNAME : 成都农业银行
+     * STARTTIME : 2019-05-01
+     * SIGNDATE : 2019-05-01
+     * TYPEID : 88
+     * WAGE : 5001.00
+     * PAYCALCULATIONWAY : 45
+     * PAYDATE : 15
+     * EDUCATIONLEVELS : 38
+     * POLITICALSTATUS : 117
+     * ADDRESS : 河北省秦皇岛市1
+     * NATION : 汉
+     * PHONE : 13100002111
+     */
+    @JSONField(name="PROJECTCODE")
+    private String projectCode;
+    @JSONField(name="SOCIALCREDITCODE")
+    private String socialCreditCode;
+    @JSONField(name="TEAMSYSNO")
+    private String teamSysNo;
+    @JSONField(name="COMPANYCODE")
+    private String companyCode;
+    @JSONField(name="NAME")
+    private String name;
+    @JSONField(name="IDNUMBER")
+    private String idNumber;
+    @JSONField(name="WORKCLASSES")
+    private String workClasses;
+    @JSONField(name="BIRTHDAY")
+    private String birthday;
+    @JSONField(name="BANKACCOUNT")
+    private String bankAccount;
+    @JSONField(name="BANKNAME")
+    private String bankName;
+    @JSONField(name="STARTTIME")
+    private String startTime;
+    @JSONField(name="SIGNDATE")
+    private String signDate;
+    @JSONField(name="TYPEID")
+    private String typeId;
+    @JSONField(name="WAGE")
+    private String wage;
+    @JSONField(name="PAYCALCULATIONWAY")
+    private String payCalculationWay;
+    @JSONField(name="PAYDATE")
+    private String payDate;
+    @JSONField(name="EDUCATIONLEVELS")
+    private String educationLevels;
+    @JSONField(name="POLITICALSTATUS")
+    private String politicalStatus;
+    @JSONField(name="ADDRESS")
+    private String address;
+    @JSONField(name="NATION")
+    private String nation;
+    @JSONField(name="PHONE")
+    private String phone;
+}

+ 37 - 0
common/src/main/java/com/jpsoft/smart/modules/realname/dto/TeamDTO.java

@@ -0,0 +1,37 @@
+package com.jpsoft.smart.modules.realname.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor
+@Data
+public class TeamDTO {
+
+    /**
+     * projectCode : 4201051561042227178
+     * socialCreditCode : 91120222797261880n
+     * monitorName : 班组三
+     * name : 张组三
+     * phone : 13111112222
+     * idNumber : sinpj7dzmzgwjm8h/fy+q32h0rml2pcnbosbh6bo+4c=
+     * address : 无
+     * startTime : 2019-04-23
+     */
+    @JSONField(name="PROJECTCODE")
+    private String projectCode;
+    @JSONField(name="SOCIALCREDITCODE")
+    private String socialCreditCode;
+    @JSONField(name="MONITORNAME")
+    private String monitorName;
+    @JSONField(name="NAME")
+    private String name;
+    @JSONField(name="PHONE")
+    private String phone;
+    @JSONField(name="IDNUMBER")
+    private String idNumber;
+    @JSONField(name="ADDRESS")
+    private String address;
+    @JSONField(name="STARTTIME")
+    private String startTime;
+}

+ 37 - 0
common/src/main/java/com/jpsoft/smart/modules/realname/dto/WorkerAttendanceDTO.java

@@ -0,0 +1,37 @@
+package com.jpsoft.smart.modules.realname.dto;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor
+@Data
+public class WorkerAttendanceDTO {
+
+    /**
+     * CONTRACTTYPE : ZD420105201906220005717311
+     * ENDTIME : 2019-06-18 14:41:24
+     * IDNUMBER : YHNBQYBy7XSqgQ+UHIz62DE54VKVHayoHcOvSsNQPws=
+     * PROJECTCODE : 4201051561042227178
+     * SIGNDATE : 2019-06-18
+     * SOCIALCREDITCODE : 91120222797261880N
+     * STARTTIME : 2019-06-18 14:41:24
+     * TEAMSYSNO : BZ1561086843150
+     */
+    @JSONField(name="CONTRACTTYPE")
+    private String contractType;
+//    @JSONField(name="ENDTIME")
+//    private String ENDTIME;
+    @JSONField(name="IDNUMBER")
+    private String idNumber;
+    @JSONField(name="PROJECTCODE")
+    private String projectCode;
+    @JSONField(name="SIGNDATE")
+    private String signDate;
+    @JSONField(name="SOCIALCREDITCODE")
+    private String socialCreditCode;
+    @JSONField(name="STARTTIME")
+    private String startTime;
+    @JSONField(name="TEAMSYSNO")
+    private String teamSysNo;
+}

+ 74 - 1
web/src/main/java/com/jpsoft/smart/modules/mobile/controller/PersonInfoApiController.java

@@ -18,7 +18,9 @@ import com.jpsoft.smart.modules.common.dto.Sort;
 import com.jpsoft.smart.modules.common.utils.*;
 import com.jpsoft.smart.modules.lapi.service.ILapiService;
 import com.jpsoft.smart.modules.lapi.vo.LapiMsgResult;
+import com.jpsoft.smart.modules.sys.entity.SysLog;
 import com.jpsoft.smart.modules.sys.entity.User;
+import com.jpsoft.smart.modules.sys.service.SysLogService;
 import com.jpsoft.smart.modules.sys.service.UserService;
 import io.jsonwebtoken.Jwts;
 import io.jsonwebtoken.security.Keys;
@@ -37,7 +39,9 @@ import org.springframework.data.redis.core.ValueOperations;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
+import sun.misc.BASE64Decoder;
 
+import java.io.ByteArrayInputStream;
 import java.security.Key;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
@@ -77,6 +81,9 @@ public class PersonInfoApiController {
     @Autowired
     RabbitTemplate rabbitTemplate;
 
+    @Autowired
+    private SysLogService sysLogService;
+
     @PostMapping("findByNameAndPhone")
     @ApiOperation(value="通过姓名和手机号查询人员(公开接口)")
     @ApiImplicitParams({
@@ -358,6 +365,68 @@ public class PersonInfoApiController {
         return messageResult;
     }
 
+
+    @PostMapping("uploadBase64")
+    @ResponseBody
+    @ApiOperation(value = "员工照片上传")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "photoName", value = "照片名称", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "photoBase64Data", value = "员工照片base64编码", required = true, paramType = "form")
+    })
+    public MessageResult<String> uploadBase64(String photoName, String photoBase64Data) {
+        MessageResult<String> messageResult = new MessageResult<>();
+
+        SysLog sysLog = new SysLog();
+        sysLog.setPointcut("人员照片上传");
+
+        try {
+            sysLog.setRemark("base64 照片大小:" + photoBase64Data.length());
+
+            //前50个字符
+            if (StringUtils.isNotEmpty(photoBase64Data)) {
+                sysLog.setData(photoBase64Data.substring(0, Math.min(photoBase64Data.length(), 50)));
+            }
+
+            BASE64Decoder decoder = new BASE64Decoder();
+
+            String[] arr = photoBase64Data.split(",");
+
+            byte[] imgData = decoder.decodeBuffer(arr[1]);
+
+            for (int i = 0; i < imgData.length; ++i) {
+                if (imgData[i] < 0) {// 调整异常数据
+                    imgData[i] += 256;
+                }
+            }
+
+            ByteArrayInputStream inputStream = new ByteArrayInputStream(imgData);
+
+            if (StringUtils.isEmpty(photoName)) {
+                photoName = "1.jpg";
+            }
+
+            String retFileUrl = OSSUtil.upload(ossConfig, "/person", photoName, inputStream);
+
+            messageResult.setResult(true);
+            messageResult.setData(retFileUrl);
+            messageResult.setCode(200);
+
+            sysLog.setUrl(retFileUrl);
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+
+            messageResult.setResult(false);
+            messageResult.setMessage(e.getMessage());
+
+            sysLog.setRemark(sysLog.getRemark() + "," + e.getMessage());
+        }
+
+        sysLog.setCreateTime(new Date());
+        sysLogService.insert(sysLog);
+
+        return messageResult;
+    }
+
     @PostMapping("save")
     @ApiOperation(value="保存人员信息并将照片上传到终端")
     @ApiImplicitParams({
@@ -578,7 +647,11 @@ public class PersonInfoApiController {
 
             personInfo.setName(name);
             personInfo.setPhone(phone);
-            if(wechatNoticeEnabled != null) personInfo.setWechatNoticeEnabled(wechatNoticeEnabled);
+
+            if(wechatNoticeEnabled != null) {
+                personInfo.setWechatNoticeEnabled(wechatNoticeEnabled);
+            }
+
             personInfo.setUpdateTime(new Date());
 
             personInfoService.update(personInfo);

+ 244 - 44
web/src/test/java/com/jpsoft/smart/OpenAPITest.java

@@ -1,33 +1,59 @@
 package com.jpsoft.smart;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializeConfig;
+import com.jpsoft.smart.modules.business.entity.WorkAttendance;
+import com.jpsoft.smart.modules.common.utils.AESUtil;
+import com.jpsoft.smart.modules.realname.dto.CorpDTO;
+import com.jpsoft.smart.modules.realname.dto.ProjectDTO;
+import com.jpsoft.smart.modules.realname.dto.TeamDTO;
+import com.jpsoft.smart.modules.realname.dto.WorkerAttendanceDTO;
+import com.sun.corba.se.spi.orbutil.threadpool.Work;
+import io.jsonwebtoken.impl.crypto.MacProvider;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+import org.joda.time.DateTime;
 import org.junit.Test;
 
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
 import java.io.Reader;
+import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
 import java.net.HttpURLConnection;
 import java.net.URL;
+import java.net.URLEncoder;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
-import java.util.Date;
-import java.util.TreeMap;
+import java.util.*;
 
 public class OpenAPITest {
+    private final String UPLOAD_URl = "http://jztest.e2r.cn:8115/foreign/upload/check";
+    private final String SELECT_URL = "http://jztest.e2r.cn:8115/foreign/select/check";
+    private final String APP_ID = "yOtqoojmsmz";
+    private final String APP_SECRET = "534a33e888b001a246b635b76e42d0dd";
 
-    @Test
-    public void signTest(){
+    public JSONObject sendPost(String url,String method,String data){
         /**
-        接口参数签名方法
-        第一步:拼接参数字符串
-        将除sign以外的请求参数(包括标准参数,除非有特别说明)按照参数名称的字典升序排列,
-        然后按此顺序,将”参数名=参数值”用”&”符号连接。
-        appid=appcode123&data=[]&format=json&iscompany=2&method=employee.create&nonce=11223344&timestamp=1558593970&version=2.0
-        **/
+         接口参数签名方法
+         第一步:拼接参数字符串
+         将除sign以外的请求参数(包括标准参数,除非有特别说明)按照参数名称的字典升序排列,
+         然后按此顺序,将”参数名=参数值”用”&”符号连接。
+         appid=appcode123&data=[]&format=json&iscompany=2&method=employee.create&nonce=11223344&timestamp=1558593970&version=2.0
+         **/
         TreeMap<String,Object> treeMap = new TreeMap<>();
-        treeMap.put("method","Project.Add");
+        treeMap.put("method",method);
         treeMap.put("version","1.0");
-        treeMap.put("appid","yOtqoojmsmz");
+        treeMap.put("appid",APP_ID);
         treeMap.put("iscompany","1");
         treeMap.put("format","json");
 
@@ -35,9 +61,12 @@ public class OpenAPITest {
         treeMap.put("timestamp", timestamp);
         treeMap.put("nonce", timestamp);
 
-        treeMap.put("data","[{\"ADDRESS\":\"湖北省\",\"CONTRACTPRICE\":\"80000.00\",\"DEPARTMENTINDUSTRYID\":\"68\",\"DISTRICTCCODE\":421002,\"DISTRICTCODE\":421002,\"ENDTIME\":\"859\",\"GCPROCESS\":\"1\",\"LATLNG\":\"114.225446,30.560052\",\"MONEYSOURCE\":130,\"NAME\":\"沙北碧桂园\",\"PROJECTDESC\":\".\",\"PROJECTTYPE\":\"117\",\"STARTTIME\":\"2018-11-02\"}]");
+        treeMap.put("data", data);
+
+        //treeMap.put("data","[{\"ADDRESS\":\"湖北省\",\"CONTRACTPRICE\":\"80000.00\",\"DEPARTMENTINDUSTRYID\":\"68\",\"DISTRICTCCODE\":421002,\"DISTRICTCODE\":421002,\"ENDTIME\":\"859\",\"GCPROCESS\":\"1\",\"LATLNG\":\"114.225446,30.560052\",\"MONEYSOURCE\":130,\"NAME\":\"沙北碧桂园\",\"PROJECTDESC\":\".\",\"PROJECTTYPE\":\"117\",\"STARTTIME\":\"2018-11-02\"}]");
         //treeMap.put("data","[{\"ADDRESS\":\"湖北省\",\"CONTRACTPRICE\":80000.00}]");
 
+        List<BasicNameValuePair> params = new ArrayList<>();
         StringBuilder sb = new StringBuilder();
 
         for (String key : treeMap.keySet()) {
@@ -47,18 +76,20 @@ public class OpenAPITest {
 
             sb.append(key + "=" + treeMap.get(key));
 
+            params.add(new BasicNameValuePair(key, treeMap.get(key).toString()));
+
             System.out.println(key + ":" + treeMap.get(key));
         }
 
         /**
-        * 第二步:在拼接参数字符串后再拼接&appsecret,如&appsecret=df23hlir85353;appsecret即密钥,由服务信息平台技术支持人员提供。
-        * 示例:appid=appcode123&data=[]&format=json&iscompany=2&method=employee.create&nonce=11223344&timestamp=1558593970&version=2.0&appsecret=df23hlir85353gfgd86775jjdh6322
-        **/
-        sb.append("&appsecret=534a33e888b001a246b635b76e42d0dd");
+         * 第二步:在拼接参数字符串后再拼接&appsecret,如&appsecret=df23hlir85353;appsecret即密钥,由服务信息平台技术支持人员提供。
+         * 示例:appid=appcode123&data=[]&format=json&iscompany=2&method=employee.create&nonce=11223344&timestamp=1558593970&version=2.0&appsecret=df23hlir85353gfgd86775jjdh6322
+         **/
+        sb.append("&appsecret=" + APP_SECRET);
 
         /**
          * (3)第三步:将上一步的获得的字符串全部转换为小写。再进行SHA256加密(SHA256 64位),生成的字符串就是验签数据sign。注意:SHA256加密哈希值请转换为16进制表示。
-        **/
+         **/
         //        String plainText = "appid=appcode123&data=[]&format=json&iscompany=2&method=employee.create&nonce=11223344&timestamp=1558593970&version=2.0&appsecret=df23hlir85353gfgd86775jjdh6322";
         String plainText = sb.toString();
 
@@ -71,6 +102,8 @@ public class OpenAPITest {
         plainText = plainText.toLowerCase();
         System.out.println(plainText);
 
+        JSONObject jsonObject = new JSONObject();
+
         try {
             MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
             messageDigest.update(plainText.getBytes("UTF-8"));
@@ -90,42 +123,209 @@ public class OpenAPITest {
 
             System.out.println("sign:" + stringBuffer.toString());
 
-            postDataSb.append("&sign=" + stringBuffer.toString());
-
-
-            System.out.println("postData:" + postDataSb);
-
-
-            byte[] postDataBytes = postDataSb.toString().getBytes("UTF-8");
-
-            HttpURLConnection conn = (HttpURLConnection)(new URL("http://jztest.e2r.cn:8115/foreign/upload/check")).openConnection();
-            conn.setRequestMethod("POST");
-            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
-            conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
-            conn.setConnectTimeout(2000);
-            conn.setReadTimeout(5000);
-            conn.setDoOutput(true);
-            conn.getOutputStream().write(postDataBytes);
+            params.add(new BasicNameValuePair("sign", stringBuffer.toString()));
 
-            Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "GBK"));
+            for (String key : treeMap.keySet()) {
+                if (sb.length()>0){
+                    sb.append("&");
+                }
 
-            StringBuilder sb2 = new StringBuilder();
-            for (int c; (c = in.read()) >= 0;) {
-                sb2.append((char)c);
+                sb.append(key + "=" + treeMap.get(key));
+                System.out.println(key + ":" + treeMap.get(key));
             }
-            in.close();
-            conn.disconnect();
 
-            String responseStr = sb2.toString();
+            CloseableHttpClient httpClient = HttpClients.createDefault();
+            HttpPost httpPost = new HttpPost(url);
+
+            UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(params, "UTF-8");
+            urlEncodedFormEntity.setContentEncoding("UTF-8");
+            httpPost.setEntity(urlEncodedFormEntity);
+            CloseableHttpResponse response = httpClient.execute(httpPost);
 
-            System.out.println(responseStr);
+            String content = EntityUtils.toString(response.getEntity(),"UTF-8");
 
-            JSONObject jsonObject = JSONObject.parseObject(responseStr);
+            jsonObject = JSONObject.parseObject(content);
 
-            //1575542056612
             System.out.println("返回消息:" + jsonObject.get("message"));
         } catch (Exception e) {
             e.printStackTrace();
         }
+
+        return jsonObject;
+    }
+
+    @Test
+    public void projectAddTest(){
+        ProjectDTO dto = new ProjectDTO();
+        dto.setName("沙北碧桂园");
+        dto.setAddress("湖北省");
+        dto.setContractPrice(new BigDecimal(80000));
+        dto.setDepartmentIndustryId("68");
+        dto.setDistrictCCode("421002");
+        dto.setDistrictCode("421002");
+        dto.setEndTime("859");
+        dto.setGcProcess("1");
+        dto.setLatLng("114.225446,30.560052");
+        dto.setMoneySource("130");
+        dto.setProjectDesc("");
+        dto.setProjectType("117");
+        dto.setStartTime("2018-11-02");
+
+        List<ProjectDTO> dtoList = new ArrayList<>();
+
+        dtoList.add(dto);
+
+        SerializeConfig config = new SerializeConfig();
+
+        String jsonStr = JSONObject.toJSONString(dtoList, config);
+
+        JSONObject response = sendPost(UPLOAD_URl,"Project.Add",jsonStr);
+
+        System.out.println(response.getString("mesage"));
+
+        //1575542056612
+    }
+
+    @Test
+    public void projectSelTest(){
+        Map<String,Object> map = new HashMap<>();
+        map.put("PROJECTCODE","1575542056612");
+
+//        List<Map> dtoList = new ArrayList<>();
+//        dtoList.add(map);
+
+        String jsonStr = JSONObject.toJSONString(map);
+
+        JSONObject response = sendPost(SELECT_URL,"Project.Sel",jsonStr);
+
+        System.out.println(response.getString("data"));
+    }
+
+    @Test
+    public void CorpUploadTest(){
+        CorpDTO corpDTO = new CorpDTO();
+        corpDTO.setSocialCreditCode("91120222797261880N");
+        corpDTO.setCompanyType(2);
+        corpDTO.setName("建筑公司1");
+        corpDTO.setRegisteredArea("421002");
+        corpDTO.setLegalPerson("郑强");
+        corpDTO.setLegalPersonPhone("13986703087");
+        corpDTO.setProjectLeader("小刚1");
+        corpDTO.setProjectLeaderPhone("13986703088");
+        corpDTO.setProjectManager("小刚2");
+        corpDTO.setProjectManagerPhone("13986703089");
+        corpDTO.setLaborLeader("小刚3");
+        corpDTO.setLaborLeaderPhone("13986703090");
+        corpDTO.setDesposit(new BigDecimal(100));
+        corpDTO.setRegisterDate("2020-06-01");
+
+
+        List<CorpDTO> dtoList = new ArrayList<>();
+        dtoList.add(corpDTO);
+
+        String jsonStr = JSONObject.toJSONString(dtoList);
+        JSONObject response = sendPost(UPLOAD_URl,"Corp.Upload",jsonStr);
+
+        System.out.println(response.getString("data"));
+    }
+
+    @Test
+    public void TeamAddTest(){
+        TeamDTO teamDTO = new TeamDTO();
+
+        teamDTO.setProjectCode("1575542056612");
+        teamDTO.setSocialCreditCode("91120222797261880N");
+        teamDTO.setMonitorName("测试班组");
+        teamDTO.setName("测试");
+        teamDTO.setPhone("13986703087");
+//        teamDTO.setIdNumber(AESUtil.encrypt("421002198311131816",APP_SECRET));
+        teamDTO.setIdNumber("zMfvL9dX4Dl4sdT7oDDSgBAxqba/j8mykWZ+oUgFeQA=");
+
+        teamDTO.setAddress("荆州");
+        teamDTO.setStartTime("2020-06-01");
+
+        List<TeamDTO> dtoList = new ArrayList<>();
+        dtoList.add(teamDTO);
+
+        String jsonStr = JSONObject.toJSONString(dtoList);
+
+        JSONObject response = sendPost(UPLOAD_URl,"Team.Add",jsonStr);
+
+        //BZ1591004812994
+        System.out.println(response.getString("data"));
+    }
+
+    @Test
+    public void TeamSelTest(){
+        Map<String,Object> map = new HashMap<>();
+        map.put("PROJECTCODE","1575542056612");
+        map.put("MONITORNAME","泥工班组");
+        map.put("PAGE",1);
+        map.put("ROWS",10);
+
+//      List<Map> dtoList = new ArrayList<>();
+//      dtoList.add(map);
+
+        String jsonStr = JSONObject.toJSONString(map);
+
+        JSONObject response = sendPost(SELECT_URL,"Team.Sel",jsonStr);
+
+        System.out.println(response.getString("data"));
+    }
+
+    @Test
+    public void ProjectWorkerSel(){
+        Map<String,Object> map = new HashMap<>();
+        map.put("PROJECTCODE","1575542056612");
+//        map.put("NAME","1575542056612");
+//        map.put("IDNUMBER","1575542056612");
+//        map.put("WORKCLASSES","1575542056612");
+        map.put("PAGE",1);
+        map.put("ROWS",10);
+
+//      List<Map> dtoList = new ArrayList<>();
+//      dtoList.add(map);
+
+        String jsonStr = JSONObject.toJSONString(map);
+
+        JSONObject response = sendPost(SELECT_URL,"ProjectWorker.Sel",jsonStr);
+
+        System.out.println(response.getString("data"));
+    }
+
+    @Test
+    public void WorkerAttendanceAdd(){
+        WorkerAttendanceDTO dto = new WorkerAttendanceDTO();
+
+        dto.setProjectCode("1575542056612");
+        dto.setIdNumber(AESUtil.encrypt("511202197306206658",APP_SECRET));
+//        dto.setTeamSysNo("BZ1591004812994");
+        dto.setSocialCreditCode("91120222797261880N");
+        dto.setContractType("ZD00000220190519003708");
+        dto.setStartTime(DateTime.now().toString("yyy-MM-dd HH:mm:ss"));
+        dto.setSignDate(DateTime.now().toString("yyy-MM-dd"));
+
+        List<WorkerAttendanceDTO> dtoList = new ArrayList<>();
+        dtoList.add(dto);
+        String jsonStr = JSONObject.toJSONString(dtoList);
+
+        JSONObject response = sendPost(UPLOAD_URl,"WorkerAttendance.Add",jsonStr);
+
+        System.out.println(response.getString("data"));
+    }
+
+
+    @Test
+    public void WorkerAttendanceSel(){
+        Map<String,Object> map = new HashMap<>();
+        map.put("PROJECTCODE","1575542056612");
+        map.put("NAME","陈永洪");
+        map.put("PAGE",1);
+        map.put("ROWS",10);
+
+        String jsonStr = JSONObject.toJSONString(map);
+        JSONObject response = sendPost(SELECT_URL,"WorkerAttendance.Sel",jsonStr);
+
+        System.out.println(response.getString("data"));
     }
 }