xiao547607 4 jaren geleden
bovenliggende
commit
f8624a167c

+ 2 - 0
common/src/main/java/com/jpsoft/employment/modules/base/entity/Company.java

@@ -27,6 +27,8 @@ public class Company {
     private String scaleName;
         @ApiModelProperty(value = "所属行业")
     private String industry;
+    @ApiModelProperty(value = "招聘所属地区")
+    private String area;
     private String industryName;
         @ApiModelProperty(value = "企业地址")
     private String address;

+ 6 - 6
common/src/main/java/com/jpsoft/employment/modules/common/utils/SMSUtil.java

@@ -157,10 +157,10 @@ public class SMSUtil {
 		return sb.toString();
 	}
 
-	/*public static void main(String[] args) {
-		JSONObject verifyCodeJSON = new JSONObject();
-		verifyCodeJSON.put("code", "66666");
-
-		SMSUtil.send("17261745051", "SMS_49390047", verifyCodeJSON.toString());
-	}*/
+//	public static void main(String[] args) {
+//		JSONObject verifyCodeJSON = new JSONObject();
+//		verifyCodeJSON.put("code", "66666");
+//
+//		SMSUtil.send("13437120102", "SMS_49390047", verifyCodeJSON.toString());
+//	}
 }

+ 2 - 1
common/src/main/java/com/jpsoft/employment/modules/job/dao/JobUserDAO.java

@@ -13,7 +13,8 @@ public interface JobUserDAO {
 	int update(JobUser entity);
 	int exist(String id);
 	JobUser get(String id);
-    JobUser getUserByOpenId(String id);
+    JobUser findByOpenId(String openId);
+	JobUser findByPhone(String phone);
 	int delete(String id);
 	List<JobUser> list();
 	List<JobUser> search(Map<String, Object> searchParams, List<Sort> sortList);

+ 2 - 1
common/src/main/java/com/jpsoft/employment/modules/job/service/JobUserService.java

@@ -13,7 +13,8 @@ public interface JobUserService {
 	int insert(JobUser model);
 	int update(JobUser model);
 	int delete(String id);
-    JobUser getUserByOpenId(String id);
+    JobUser findByOpenId(String openId);
+	JobUser findByPhone(String phone);
 	List<JobUser> list();
 	Page<JobUser> pageSearch(Map<String, Object> searchParams, int pageNum, int pageSize, boolean count, List<Sort> sortList);
 }

+ 7 - 2
common/src/main/java/com/jpsoft/employment/modules/job/service/impl/JobUserServiceImpl.java

@@ -25,11 +25,16 @@ public class JobUserServiceImpl implements JobUserService {
 		return jobUserDAO.get(id);
 	}
     @Override
-    public JobUser getUserByOpenId(String id) {
+    public JobUser findByOpenId(String openId) {
         // TODO Auto-generated method stub
-        return jobUserDAO.getUserByOpenId(id);
+        return jobUserDAO.findByOpenId(openId);
     }
 
+	@Override
+	public JobUser findByPhone(String phone) {
+		// TODO Auto-generated method stub
+		return jobUserDAO.findByPhone(phone);
+	}
 
 	@Override
 	public int insert(JobUser model) {

+ 6 - 1
common/src/main/resources/mapper/base/Company.xml

@@ -8,6 +8,7 @@
 			<result property="name" column="name_" />
 			<result property="type" column="type_" />
 			<result property="scale" column="scale_" />
+			<result property="area" column="area_" />
 			<result property="industry" column="industry_" />
 			<result property="address" column="address_" />
 			<result property="introduction" column="introduction_" />
@@ -37,7 +38,7 @@
 	-->
 	<![CDATA[
 		insert into base_company
-	    (id_,name_,type_,scale_,industry_,address_,introduction_,contact_person,tel_,longtitude_,latitude_,email_,sort_no,create_by,create_time,update_by,update_time,del_flag,is_certification,credit_code,legal_person,legal_tel,business_license_url,logo_)
+	    (id_,name_,type_,scale_,industry_,address_,introduction_,contact_person,tel_,longtitude_,latitude_,email_,sort_no,create_by,create_time,update_by,update_time,del_flag,is_certification,credit_code,legal_person,legal_tel,business_license_url,logo_,area_)
 		values
 		(
 #{id,jdbcType=VARCHAR}
@@ -64,6 +65,7 @@
 ,#{legalTel,jdbcType=VARCHAR}
 ,#{businessLicenseUrl,jdbcType=VARCHAR}
 ,#{logo,jdbcType=VARCHAR}
+,#{area,jdbcType=VARCHAR}
 		)
 	]]>
 	</insert>
@@ -142,6 +144,9 @@
 			<if test="logo!=null">
 				logo_=#{logo,jdbcType=VARCHAR},
 			</if>
+			<if test="area!=null">
+				area_=#{area,jdbcType=VARCHAR},
+			</if>
 		</set>
 	where id_=#{id}
 	</update>

+ 1 - 2
common/src/main/resources/mapper/base/LabourServices.xml

@@ -91,8 +91,7 @@
 	where id_=#{id}
 	</update>
 	<select id="get" parameterType="string" resultMap="LabourServicesMap">
-		select 
-id_,type_,content_,status_,sort_no,approval_status,create_by,create_time,update_by,update_time,del_flag,approve_person_id,approve_time		from base_labour_services where id_=#{0}
+		select * from base_labour_services where id_=#{0}
 	</select>
 	<select id="exist" parameterType="string" resultType="int">
 		select count(*) from base_labour_services where id_=#{0}

+ 7 - 6
common/src/main/resources/mapper/job/JobUser.xml

@@ -126,14 +126,15 @@
 	where id_=#{id}
 	</update>
 	<select id="get" parameterType="string" resultMap="JobUserMap">
-		select 
-id_,create_by,create_time,update_by,update_time,del_flag,user_name,password_,real_name,open_id,tel_,sex_,birthday_,address_,first_job_time,head_image_url,is_authentication,id_card,id_card_url,job_status		from job_jobuser where id_=#{0}
+		select * from job_jobuser where id_=#{0}
 	</select>
 
-    <select id="getUserByOpenId" parameterType="string" resultMap="JobUserMap">
-		select
-        id_,create_by,create_time,update_by,update_time,del_flag,user_name,password_,real_name,open_id,tel_,sex_,birthday_,address_,first_job_time,head_image_url,is_authentication,id_card,id_card_url,job_status
-        from job_jobuser where open_id=#{0}  and del_flag=0
+    <select id="findByOpenId" parameterType="string" resultMap="JobUserMap">
+		select * from job_jobuser where open_id=#{0}  and del_flag=0
+	</select>
+
+	<select id="findByPhone" parameterType="string" resultMap="JobUserMap">
+		select * from job_jobuser where tel_=#{0}  and del_flag=0 limit 1
 	</select>
 
 	<select id="exist" parameterType="string" resultType="int">

+ 5 - 32
web/src/main/java/com/jpsoft/employment/config/WebMvcConfig.java

@@ -53,38 +53,11 @@ public class WebMvcConfig implements WebMvcConfigurer {
 						"/doc.html",
                         "/v2/**",
                         "/mobileApi/**")
-				.excludePathPatterns("/mobile/personInfoApi/findByPhone")
-				.excludePathPatterns("/mobile/personInfoApi/getVerifyCode")
-				.excludePathPatterns("/mobile/personInfoApi/loginByPassword")
-				.excludePathPatterns("/mobile/personInfoApi/validateCode")
-				.excludePathPatterns("/mobile/personInfoApi/findByOpenId")
-				.excludePathPatterns("/mobile/personInfoApi/getWeather")
-                .excludePathPatterns("/mobile/companyInfoApi/companyNum")
-				.excludePathPatterns("/mobile/newsInfoApi/firstLevelDirectory")
-				.excludePathPatterns("/mobile/newsInfoApi/secondLevelDirectory")
-				.excludePathPatterns("/mobile/newsInfoApi/newsList")
-				.excludePathPatterns("/mobile/newsInfoApi/newsDetail")
-				.excludePathPatterns("/mobile/companyInfoApi/regionList")
-				.excludePathPatterns("/mobile/companyInfoApi/companyList")
-				.excludePathPatterns("/mobile/companyInfoApi/companyDetail")
-				.excludePathPatterns("/mobile/companyInfoApi/attributeList")
-				.excludePathPatterns("/mobile/companyInfoApi/industryList")
-				.excludePathPatterns("/mobile/enterpriseInfoApi/enterpriseInfo")
-				.excludePathPatterns("/mobile/activityInfoApi/activityList")
-                .excludePathPatterns("/mobile/activityInfoApi/activityDetail")
-				.excludePathPatterns("/mobile/cooperationInfoApi/cooperationInfoList")
-				.excludePathPatterns("/mobile/cooperationInfoApi/cooperationInfoDetail")
-				.excludePathPatterns("/mobile/recruitInfoApi/recruitInfoList")
-				.excludePathPatterns("/mobile/recruitInfoApi/recruitInfoDetail")
-				.excludePathPatterns("/mobile/whisperingWallApi/whisperingWallInfoList")
-				.excludePathPatterns("/mobile/whisperingWallApi/whisperingWallInfoDetail")
-                .excludePathPatterns("/mobile/billInfoApi/dueList")
-                //.excludePathPatterns("/mobile/bannerInfo/getBannerInfo")
-				.excludePathPatterns("/mobile/doubleHundred/submitInformation")
-                .excludePathPatterns("/mobile/bannerInfo/findByOpenId")
-                .excludePathPatterns("/wechat/**")
-				.excludePathPatterns("/wxPay/**")
-				.excludePathPatterns("/aliPay/**")
+				.excludePathPatterns("/mobile/jobUserApi/findByOpenId")
+				.excludePathPatterns("/mobile/jobUserApi/wechatLogin")
+				.excludePathPatterns("/mobile/jobUserApi/validateCode")
+				.excludePathPatterns("/mobile/jobUserApi/getVerifyCode")
+				.excludePathPatterns("/mobile/jobUserApi/passwordLogin")
 				.excludePathPatterns("/mobile/recruitmentApi/getRecruitmentList");
 
 

+ 1 - 1
web/src/main/java/com/jpsoft/employment/modules/mobile/controller/BannerInfoApiController.java

@@ -75,7 +75,7 @@ public class BannerInfoApiController {
         MessageResult<Map> messageResult = new MessageResult<>();
 
         Map<String, Object> dataMap = new HashMap<String, Object>();
-        JobUser obj = jobUserService.getUserByOpenId(openId);
+        JobUser obj = jobUserService.findByOpenId(openId);
         String token = JwtUtil.createToken(jwtSecret, obj.getId(), DateTime.now().plusHours(6).toDate());
         dataMap.put("person", obj);
         dataMap.put("token", token);

+ 428 - 0
web/src/main/java/com/jpsoft/employment/modules/mobile/controller/JobUserApiController.java

@@ -0,0 +1,428 @@
+package com.jpsoft.employment.modules.mobile.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alipay.api.domain.CompanyInfo;
+import com.jpsoft.employment.config.OSSConfig;
+import com.jpsoft.employment.modules.common.dto.MessageResult;
+import com.jpsoft.employment.modules.common.utils.DES3;
+import com.jpsoft.employment.modules.common.utils.JwtUtil;
+import com.jpsoft.employment.modules.common.utils.OSSUtil;
+import com.jpsoft.employment.modules.common.utils.SMSUtil;
+import com.jpsoft.employment.modules.job.entity.JobUser;
+import com.jpsoft.employment.modules.job.service.JobUserService;
+import com.jpsoft.employment.modules.sys.entity.SysLog;
+import com.jpsoft.employment.modules.sys.service.SysLogService;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.joda.time.DateTime;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.ValueOperations;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import sun.awt.IconInfo;
+import sun.misc.BASE64Decoder;
+
+import java.io.ByteArrayInputStream;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+@RestController
+@RequestMapping("/mobile/jobUserApi")
+@Slf4j
+public class JobUserApiController {
+    @Value("${jwt.secret}")
+    private String jwtSecret;
+
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private JobUserService jobUserService;
+
+    @Autowired
+    private ValueOperations<String, Object> valueOperations;
+
+    @Autowired
+    private OSSConfig ossConfig;
+
+    @Autowired
+    private SysLogService sysLogService;
+
+    @PostMapping("findByOpenId")
+    @ApiOperation(value = "通过openId查询人员(公开接口)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "openId", value = "微信openId", required = true, paramType = "form")
+    })
+    public MessageResult<Map> findByOpenId(String openId) {
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+            JobUser jobUser = null;
+            if (StringUtils.isNotBlank(openId)) {
+                jobUser = jobUserService.findByOpenId(openId);
+            }
+
+            if (jobUser == null) {
+                messageResult.setResult(true);
+                messageResult.setCode(200);
+                return messageResult;
+            }
+
+            Map<String, Object> dataMap = new HashMap<String, Object>();
+            String token = JwtUtil.createToken(jwtSecret, jobUser.getId() + "", DateTime.now().plusHours(6).toDate());
+
+            dataMap.put("jobUser", jobUser);
+            dataMap.put("token", token);
+
+            messageResult.setData(dataMap);
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            logger.error(ex.getMessage(), ex);
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+    @PostMapping("wechatLogin")
+    @ApiOperation(value = "微信登录(公开接口)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "openId", value = "openId", required = true, paramType = "form")
+    })
+    public MessageResult<Map> wechatLogin(String openId) {
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+            JobUser jobUser = jobUserService.findByOpenId(openId);
+
+            if (jobUser ==null) {
+                DES3 des3 = new DES3();
+                String passwordEnc = des3.encrypt(jwtSecret,"123456");
+
+                jobUser = new JobUser();
+                jobUser.setId(UUID.randomUUID().toString());
+                jobUser.setRealName("未注册用户");
+                jobUser.setPassword(passwordEnc);
+                jobUser.setJobStatus("1");
+                jobUser.setCreateTime(new Date());
+                jobUser.setDelFlag(false);
+                jobUser.setHeadImageUrl("http://xpgj.oss-cn-shanghai.aliyuncs.com/xpgj/test/default_avatar.jpg");
+                jobUser.setIsAuthentication(false);
+                jobUser.setOpenId(openId);
+
+                jobUserService.insert(jobUser);
+            }else{
+                jobUser.setUpdateTime(new Date());
+                jobUserService.update(jobUser);
+            }
+
+            Map<String, Object> dataMap = new HashMap<String, Object>();
+            String token = JwtUtil.createToken(jwtSecret, jobUser.getId() + "", DateTime.now().plusHours(6).toDate());
+
+            dataMap.put("jobUser", jobUser);
+            dataMap.put("token", token);
+
+            messageResult.setData(dataMap);
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            log.error(ex.getMessage());
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+    @PostMapping("getVerifyCode")
+    @ApiOperation(value = "获取短信验证码(公开接口)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "telephone", value = "电话", required = true, paramType = "form"),
+    })
+    public MessageResult<String> getVerifyCode(String telephone) {
+        MessageResult<String> messageResult = new MessageResult<>();
+
+        try {
+            String key = "SMS_" + telephone;
+
+            String verifyCode = (String) valueOperations.get(key);
+
+            if (StringUtils.isEmpty(verifyCode)) {
+                verifyCode = SMSUtil.generateNumberString(6);
+                JSONObject verifyCodeJSON = new JSONObject();
+                verifyCodeJSON.put("code", verifyCode);
+
+                messageResult = SMSUtil.send(telephone, "SMS_49390047", verifyCodeJSON.toString());
+
+                //设置当前用户的验证码,5分钟内有效
+                valueOperations.set(key, verifyCode, 10, TimeUnit.MINUTES);
+            }
+
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+    @PostMapping("validateCode")
+    @ApiOperation(value = "验证短信验证码(公开接口)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "verifyCode", value = "验证码", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "openId", value = "微信openId", paramType = "form")
+    })
+    public MessageResult<Map> validateCode(String verifyCode, String openId, String telephone) {
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+            String smsKey = "SMS_" + telephone;
+
+            String beforeVerifyCode = (String) valueOperations.get(smsKey);
+
+            if (StringUtils.isEmpty(beforeVerifyCode)) {
+                throw new Exception("验证码已过期!");
+            }
+
+            if (!beforeVerifyCode.equals(verifyCode)) {
+                throw new Exception("验证码错误!");
+            }
+
+            JobUser jobUser = null;
+            String token = null;
+            if (StringUtils.isNotEmpty(openId)) {
+                jobUser = jobUserService.findByOpenId(openId);
+
+                if (jobUser != null) {
+                    jobUser.setUpdateTime(new Date());
+                    jobUserService.update(jobUser);
+                }else{
+                    DES3 des3 = new DES3();
+                    String passwordEnc = des3.encrypt(jwtSecret,"123456");
+                    jobUser = new JobUser();
+                    jobUser.setId(UUID.randomUUID().toString());
+                    jobUser.setRealName("未注册用户");
+                    jobUser.setPassword(passwordEnc);
+                    jobUser.setJobStatus("1");
+                    jobUser.setCreateTime(new Date());
+                    jobUser.setDelFlag(false);
+                    jobUser.setHeadImageUrl("http://xpgj.oss-cn-shanghai.aliyuncs.com/xpgj/test/default_avatar.jpg");
+                    jobUser.setIsAuthentication(false);
+                    jobUser.setOpenId(openId);
+
+                    jobUserService.insert(jobUser);
+                }
+
+                token = JwtUtil.createToken(jwtSecret, jobUser.getId(), DateTime.now().plusHours(6).toDate());
+            }
+
+
+            Map<String, Object> map = new HashMap<>();
+            map.put("token", token);
+            map.put("jobUser", jobUser);
+
+            messageResult.setData(map);
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            log.error(ex.getMessage());
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+    @PostMapping("passwordLogin")
+    @ApiOperation(value = "密码登录(公开接口)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "phone", value = "openId", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "password", value = "openId", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "openId", value = "openId", required = true, paramType = "form")
+    })
+    public MessageResult<Map> passwordLogin(String phone,String password,String openId) {
+        MessageResult<Map> messageResult = new MessageResult<>();
+
+        try {
+            JobUser jobUser = jobUserService.findByPhone(phone);
+            if(jobUser == null){
+                messageResult.setResult(false);
+                messageResult.setMessage("手机号未注册");
+                return messageResult;
+            }
+            DES3 des3 = new DES3();
+            String passwordEnc = des3.encrypt(jwtSecret,password);
+
+            if(passwordEnc.equals(jobUser.getPassword())){
+                jobUser.setOpenId(openId);
+                jobUser.setUpdateTime(new Date());
+                jobUserService.update(jobUser);
+            }else {
+                messageResult.setResult(false);
+                messageResult.setMessage("密码错误");
+                return messageResult;
+            }
+
+            Map<String, Object> dataMap = new HashMap<String, Object>();
+            String token = JwtUtil.createToken(jwtSecret, jobUser.getId() + "", DateTime.now().plusHours(6).toDate());
+
+            dataMap.put("jobUser", jobUser);
+            dataMap.put("token", token);
+
+            messageResult.setData(dataMap);
+            messageResult.setResult(true);
+            messageResult.setCode(200);
+        } catch (Exception ex) {
+            log.error(ex.getMessage());
+            messageResult.setResult(false);
+            messageResult.setMessage(ex.getMessage());
+        }
+
+        return messageResult;
+    }
+
+    @PostMapping("upload")
+    @ApiOperation(value = "人员照片上传")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "photoName", value = "照片名称", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "photoFile", value = "照片路径", required = true, paramType = "form", dataType = "__file"),
+            @ApiImplicitParam(name = "token", value = "令牌", required = false, paramType = "query"),
+            @ApiImplicitParam(name = "subject", value = "令牌", required = false, paramType = "query")
+    })
+    public MessageResult<String> upload(
+            String photoName, MultipartFile photoFile, String token, @RequestAttribute String subject) {
+        MessageResult<String> messageResult = new MessageResult<>();
+
+        try {
+            JobUser jobUser = jobUserService.get(subject);
+
+            if (jobUser == null) {
+                throw new Exception("人员信息不存在!");
+            }
+
+            String retFileUrl = OSSUtil.upload(ossConfig, "/jobUser", photoName, photoFile.getInputStream());
+
+            messageResult.setResult(true);
+            messageResult.setData(retFileUrl);
+            messageResult.setCode(200);
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+
+            messageResult.setResult(false);
+            messageResult.setMessage(e.getMessage());
+        }
+
+        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, "/jobUser", 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({
+            @ApiImplicitParam(name = "userId", value = "人员编号", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "openId", value = "微信openId", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "faceImageUrl", value = "照片地址", required = true, paramType = "form"),
+            @ApiImplicitParam(name = "token", value = "令牌", paramType = "form")
+    })
+    public MessageResult<JobUser> save(String userId, String openId, String faceImageUrl, String token) {
+        MessageResult<JobUser> messageResult = new MessageResult<>();
+
+        try {
+            JobUser jobUser = jobUserService.get(userId);
+
+            if (jobUser == null) {
+                throw new Exception("人员信息不存在!");
+            }
+
+            //todo 更新人脸照片
+            jobUser.setOpenId(openId);
+            jobUser.setHeadImageUrl(faceImageUrl);
+            jobUser.setUpdateTime(new Date());
+            jobUserService.update(jobUser);
+
+            messageResult.setData(jobUser);
+            messageResult.setResult(true);
+
+            messageResult.setCode(200);
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+
+            messageResult.setResult(false);
+            messageResult.setMessage(e.getMessage());
+        }
+
+        return messageResult;
+    }
+
+}