Browse Source

1)增加云平台查询用户接口。
2)企业端人员导入接口完善。

tomatozq 5 years ago
parent
commit
b4e5095507
19 changed files with 545 additions and 91 deletions
  1. 4 9
      picc-admin-server/src/main/java/com/jpsoft/picc/modules/sys/controller/ApiController.java
  2. 10 1
      picc-admin-server/src/main/resources/application-dev.yml
  3. 1 1
      picc-admin-server/src/main/resources/application.yml
  4. 33 0
      picc-admin-server/src/test/java/com/jpsoft/picc/test/JpCloudUserTest.java
  5. 5 0
      picc-common/pom.xml
  6. 32 0
      picc-common/src/main/java/com/jpsoft/picc/config/RestTemplateConfig.java
  7. 15 0
      picc-common/src/main/java/com/jpsoft/picc/modules/base/entity/JpCloudUser.java
  8. 1 0
      picc-common/src/main/java/com/jpsoft/picc/modules/base/service/JobsService.java
  9. 9 0
      picc-common/src/main/java/com/jpsoft/picc/modules/base/service/JpCloudUserService.java
  10. 12 3
      picc-common/src/main/java/com/jpsoft/picc/modules/base/service/impl/JobsServiceImpl.java
  11. 108 0
      picc-common/src/main/java/com/jpsoft/picc/modules/base/service/impl/JpCloudUserSeriveImpl.java
  12. 198 0
      picc-common/src/main/java/com/jpsoft/picc/modules/common/utils/CheckIdCard.java
  13. 6 2
      picc-common/src/main/java/com/jpsoft/picc/modules/common/utils/SignUtil.java
  14. 2 1
      picc-enterprise-server/src/main/java/com/jpsoft/picc/config/JpCloudConfig.java
  15. 99 63
      picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/CompanyMemberController.java
  16. 3 2
      picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/InsuranceApplicationController.java
  17. 1 1
      picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/pub/controller/PayController.java
  18. 6 2
      picc-enterprise-server/src/main/resources/application-dev.yml
  19. 0 6
      picc-enterprise-server/src/main/resources/application.yml

+ 4 - 9
picc-admin-server/src/main/java/com/jpsoft/picc/modules/sys/controller/ApiController.java

@@ -2,6 +2,7 @@ package com.jpsoft.picc.modules.sys.controller;
 
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.http.converter.HttpMessageConverter;
 import org.springframework.http.converter.StringHttpMessageConverter;
@@ -17,18 +18,12 @@ import java.nio.charset.Charset;
 @RequestMapping("/sys/api")
 @Api(description = "后端api信息")
 public class ApiController {
+    @Autowired
+    private RestTemplate restTemplate;
+
     @ApiOperation("获取后端api列表")
     @GetMapping("selectAll")
     public ResponseEntity<String> selectAll(HttpServletRequest request){
-        RestTemplate restTemplate = new RestTemplate();
-
-        for (HttpMessageConverter<?> httpMessageConverter : restTemplate.getMessageConverters()) {
-            if(httpMessageConverter instanceof StringHttpMessageConverter) {
-                ((StringHttpMessageConverter) httpMessageConverter).setDefaultCharset(Charset.forName("UTF-8"));
-                break;
-            }
-        }
-
         String path = request.getContextPath();
         String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 

+ 10 - 1
picc-admin-server/src/main/resources/application-dev.yml

@@ -22,4 +22,13 @@ weixin:
   tokenUrl: "http://localhost:8086/weixin-middleware/token"
   createQrCodeUrl: "http://localhost:8086/weixin-middleware/qrcode/create"
   sendTmplMsgUrl: "https://api.weixin.qq.com/cgi-bin/message/template/send"
-  sendTmplId1: "oc6Kh7_ZkANmsUnl2keg-X2nUKRBkAwjnGI3z1gTodo"
+  sendTmplId1: "oc6Kh7_ZkANmsUnl2keg-X2nUKRBkAwjnGI3z1gTodo"
+
+jpcloud:
+  apiUrl: http://localhost:9081/jp-cloud-api
+  findMemberByNamesUrl: ${jpcloud.apiUrl}/api/member/v1/findMemberByNamesForPicc
+  findMemberUrl: ${jpcloud.apiUrl}/api/member/v1/findMemberForPicc
+  payUrl: ${jpcloud.apiUrl}/payment/tradingOrderPayPc
+  sellerSerialNumber: '000001000020'
+  platformCode: '0008'
+  platformKey: '1234567890'

+ 1 - 1
picc-admin-server/src/main/resources/application.yml

@@ -105,4 +105,4 @@ oss:
 pdf:
   logoUrl: C:/Users/Administrator/Desktop/picc/logo.png
   imageWaterMarkUrl: C:/Users/Administrator/Desktop/picc/logo.png
-  downloadFilePath: C:/Users/Administrator/Desktop/投保单.pdf
+  downloadFilePath: C:/Users/Administrator/Desktop/投保单.pdf

+ 33 - 0
picc-admin-server/src/test/java/com/jpsoft/picc/test/JpCloudUserTest.java

@@ -0,0 +1,33 @@
+package com.jpsoft.picc.test;
+
+import com.jpsoft.picc.modules.base.entity.JpCloudUser;
+import com.jpsoft.picc.modules.base.service.JpCloudUserService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.Arrays;
+import java.util.List;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class JpCloudUserTest {
+    @Autowired
+    private JpCloudUserService jpCloudUserService;
+
+    @Test
+    public void queryTest1(){
+        List<JpCloudUser> userList = jpCloudUserService.findUserByNames(Arrays.asList("2142006","胡萝卜先生"));
+
+        System.out.println(userList.size());
+    }
+
+    @Test
+    public void queryTest2(){
+        List<JpCloudUser> userList = jpCloudUserService.findUser("2142006",null,null);
+
+        System.out.println(userList.size());
+    }
+}

+ 5 - 0
picc-common/pom.xml

@@ -100,5 +100,10 @@
             <version>3.1.0</version>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-web</artifactId>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 </project>

+ 32 - 0
picc-common/src/main/java/com/jpsoft/picc/config/RestTemplateConfig.java

@@ -0,0 +1,32 @@
+package com.jpsoft.picc.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.StringHttpMessageConverter;
+import org.springframework.web.client.RestTemplate;
+
+import java.nio.charset.Charset;
+
+@Configuration
+public class RestTemplateConfig {
+    @Bean
+    public RestTemplate getRestTemplate() {
+        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
+
+        requestFactory.setConnectTimeout(10*1000);
+        requestFactory.setReadTimeout(10*1000);
+
+        RestTemplate restTemplate = new RestTemplate(requestFactory);
+
+        for (HttpMessageConverter<?> httpMessageConverter : restTemplate.getMessageConverters()) {
+            if(httpMessageConverter instanceof StringHttpMessageConverter) {
+                ((StringHttpMessageConverter) httpMessageConverter).setDefaultCharset(Charset.forName("UTF-8"));
+                break;
+            }
+        }
+
+        return restTemplate;
+    }
+}

+ 15 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/base/entity/JpCloudUser.java

@@ -0,0 +1,15 @@
+package com.jpsoft.picc.modules.base.entity;
+
+import lombok.Data;
+
+@Data
+public class JpCloudUser {
+    private Integer id;
+    private String serialNumber;
+    private String name;
+    private String phone;
+    private String nickName;
+    private String realName;
+    private String email;
+    private String idCard;
+}

+ 1 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/base/service/JobsService.java

@@ -14,4 +14,5 @@ public interface JobsService {
 	int delete(String id);
 	List<Jobs> list();
 	Page<Jobs> pageSearch(Map<String, Object> searchParams, int pageNum, int pageSize, List<Sort> sortList);
+    List<Jobs> findByName(String jobName);
 }

+ 9 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/base/service/JpCloudUserService.java

@@ -0,0 +1,9 @@
+package com.jpsoft.picc.modules.base.service;
+
+import com.jpsoft.picc.modules.base.entity.JpCloudUser;
+import java.util.List;
+
+public interface JpCloudUserService {
+    List<JpCloudUser> findUserByNames(List<String> nameList);
+    List<JpCloudUser> findUser(String name,String realName,String telephone);
+}

+ 12 - 3
picc-common/src/main/java/com/jpsoft/picc/modules/base/service/impl/JobsServiceImpl.java

@@ -1,8 +1,6 @@
 package com.jpsoft.picc.modules.base.service.impl;
 
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
 import javax.annotation.Resource;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
@@ -68,4 +66,15 @@ public class JobsServiceImpl implements JobsService {
         
         return page;
 	}
+
+	@Override
+	public List<Jobs> findByName(String jobName) {
+		Map<String,Object> searchParams = new HashMap<>();
+		searchParams.put("name","%" + jobName + "%");
+
+		List<Sort> sortList = new ArrayList<>();
+		sortList.add(new Sort("name_","asc"));
+
+		return jobsDAO.search(searchParams,sortList);
+	}
 }

+ 108 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/base/service/impl/JpCloudUserSeriveImpl.java

@@ -0,0 +1,108 @@
+package com.jpsoft.picc.modules.base.service.impl;
+
+import com.jpsoft.picc.modules.base.entity.JpCloudUser;
+import com.jpsoft.picc.modules.base.service.JpCloudUserService;
+import com.jpsoft.picc.modules.common.dto.MsgResult;
+import com.jpsoft.picc.modules.common.utils.SignUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.http.*;
+import org.springframework.stereotype.Component;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Component(value="jpCloudUserService")
+public class JpCloudUserSeriveImpl implements JpCloudUserService {
+    @Value("${jpcloud.findMemberByNamesUrl}")
+    private String findMemberByNamesUrl;
+
+    @Value("${jpcloud.findMemberUrl}")
+    private String findMemberUrl;
+
+    @Value("${jpcloud.platformCode}")
+    private String platformCode;
+
+    @Value("${jpcloud.platformKey}")
+    private String platformKey;
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    public <T> MsgResult<T> post(String url,HashMap<String,Object> searchParams){
+        MsgResult<T> msgResult = null;
+
+        try {
+            ParameterizedTypeReference ref = new ParameterizedTypeReference<MsgResult<T>>() {
+            };
+
+            HttpHeaders headers = new HttpHeaders();
+            headers.add("Accept", MediaType.APPLICATION_JSON.toString());
+            headers.setContentType(MediaType.parseMediaType("multipart/form-data;charset=UTF-8"));
+
+            MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<>();
+
+            for (String key : searchParams.keySet()) {
+                paramMap.add(key, searchParams.get(key));
+            }
+
+            paramMap.add("sign", SignUtil.createSign(searchParams, platformKey));
+
+            HttpEntity<MultiValueMap<String, Object>> formEntity = new HttpEntity<>(paramMap, headers);
+
+            ResponseEntity<MsgResult<T>> responseEntity =
+                    restTemplate.exchange(url, HttpMethod.POST, formEntity, ref);
+
+            if (responseEntity.getStatusCode() == HttpStatus.OK) {
+                msgResult = responseEntity.getBody();
+            }
+        }
+        catch (Exception ex){
+            log.error(ex.getMessage(),ex);
+        }
+
+        return msgResult;
+    }
+
+    @Override
+    public List<JpCloudUser> findUserByNames(List<String> nameList) {
+        String names = nameList.stream().collect(Collectors.joining(","));
+
+        HashMap<String,Object> searchParams = new HashMap<>();
+        searchParams.put("names",names);
+        searchParams.put("platCode",platformCode);
+
+        MsgResult<List<JpCloudUser>> msgResult = post(findMemberByNamesUrl,searchParams);
+
+        if(msgResult!=null && msgResult.isSuccess()) {
+            return msgResult.getData();
+        }
+
+        return null;
+    }
+
+    @Override
+    public List<JpCloudUser> findUser(String name, String realName, String telephone) {
+        HashMap<String,Object> searchParams = new HashMap<>();
+        searchParams.put("name",name);
+        searchParams.put("realName",realName);
+        searchParams.put("telephone",telephone);
+        searchParams.put("platCode",platformCode);
+
+        MsgResult<List<JpCloudUser>> msgResult = post(findMemberUrl,searchParams);
+
+        if(msgResult!=null && msgResult.isSuccess()) {
+            return msgResult.getData();
+        }
+
+        return null;
+    }
+}

+ 198 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/common/utils/CheckIdCard.java

@@ -0,0 +1,198 @@
+package com.jpsoft.picc.modules.common.utils;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+/**
+ * 验证身份证号码 身份证号码, 可以解析身份证号码的各个字段,以及验证身份证号码是否有效; 身份证号码构成:6位地址编码+8位生日+3位顺序码+1位校验码
+ * 
+ * @ClassName: CheckIdCard
+ * @Description: TODO
+ * @author suncy
+ * @date 2013-1-4 上午11:06:09
+ * 
+ */
+public class CheckIdCard {
+	private String cardNumber; // 完整的身份证号码
+	private Boolean cacheValidateResult = null; // 缓存身份证是否有效,因为验证有效性使用频繁且计算复杂
+	private Date cacheBirthDate = null; // 缓存出生日期,因为出生日期使用频繁且计算复杂
+	private final static String BIRTH_DATE_FORMAT = "yyyyMMdd"; // 身份证号码中的出生日期的格式
+	private final static Date MINIMAL_BIRTH_DATE = new Date(-2209017600000L); // 身份证的最小出生日期,1900年1月1日
+	private final static int NEW_CARD_NUMBER_LENGTH = 18;
+	private final static int OLD_CARD_NUMBER_LENGTH = 15;
+	private final static char[] VERIFY_CODE = { '1', '0', 'X', '9', '8', '7',
+			'6', '5', '4', '3', '2' }; // 18位身份证中最后一位校验码
+	private final static int[] VERIFY_CODE_WEIGHT = { 7, 9, 10, 5, 8, 4, 2, 1,
+			6, 3, 7, 9, 10, 5, 8, 4, 2 };// 18位身份证中,各个数字的生成校验码时的权值
+
+	public boolean validate() {
+		if (null == cacheValidateResult) {
+			boolean result = true;
+			result = result && (null != cardNumber); // 身份证号不能为空
+			result = result && NEW_CARD_NUMBER_LENGTH == cardNumber.length(); // 身份证号长度是18(新证)
+			// 身份证号的前17位必须是阿拉伯数字
+			for (int i = 0; result && i < NEW_CARD_NUMBER_LENGTH - 1; i++) {
+				char ch = cardNumber.charAt(i);
+				result = result && ch >= '0' && ch <= '9';
+			}
+			// 身份证号的第18位校验正确
+			result = result
+					&& (calculateVerifyCode(cardNumber) == cardNumber
+							.charAt(NEW_CARD_NUMBER_LENGTH - 1));
+			// 出生日期不能晚于当前时间,并且不能早于1900年
+			try {
+				Date birthDate = this.getBirthDate();
+				result = result && null != birthDate;
+				result = result && birthDate.before(new Date());
+				result = result && birthDate.after(MINIMAL_BIRTH_DATE);
+				/**
+				 * 出生日期中的年、月、日必须正确,比如月份范围是[1,12],日期范围是[1,31],还需要校验闰年、大月、小月的情况时,
+				 * 月份和日期相符合
+				 */
+				String birthdayPart = this.getBirthDayPart();
+				String realBirthdayPart = this.createBirthDateParser().format(
+						birthDate);
+				result = result && (birthdayPart.equals(realBirthdayPart));
+			} catch (Exception e) {
+				result = false;
+			}
+			cacheValidateResult = Boolean.valueOf(result);// TODO
+			// 完整身份证号码的省市县区检验规则
+		}
+		return cacheValidateResult;
+	}
+
+	/**
+	 * 如果是15位身份证号码,则自动转换为18位
+	 * 
+	 * @param cardNumber
+	 * @return
+	 */
+	public CheckIdCard(String cardNumber) {
+		if (null != cardNumber) {
+			cardNumber = cardNumber.trim();
+			if (OLD_CARD_NUMBER_LENGTH == cardNumber.length()) {
+				cardNumber = contertToNewCardNumber(cardNumber);
+			}
+		}
+		this.cardNumber = cardNumber;
+	}
+
+	public String getCardNumber() {
+		return cardNumber;
+	}
+
+	public String getAddressCode() {
+		this.checkIfValid();
+		return this.cardNumber.substring(0, 6);
+	}
+
+	public Date getBirthDate() {
+		if (null == this.cacheBirthDate) {
+			try {
+				this.cacheBirthDate = this.createBirthDateParser().parse(
+						this.getBirthDayPart());
+			} catch (Exception e) {
+				throw new RuntimeException("身份证的出生日期无效");
+			}
+		}
+		return new Date(this.cacheBirthDate.getTime());
+	}
+
+	public boolean isMale() {
+		return 1 == this.getGenderCode();
+	}
+
+	public boolean isFemal() {
+		return false == this.isMale();
+	}
+
+	/**
+	 * 获取身份证的第17位,奇数为男性,偶数为女性
+	 * 
+	 * @return
+	 */
+	private int getGenderCode() {
+		this.checkIfValid();
+		char genderCode = this.cardNumber.charAt(NEW_CARD_NUMBER_LENGTH - 2);
+		return (((int) (genderCode - '0')) & 0x1);
+	}
+
+	private String getBirthDayPart() {
+		return this.cardNumber.substring(6, 14);
+	}
+
+	private SimpleDateFormat createBirthDateParser() {
+		return new SimpleDateFormat(BIRTH_DATE_FORMAT);
+	}
+
+	private void checkIfValid() {
+		if (false == this.validate()) {
+			throw new RuntimeException("身份证号码不正确!");
+		}
+	}
+
+	/**
+	 * 校验码(第十八位数):
+	 * 
+	 * 十七位数字本体码加权求和公式 S = Sum(Ai * Wi), i = 0...16 ,先对前17位数字的权求和;
+	 * Ai:表示第i位置上的身份证号码数字值 Wi:表示第i位置上的加权因子 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4
+	 * 2; 计算模 Y = mod(S, 11)< 通过模得到对应的校验码 Y: 0 1 2 3 4 5 6 7 8 9 10 校验码: 1 0 X 9
+	 * 8 7 6 5 4 3 2
+	 * 
+	 * @param cardNumber
+	 * @return
+	 */
+	private static char calculateVerifyCode(CharSequence cardNumber) {
+		int sum = 0;
+		for (int i = 0; i < NEW_CARD_NUMBER_LENGTH - 1; i++) {
+			char ch = cardNumber.charAt(i);
+			sum += ((int) (ch - '0')) * VERIFY_CODE_WEIGHT[i];
+		}
+		return VERIFY_CODE[sum % 11];
+	}
+	
+	/**  
+     * 获取年龄
+     */    
+    public Integer getAge() {    
+        try {    
+            boolean validateAccess = validate();    
+            if (validateAccess) {
+                // 获取出生日期    
+                Date birthdate = getBirthDate();    
+                GregorianCalendar currentDay = new GregorianCalendar();
+                currentDay.setTime(birthdate);    
+                int year = currentDay.get(Calendar.YEAR);
+                //获取年龄  
+                SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy");
+                String nowYear=simpleDateFormat.format(new Date());  
+                return Integer.parseInt(nowYear)-year;     
+            }else{
+            	return null;
+            }
+        } catch (Exception e) {    
+            return null; 
+        }    
+    }    
+
+	/**
+	 * 把15位身份证号码转换到18位身份证号码<br>
+	 * 15位身份证号码与18位身份证号码的区别为:<br>
+	 * 1、15位身份证号码中,"出生年份"字段是2位,转换时需要补入"19",表示20世纪<br>
+	 * 2、15位身份证无最后一位校验码。18位身份证中,校验码根据根据前17位生成
+	 * 
+	 * @param oldCardNumber
+	 * @return
+	 */
+	private static String contertToNewCardNumber(String oldCardNumber) {
+		StringBuilder buf = new StringBuilder(NEW_CARD_NUMBER_LENGTH);
+		buf.append(oldCardNumber.substring(0, 6));
+		buf.append("19");
+		buf.append(oldCardNumber.substring(6));
+		buf.append(CheckIdCard.calculateVerifyCode(buf));
+		return buf.toString();
+	}
+}

+ 6 - 2
picc-common/src/main/java/com/jpsoft/picc/modules/common/utils/SignUtil.java

@@ -15,7 +15,6 @@ import java.util.TreeMap;
  * @date 2020-2-11 10:22
  */
 public class SignUtil {
-
     /**
      * 创建签名
      * @return
@@ -61,7 +60,12 @@ public class SignUtil {
         String validate_sign = "";
 
         for (Map.Entry<String, Object> entry : sortMap.entrySet()) {
-            validate_sign += entry.getKey() + "=" + entry.getValue() + "|";
+            if (entry.getValue() == null || "".equals(entry.getValue().toString())){
+                validate_sign += entry.getKey() + "=|";
+            }
+            else {
+                validate_sign += entry.getKey() + "=" + entry.getValue() + "|";
+            }
         }
 
         validate_sign += key;

+ 2 - 1
picc-enterprise-server/src/main/java/com/jpsoft/picc/config/JpCloudConfig.java

@@ -10,7 +10,8 @@ import org.springframework.stereotype.Component;
 public class JpCloudConfig {
     private String notifyBackUrl;
     private String synchroBackUrl;
-    private String jpcloudUrl;
+    private String payUrl;
     private String sellerSerialNumber;
     private String platformCode;
+    private String platformKey;
 }

+ 99 - 63
picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/CompanyMemberController.java

@@ -4,10 +4,13 @@ import cn.hutool.core.convert.Convert;
 import com.github.pagehelper.Page;
 import com.jpsoft.picc.modules.base.entity.Company;
 import com.jpsoft.picc.modules.base.entity.CompanyMember;
+import com.jpsoft.picc.modules.base.entity.Jobs;
 import com.jpsoft.picc.modules.base.service.CompanyMemberService;
 import com.jpsoft.picc.modules.base.service.CompanyService;
+import com.jpsoft.picc.modules.base.service.JobsService;
 import com.jpsoft.picc.modules.common.dto.MessageResult;
 import com.jpsoft.picc.modules.common.dto.Sort;
+import com.jpsoft.picc.modules.common.utils.CheckIdCard;
 import com.jpsoft.picc.modules.common.utils.POIUtils;
 import com.jpsoft.picc.modules.common.utils.PojoUtils;
 import io.swagger.annotations.Api;
@@ -40,6 +43,9 @@ public class CompanyMemberController {
     @Autowired
     private CompanyService companyService;
 
+    @Autowired
+    private JobsService jobsService;
+
     @ApiOperation(value="读取企业人员列表")
     @RequestMapping(value = "list",method = RequestMethod.POST)
     public MessageResult<List<CompanyMember>> list(
@@ -365,66 +371,113 @@ public class CompanyMemberController {
             int existCount = 0;
             List<String> existName = new ArrayList<>();
             for(Object[] array : list){
-                String name = array[1].toString();
-                String cardType = array[2].toString();
-                String cardNo = array[3].toString();
-                String sex = array[4].toString();
-                String jobsId = array[5].toString();
-                String healthStatus = array[6].toString();
-
-                Map<String,Object> searchParams = new HashMap<>();
-                searchParams.put("companyId",company.getId());
-                searchParams.put("cardNo",cardNo);
-                List<Sort> sortList = new ArrayList<>();
-                Page<CompanyMember> page = companyMemberService.pageSearch(searchParams,1,100,sortList);
-
-                if(page.size() > 0) {
-                    existCount++;
-                    existName.add(page.get(0).getName());
-                }else {
-                    companyMember.setId(UUID.randomUUID().toString());
-                    if (StringUtils.isNotEmpty(company.getId())) companyMember.setCompanyId(company.getId());
-                    if (StringUtils.isNotEmpty(name)) companyMember.setName(name);
-                    if (cardType.contains("身份证")){
-                        companyMember.setCardType("1");
-                        if (StringUtils.isNotEmpty(cardNo)) companyMember.setAge(getAge(cardNo));
+                try {
+                    String name = array[1].toString();
+                    String cardType = array[2].toString();
+                    String cardNo = array[3].toString();
+                    String sex = array[4].toString();
+                    String age = array[5].toString();
+                    String jobName = array[6].toString();
+                    String healthStatus = array[7].toString();
+
+                    if(StringUtils.isEmpty(name)){
+                        continue;
                     }
-                    if (cardType.contains("港澳通行证")) companyMember.setCardType("2");
-                    if (cardType.contains("护照")) companyMember.setCardType("3");
-                    if (StringUtils.isNotEmpty(cardNo)) companyMember.setCardNo(cardNo);
-                    if (sex.contains("男")) {
-                        companyMember.setSex(true);
+
+                    Map<String, Object> searchParams = new HashMap<>();
+                    searchParams.put("companyId", company.getId());
+                    searchParams.put("cardNo", cardNo);
+                    searchParams.put("delFlag", false);
+
+                    List<Sort> sortList = new ArrayList<>();
+                    Page<CompanyMember> page = companyMemberService.pageSearch(searchParams, 1, 100, sortList);
+
+                    if (page.size() > 0) {
+                        existCount++;
+                        existName.add(page.get(0).getName());
                     } else {
-                        companyMember.setSex(false);
-                    }
-                    if (jobsId.contains("一类职业")) companyMember.setJobsId("4e0a6674-a539-45fb-878e-a8dd9db224c5");
-                    if (jobsId.contains("二类职业")) companyMember.setJobsId("88ab9059-d0aa-4cef-a623-9beb536e4c10");
-                    if (jobsId.contains("三类职业")) companyMember.setJobsId("f0f13d78-54b8-4741-aec9-5e0c07c6bfe4");
-                    if (StringUtils.isNotEmpty(healthStatus)) companyMember.setHealthStatus(healthStatus);
-//                if(StringUtils.isNotEmpty(cardFiles)) companyMember.setCardFiles(cardFiles);
-                    companyMember.setStatus("0");
-                    companyMember.setDelFlag(false);
-                    companyMember.setCreateBy(principal.getName());
-                    companyMember.setCreateTime(new Date());
-
-                    if (companyMemberService.insert(companyMember) > 0) {
-                        affectCount++;
+                        companyMember.setId(UUID.randomUUID().toString());
+                        if (StringUtils.isNotEmpty(company.getId())) companyMember.setCompanyId(company.getId());
+                        if (StringUtils.isNotEmpty(name)) companyMember.setName(name);
+
+                        CheckIdCard cic = null;
+
+                        if (cardType.contains("身份证")) {
+                            companyMember.setCardType("1");
+                            cic = new CheckIdCard(cardNo);
+                        } else if (cardType.contains("港澳通行证")) {
+                            companyMember.setCardType("2");
+                        } else if (cardType.contains("护照")) {
+                            companyMember.setCardType("3");
+                        }
+
+                        if (StringUtils.isNotEmpty(cardNo)) companyMember.setCardNo(cardNo);
+
+                        if (StringUtils.isNotEmpty(sex)) {
+                            if (sex.contains("男")) {
+                                companyMember.setSex(true);
+                            } else {
+                                companyMember.setSex(false);
+                            }
+                        } else if (cic != null && cic.validate()) {
+                            companyMember.setSex(cic.isFemal());
+                        }
+
+                        if (StringUtils.isNotEmpty(age)) {
+                            companyMember.setAge(Integer.valueOf(age));
+                        } else if (cic != null && cic.validate()) {
+                            companyMember.setAge(cic.getAge());
+                        }
+
+                        String jobsName = "";
+                        if (jobName.contains("一类职业")) {
+                            jobsName = "一类职业";
+                        } else if (jobName.contains("二类职业")) {
+                            jobsName = "二类职业";
+                        } else if (jobName.contains("三类职业")) {
+                            jobsName = "三类职业";
+                        }
+
+                        List<Jobs> jobsList = jobsService.findByName(jobsName);
+
+                        if (jobsList.size() > 0) {
+                            companyMember.setJobsId(jobsList.get(0).getId());
+                        }
+
+                        if (StringUtils.isNotEmpty(healthStatus)) companyMember.setHealthStatus(healthStatus);
+
+                        companyMember.setStatus("0");
+                        companyMember.setDelFlag(false);
+                        companyMember.setCreateBy(principal.getName());
+                        companyMember.setCreateTime(new Date());
+
+                        if (companyMemberService.insert(companyMember) > 0) {
+                            affectCount++;
+                        }
                     }
                 }
+                catch(Exception innerEx){
+                    logger.error(innerEx.getMessage(),innerEx);
+                }
             }
 
 
             if (affectCount > 0) {
                 msgResult.setResult(true);
                 if(existCount > 0) {
-                    msgResult.setData("您有<" + existCount + ">条数据未导入成功,错误数据姓名为<" + String.join(",", existName) + ">,失败原因为<数据重复>。");
-                    msgResult.setMessage("您有<" + existCount + ">条数据未导入成功,错误数据姓名为<" + String.join(",", existName) + ">,失败原因为<数据重复>。");
+                    msgResult.setMessage("数据成功导入" + affectCount + "条,有<" + existCount + ">条数据未导入成功,错误数据姓名为<" + String.join(",", existName) + ">,失败原因为<数据重复>。");
                 }else{
-                    msgResult.setMessage("数据导入成功。");
+                    msgResult.setMessage("数据成功导入" + affectCount + "条");
                 }
             } else {
                 msgResult.setResult(false);
-                msgResult.setMessage("数据导入失败。");
+
+                if(existCount > 0) {
+                    msgResult.setMessage("您有<" + existCount + ">条数据未导入成功,错误数据姓名为<" + String.join(",", existName) + ">,失败原因为<数据重复>。");
+                }
+                else {
+                    msgResult.setMessage("数据导入失败。");
+                }
             }
         }
         catch(Exception ex){
@@ -436,21 +489,4 @@ public class CompanyMemberController {
 
         return msgResult;
     }
-
-    private int getAge(String idCard){
-        int leh = idCard.length();
-        String dates="";
-        if (leh == 18) {
-            int se = Integer.valueOf(idCard.substring(leh - 1)) % 2;
-            dates = idCard.substring(6, 10);
-            SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
-            String year = sdf.format(new Date());
-            int u=Integer.parseInt(year)-Integer.parseInt(dates);
-            return u;
-        }else{
-            dates = idCard.substring(6, 8);
-            return Integer.parseInt(dates);
-        }
-
-    }
 }

+ 3 - 2
picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/auth/controller/InsuranceApplicationController.java

@@ -638,7 +638,7 @@ public class InsuranceApplicationController {
             paramMap.put("sellerSerialNumber", jpCloudConfig.getSellerSerialNumber());
             paramMap.put("notifyBackUrl", jpCloudConfig.getNotifyBackUrl());
             paramMap.put("synchroBackUrl", jpCloudConfig.getSynchroBackUrl());
-            String sign = SignUtil.createSign(paramMap, "1234567890");
+            String sign = SignUtil.createSign(paramMap, jpCloudConfig.getPlatformKey());
 
             paramMap.put("orderName", URLEncoder.encode(insuranceApplication.getDefinitionName() + "网上缴费","UTF-8"));
             paramMap.put("notifyBackUrl", URLEncoder.encode(jpCloudConfig.getNotifyBackUrl(),"UTF-8"));
@@ -655,7 +655,8 @@ public class InsuranceApplicationController {
             if (StringUtils.isNotBlank(param)) {
                 param = param.substring(0, param.length() - 1);
             }
-            String returnUrl = jpCloudConfig.getJpcloudUrl() + "?" + param;
+
+            String returnUrl = jpCloudConfig.getPayUrl() + "?" + param;
 
             msgResult.setData(returnUrl);
             msgResult.setResult(true);

+ 1 - 1
picc-enterprise-server/src/main/java/com/jpsoft/picc/modules/pub/controller/PayController.java

@@ -102,7 +102,7 @@ public class PayController {
             signMap.put("payTime", payTime);
             signMap.put("userMoney", userMoney);
 
-            boolean result = SignUtil.validateSign(signMap, "1234567890", sign);
+            boolean result = SignUtil.validateSign(signMap, jpCloudConfig.getPlatformKey(), sign);
 
             if (!result) {
                 throw new Exception("签名不正确");

+ 6 - 2
picc-enterprise-server/src/main/resources/application-dev.yml

@@ -19,9 +19,13 @@ cas:
 jpcloud:
   notifyBackUrl: http://localhost:7070/picc-enterprise-server/pay/orderNotifyBack
   synchroBackUrl: http://localhost:7070/picc-enterprise-server/pay/paySuccess
-  jpcloudUrl: http://localhost:9081/jp-cloud-api/payment/tradingOrderPayPc
+  apiUrl: http://localhost:9081/jp-cloud-api
+  findMemberByNamesUrl: ${jpcloud.apiUrl}/api/member/v1/findMemberByNamesForPicc
+  findMemberUrl: ${jpcloud.apiUrl}/api/member/v1/findMemberForPicc
+  payUrl: ${jpcloud.apiUrl}/payment/tradingOrderPayPc
   sellerSerialNumber: '000001000020'
   platformCode: '0008'
+  platformKey: '1234567890'
 
 logger:
   level: WARN
@@ -34,4 +38,4 @@ weixin:
 #  appSecret: c86c042923e72c61c76a3a8658349312
   tokenUrl: "http://picc.jzrccs.com/weixin-middleware/token"
   createQrCodeUrl: "http://picc.jzrccs.com/weixin-middleware/qrcode/create"
-  sendTmplMsgUrl: "https://api.weixin.qq.com/cgi-bin/message/template/send"
+  sendTmplMsgUrl: "https://api.weixin.qq.com/cgi-bin/message/template/send"

+ 0 - 6
picc-enterprise-server/src/main/resources/application.yml

@@ -103,9 +103,3 @@ oss:
   bucketName: wzzgh2out
   urlPrefix: http://vod.wzgh.org
   objectPre: picc
-
-jpcloud:
-  notifyBackUrl: http://18891j25i6.iok.la:40309/picc-enterprise-server/pay/orderNotifyBack
-  synchroBackUrl: http://18891j25i6.iok.la:40309/picc-enterprise-server/pay/paySuccess
-  jpcloudUrl: http://gyxm.jing-zhou.gov.cn/jp-cloud-api/payment/tradingOrderPayPc
-  sellerSerialNumber: '000001000020'