Commit c8e3f7b1 authored by 3533457856@qq.com's avatar 3533457856@qq.com

发货单

新增/编辑/详情接口 更新发货单状态接口
parent 0d3a6ec3
package com.yeejoin.amos.boot.module.hygf.api.Enum;
/**
* @author DELL
* 手机登录类型: 2020年底 驻场开发
*/
public enum PhoneRegisterTypeEum {
WX("微信授权快捷登录",1),
PHONE_VERIFY("手机验证登录",2);
private String name;
private int code;
PhoneRegisterTypeEum(String name,int code){
this.name = name;
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}
package com.yeejoin.amos.boot.module.hygf.api.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
*
* @author Provence
* @version v1.0
* @date 2023/8/21 15:15
*/
@Data
public class MobileLoginParamDto {
/**
* 注册类型:1-微信授权快捷登录;2-手机验证登录
*/
@ApiModelProperty("注册类型:1-微信授权快捷登录;2-手机验证登录")
private int registerType;
/**
* 是否需要需要短信验证: true-验证; false-不验证
*/
@ApiModelProperty("是否需要需要短信验证: true-验证; false-不验证")
private Boolean isNeedVerify;
/**
* 注册类型为1时使用:微信用户数据字段1,根据1、2进行数据解密,计算出手机号
*/
@ApiModelProperty("注册类型为1时使用:微信用户数据字段1,根据1、2进行数据解密,计算出手机号")
private String encryptedData;
/**
* 注册类型为1时使用:微信用户数据字段2,根据1、2进行数据解密,计算出手机号
*/
@ApiModelProperty("注册类型为1时使用:微信用户数据字段1,根据1、2进行数据解密,计算出手机号")
private String iv;
/**
*注册类型为1时使用:微信用户数据字段3,根据1、2、3进行数据解密,计算出手机号
*/
@ApiModelProperty("注册类型为1时使用:微信用户数据字段3,根据1、2、3进行数据解密,计算出手机号")
private String code;
/**
* 注册类型为2-手机验证登录时使用:手机号
*/
@ApiModelProperty("注册类型为2-手机验证登录时使用:手机号")
private String phoneNo;
/**
* 注册类型为2-手机验证登录时使用:验证码
*/
@ApiModelProperty("注册类型为2-手机验证登录时使用:验证码")
private String verifyCode;
private PeasantHouseholdDto peasantHouseholdDto;
}
......@@ -103,4 +103,33 @@ public class PeasantHouseholdDto extends BaseDto {
@ApiModelProperty(value = "常住地址文字")
@TableField(typeHandler = FastjsonTypeHandler.class)
private List<String> permanentAddressText;
@ApiModelProperty(value = "区域公司id")
private String companyId;
@ApiModelProperty(value = "区域公司code")
private String companyCode;
@ApiModelProperty(value = "区域公司名称")
private String companyName;
@ApiModelProperty(value = "身份证正面")
@TableField(typeHandler = FastjsonTypeHandler.class)
private List<String> idCardFront;
@ApiModelProperty(value = "身份证反面")
@TableField(typeHandler = FastjsonTypeHandler.class)
private List<String> idCardOpposite;
@ApiModelProperty(value = "微信唯一id")
private String openId;
@ApiModelProperty(value = "是否已认证(0-未认证,1-已认证)")
private Integer isCertified;
@ApiModelProperty(value = "微信注册账号")
private String loginId;
@ApiModelProperty(value = "微信注册密码")
private String loginPassword;
}
package com.yeejoin.amos.boot.module.hygf.api.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import com.yeejoin.amos.boot.module.hygf.api.entity.PeasantHousehold;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
*
* @author Provence
* @version v1.0
* @date 2023/8/21 13:16
*/
@Data
@ApiModel (value="PeasantHouseholdWxDto", description="农户信息")
public class PeasantHouseholdWxDto {
@ApiModelProperty (value = "登录方式")
private String loginType;
@ApiModelProperty (value = "验证码登录code")
private String verifyCode;
@ApiModelProperty
private String userState;
@ApiModelProperty
private AuthInfoDto authInfo;
@ApiModelProperty (value = "用户信息")
private AgencyUserModel userInfo;
@ApiModelProperty (value = "农户信息")
private PeasantHousehold peasantHousehold;
@Data
@ApiModel (value="authInfo信息", description="authInfo信息")
public static class AuthInfoDto {
@ApiModelProperty (value = "登录token")
private String token;
@ApiModelProperty (value = "用户id")
private String personId;
@ApiModelProperty (value = "appKey")
private String appKey;
@ApiModelProperty (value = "product")
private String product;
}
}
......@@ -140,4 +140,50 @@ public class PeasantHousehold extends BaseEntity {
* */
@TableField("developer")
private String developer;
/*
* 区域公司id
* */
@TableField("company_id")
private String companyId;
/*
* 区域公司code
* */
@TableField("company_code")
private String companyCode;
/*
* 区域公司名称
* */
@TableField("company_name")
private String companyName;
/*
* 身份证正面
* */
@TableField(value = "id_card_front", typeHandler = FastjsonTypeHandler.class)
private List<String> idCardFront;
/*
* 身份证反面
* */
@TableField(value = "id_card_opposite", typeHandler = FastjsonTypeHandler.class)
private List<String> idCardOpposite;
/*
* 微信唯一id
* */
@TableField("open_id")
private String openId;
/*
* 是否已认证(0-未认证,1-已认证)
* */
@TableField("is_certified")
private Integer isCertified;
/*
* 微信注册账号
* */
@TableField("login_id")
private String loginId;
/*
* 微信注册密码
* */
@TableField("login_password")
private String loginPassword;
}
package com.yeejoin.amos.boot.module.hygf.biz.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.hygf.api.dto.MobileLoginParamDto;
import com.yeejoin.amos.boot.module.hygf.api.dto.PeasantHouseholdDto;
import com.yeejoin.amos.boot.module.hygf.api.dto.PeasantHouseholdWxDto;
import com.yeejoin.amos.boot.module.hygf.api.dto.SurveyInformationDto;
import com.yeejoin.amos.boot.module.hygf.biz.service.impl.PeasantHouseholdServiceImpl;
import com.yeejoin.amos.boot.module.hygf.biz.service.impl.SurveyInformationServiceImpl;
import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.RegionModel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
/**
* 农户信息
*
* @author system_generator
* @date 2023-07-07
*/
@RestController
@Api(tags = "农户信息Api")
@RequestMapping(value = "/peasant-household/miniprogram")
public class PeasantHouseholdWxController extends BaseController {
@Autowired
SurveyInformationServiceImpl surveyInformationServiceImpl;
@Autowired
PeasantHouseholdServiceImpl peasantHouseholdServiceImpl;
@Autowired
RedisUtils redisUtils;
private static final String regionRedis="app_region_redis";
/**
* 新增农户信息
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/save")
@ApiOperation(httpMethod = "POST", value = "新增农户信息", notes = "新增农户信息")
public ResponseModel<PeasantHouseholdDto> save(@RequestBody PeasantHouseholdDto model) {
AgencyUserModel userInfo = getUserInfo();
SurveyInformationDto surveyInformationDto = new SurveyInformationDto();
surveyInformationServiceImpl.createWithModel(surveyInformationDto);
JSONArray regionName = getRegionName();
List<RegionModel> list = JSONArray.parseArray(regionName.toJSONString(), RegionModel.class);
// 处理项目地址
String area = "";
if(model.getProjectAddress().size() != 0) {
for (Integer reg : model.getProjectAddress())
for (RegionModel re : list) {
if (re.getRegionCode().equals(Integer.valueOf(reg))) {
area = area + re.getRegionName() + "/";
}
}
model.setProjectAddressName(area.substring(0, area.length() - 2));
if ("1".equals(model.getIsPermanent())) {
model.setPermanentAddress(model.getProjectAddress());
model.setPermanentAddressDetail(model.getProjectAddressDetail());
model.setPermanentAddressName(area.substring(0, area.length() - 2));
}else {
// 处理常住地址
String permanent = "";
if(model.getPermanentAddress().size() != 0) {
for (Integer reg : model.getPermanentAddress())
for (RegionModel re : list) {
if (re.getRegionCode().equals(Integer.valueOf(reg))) {
permanent = permanent + re.getRegionName() + "/";
}
}
model.setPermanentAddressName(permanent.substring(0, permanent.length() - 2));
}
}
}
model.setSurveyInformationId(surveyInformationDto.getSequenceNbr());
model.setSurveyOrNot(0);
model.setReview(0);
model.setDeveloperCode(userInfo.getCompanys().get(0).getOrgCode());
model.setDeveloperId(userInfo.getCompanys().get(0).getSequenceNbr());
model.setDeveloperName(userInfo.getOrgNamesWithoutRole());
if(StringUtils.isEmpty(model.getDeveloper())){
model.setDeveloper(userInfo.getRealName());
}
if(model.getCreationTime() == null){
model.setCreationTime(new Date());
}
model.setIsCertified(0);// 未认证
PeasantHouseholdDto householdDto = peasantHouseholdServiceImpl.createWithModel(model);
return ResponseHelper.buildResponse(householdDto);
}
/**
* 根据sequenceNbr更新
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PutMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "PUT", value = "根据sequenceNbr更新农户信息", notes = "根据sequenceNbr更新农户信息")
public ResponseModel<PeasantHouseholdDto> updateBySequenceNbrPeasantHousehold(@RequestBody PeasantHouseholdDto model,@PathVariable(value = "sequenceNbr") Long sequenceNbr) {
model.setSequenceNbr(sequenceNbr);
JSONArray regionName = getRegionName();
List<RegionModel> list = JSONArray.parseArray(regionName.toJSONString(), RegionModel.class);
if(model.getProjectAddress().size()>0){
// 处理项目地址
String projectAddressName = "";
for (Integer reg : model.getProjectAddress())
for (RegionModel re : list) {
if (re.getRegionCode().equals(Integer.valueOf(reg))) {
projectAddressName = projectAddressName + re.getRegionName() + "/";
}
}
model.setProjectAddressName(projectAddressName.substring(0, projectAddressName.length() - 2));
}
if ("1".equals(model.getIsPermanent())) {
model.setPermanentAddress(model.getProjectAddress());
model.setPermanentAddressDetail(model.getProjectAddressDetail());
}
if(model.getPermanentAddress().size()>0){
// 处理常驻地址
String permanentAddressName = "";
for (Integer reg : model.getPermanentAddress())
for (RegionModel re : list) {
if (re.getRegionCode().equals(Integer.valueOf(reg))) {
permanentAddressName = permanentAddressName + re.getRegionName() + "/";
}
}
model.setPermanentAddressName(permanentAddressName.substring(0, permanentAddressName.length() - 2));
}
PeasantHouseholdDto peasantHouseholdDto = peasantHouseholdServiceImpl.queryBySeq(sequenceNbr);
BeanUtils.copyProperties(model,peasantHouseholdDto);
return ResponseHelper.buildResponse(peasantHouseholdServiceImpl.updateWithModel(peasantHouseholdDto));
}
/**
* 根据sequenceNbr删除
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@DeleteMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "DELETE", value = "根据sequenceNbr删除农户信息", notes = "根据sequenceNbr删除农户信息")
public ResponseModel<Boolean> deleteBySequenceNbr(HttpServletRequest request, @PathVariable(value = "sequenceNbr") Long sequenceNbr){
return ResponseHelper.buildResponse(peasantHouseholdServiceImpl.deletePeasantHouseholdBySequenceNbr(sequenceNbr));
}
/**
* 根据sequenceNbr查询
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "GET",value = "根据sequenceNbr查询单个农户信息", notes = "根据sequenceNbr查询单个农户信息")
public ResponseModel<PeasantHouseholdDto> selectOne(@PathVariable Long sequenceNbr) {
PeasantHouseholdDto peasantHouseholdDto = peasantHouseholdServiceImpl.queryBySeq(sequenceNbr);
if(JSON.toJSONString(peasantHouseholdDto.getProjectAddress()).equals(JSON.toJSONString(peasantHouseholdDto.getPermanentAddress()))){
peasantHouseholdDto.setIsPermanent("1");
}else {
peasantHouseholdDto.setIsPermanent("0");
}
return ResponseHelper.buildResponse(peasantHouseholdDto);
}
public JSONArray getRegionName(){
JSONArray jsonArray = new JSONArray();
if (redisUtils.hasKey(regionRedis)) {
jsonArray= JSONArray.parseArray(redisUtils.get(regionRedis).toString());
}else {
Collection<RegionModel> regionChild = new ArrayList<>();
RegionModel regionModel1 = new RegionModel();
regionChild.add(regionModel1);
FeignClientResult<Collection<RegionModel>> collectionFeignClientResult = Systemctl.regionClient.queryForTreeParent(610000L);
Collection<RegionModel> result = collectionFeignClientResult.getResult();
for (RegionModel regionModel : result) {
if(null != regionModel && null != regionModel.getChildren()) {
for (RegionModel child : regionModel.getChildren()) {
if(null != child && null != child.getChildren()) {
for (RegionModel childChild : child.getChildren()) {
jsonArray.add(childChild);
}
child.setChildren(regionChild);
jsonArray.add(child);
}
}
regionModel.setChildren(regionChild);
jsonArray.add(regionModel);
}
}
redisUtils.set(regionRedis,jsonArray);
}
return jsonArray;
}
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@RequestMapping(value = "/mobile/login", method = RequestMethod.POST)
@ApiOperation(httpMethod = "POST", value = "微信授权登陆", notes = "微信授权登陆")
public ResponseModel<PeasantHouseholdWxDto> wxUserLogin(@RequestBody MobileLoginParamDto wx) {
return ResponseHelper.buildResponse(peasantHouseholdServiceImpl.wxUserLogin(wx));
}
@TycloudOperation(ApiLevel = UserType.AGENCY,needAuth = false)
@RequestMapping(value = "/mobile/register", method = RequestMethod.POST)
@ApiOperation(httpMethod = "POST", value = "微信农户注册", notes = "微信农户注册")
public ResponseModel<PeasantHouseholdWxDto> wxUserRegister(@RequestBody MobileLoginParamDto wx) {
return ResponseHelper.buildResponse(peasantHouseholdServiceImpl.wxUserRegister(wx));
}
}
package com.yeejoin.amos.boot.module.hygf.biz.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.hygf.api.Enum.PhoneRegisterTypeEum;
import com.yeejoin.amos.boot.module.hygf.api.dto.MobileLoginParamDto;
import com.yeejoin.amos.boot.module.hygf.api.dto.PeasantHouseholdWxDto;
import com.yeejoin.amos.boot.module.hygf.api.entity.Commercial;
import com.yeejoin.amos.boot.module.hygf.api.entity.ExtendedInformation;
import com.yeejoin.amos.boot.module.hygf.api.entity.Information;
......@@ -9,15 +14,34 @@ import com.yeejoin.amos.boot.module.hygf.api.entity.SurveyDetails;
import com.yeejoin.amos.boot.module.hygf.api.mapper.PeasantHouseholdMapper;
import com.yeejoin.amos.boot.module.hygf.api.service.IPeasantHouseholdService;
import com.yeejoin.amos.boot.module.hygf.api.dto.PeasantHouseholdDto;
import com.yeejoin.amos.boot.module.jxiop.api.util.HttpUtil;
import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.privilege.model.VerifyCodeAuthModel;
import com.yeejoin.amos.feign.privilege.util.DesUtil;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.rdbms.annotation.Condition;
import org.typroject.tyboot.core.rdbms.annotation.Operator;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.InputStream;
import java.security.spec.AlgorithmParameterSpec;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
......@@ -109,4 +133,206 @@ public class PeasantHouseholdServiceImpl extends BaseService<PeasantHouseholdDto
public List<PeasantHouseholdDto> queryForPeasantHouseholdList() {
return this.queryForList("" , false);
}
@Value("${security.productWeb}")
private String product;
@Value("${security.appKey}")
private String appKey;
@Autowired
RedisUtils redisUtils;
@Value("${login.environment}")
private String loginEnvironment;
private Long TOKEN_TIME = 1209600l;
@Autowired
private WxServiceImpl wxService;
public PeasantHouseholdWxDto wxUserLogin(MobileLoginParamDto wxDTO) {
// 判断是否注册过
/*boolean isUseVerifyCode = "2".equals(wxDTO.getRegisterType());
if (isUseVerifyCode) {
peasantHousehold = this.query().eq("telephone", wxDTO.getPhoneNo()).one();
} else {
peasantHousehold = this.query().eq("open_id", wxDTO.getOpenId()).one();
}*/
// 通过手机号和验证码调用平台接口进行验证
String phoneNo = this.parsePhoneNo(wxDTO);
if (phoneNo == null) {
throw new BadRequest("获取手机号失败!");
}
PeasantHousehold peasantHousehold = this.query().eq("telephone", phoneNo).one();
// 在平台里注册过但是没有农户信息
/*String loginId;
String password;*/
if (null == peasantHousehold) {
// 没注册过,进行返回
PeasantHouseholdWxDto peasantHouseholdWxDto = new PeasantHouseholdWxDto();
AgencyUserModel agencyUserModel = new AgencyUserModel();
agencyUserModel.setMobile(phoneNo);
peasantHouseholdWxDto.setUserInfo(agencyUserModel);
peasantHouseholdWxDto.setUserState("0");
return peasantHouseholdWxDto;
}
PeasantHouseholdWxDto loginResult = doLogin(wxDTO);
loginResult.setPeasantHousehold(peasantHousehold);
return loginResult;
}
public PeasantHouseholdWxDto wxUserRegister(MobileLoginParamDto wxDTO) {
// 注册用户
doRegister(wxDTO);
// 创建一个农户信息
PeasantHouseholdDto peasantHouseholdDto = wxDTO.getPeasantHouseholdDto();
peasantHouseholdDto = this.createWithModel(peasantHouseholdDto);
PeasantHouseholdWxDto loginResult = doLogin(wxDTO);
PeasantHousehold peasantHousehold = new PeasantHousehold();
BeanUtils.copyProperties(peasantHouseholdDto, peasantHousehold);
loginResult.setPeasantHousehold(peasantHousehold);
return loginResult;
}
public AgencyUserModel doRegister(MobileLoginParamDto mobileLoginParamDto) {
/*FeignClientResult<List<RoleModel>> roleListResult = Privilege.roleClient.queryRoleList(null, null);
List<RoleModel> allRoleList = roleListResult.getResult();
List<RoleModel> userRoleList = new ArrayList<>();
List<Long> roleIds = new ArrayList<>();
// 创建一个空的用户信息,等待认证
String custPassword = DesUtil.encode(password, "qaz");
List<String> split = Arrays.asList(StringUtils.split(appCodes, ','));
Map<Long, List<Long>> roleSeqMap = new HashMap<>();
Map<Long, List<RoleModel>> orgRoles = new HashMap<>();
userRoleList = allRoleList.stream().filter(r -> r.getRoleName().equals(regUnitInfo.getUnitTypeCode()))
.collect(Collectors.toList());
userRoleList.forEach(r -> {
if (!roleIds.contains(r.getSequenceNbr())) {
roleIds.add(r.getSequenceNbr());
}
});
roleSeqMap.put(companyInfo.getSequenceNbr(), roleIds);
orgRoles.put(companyInfo.getSequenceNbr(), userRoleList);*/
//
String custPassword = DesUtil.encode(mobileLoginParamDto.getPhoneNo(), "qaz");
AgencyUserModel agencyUserModel = new AgencyUserModel();
agencyUserModel.setUserName(mobileLoginParamDto.getPhoneNo());
agencyUserModel.setRealName(mobileLoginParamDto.getPhoneNo());
agencyUserModel.setPassword(custPassword);
agencyUserModel.setRePassword(custPassword);
agencyUserModel.setLockStatus("LOCK");
agencyUserModel.setAgencyCode("JXIOP");
agencyUserModel.setMobile(mobileLoginParamDto.getPhoneNo());
/*agencyUserModel.setAppCodes(split);
agencyUserModel.setOrgRoles(orgRoles);
agencyUserModel.setOrgRoleSeqs(roleSeqMap);*/
FeignClientResult<AgencyUserModel> userResult = Privilege.agencyUserClient.create(agencyUserModel);
if (userResult == null || userResult.getResult() == null) {
throw new BadRequest("单位注册失败");
}
return userResult.getResult();
}
public PeasantHouseholdWxDto doLogin(MobileLoginParamDto param) {
RequestContext.setToken("");
RequestContext.setProduct(product);
RequestContext.setAppKey(appKey);
/*IdPasswordAuthModel idPasswordAuthModel = new IdPasswordAuthModel();
idPasswordAuthModel.setLoginId(loginId);
idPasswordAuthModel.setPassword(password);*/
String phoneNo = this.parsePhoneNo(param);
if (phoneNo == null) {
throw new BadRequest("获取手机号失败!");
}
VerifyCodeAuthModel model = new VerifyCodeAuthModel();
model.setLoginId(phoneNo);
if (!param.getIsNeedVerify() || ("dev".equals(loginEnvironment) && "666666".equals(param.getVerifyCode()))) {
model.setVerifyCode(com.yeejoin.precontrol.common.utils.DesUtil.encode(phoneNo, phoneNo));
} else {
model.setVerifyCode(param.getVerifyCode());
}
// FeignClientResult loginResult = Privilege.authClient.idpassword(idPasswordAuthModel);
FeignClientResult loginResult = Privilege.authClient.mobileVerifyCode(model);
if (loginResult.getStatus() != 200) {
log.error("远程调用Privilege服务失败: " + loginResult.getDevMessage());
String message = StringUtils.isEmpty(loginResult.getMessage()) ? "账号或密码错误" : loginResult.getMessage();
throw new BadRequest(message);
}
HashMap resultMap = (HashMap) loginResult.getResult();
String token = resultMap.get("token").toString();
RequestContext.setToken(token);
// redisUtils.set(model.getPhone() + "_token", token, TOKEN_TIME);
// 设置登录信息
PeasantHouseholdWxDto peasantHouseholdWxDto = new PeasantHouseholdWxDto();
// 设置authInfo信息
PeasantHouseholdWxDto.AuthInfoDto authInfoDto = new PeasantHouseholdWxDto.AuthInfoDto();
authInfoDto.setToken(token);
authInfoDto.setPersonId((String) resultMap.get("userId"));
authInfoDto.setAppKey(appKey);
authInfoDto.setProduct(product);
peasantHouseholdWxDto.setAuthInfo(authInfoDto);
// 查询用户信息
FeignClientResult<AgencyUserModel> getme = Privilege.agencyUserClient.getme();
getme.getResult().setPassword("");
getme.getResult().setAppCodes(new ArrayList());
AgencyUserModel userModel = (AgencyUserModel) getme.getResult();
peasantHouseholdWxDto.setUserInfo(userModel);
return peasantHouseholdWxDto;
}
/**
* 手机号解析
*
* @param param MobileLoginParam.class
* @return String phoneNo
*/
private String parsePhoneNo(MobileLoginParamDto param) {
if (param.getRegisterType() == PhoneRegisterTypeEum.WX.getCode()) {
// 进行验证码解析
String encryptedData = param.getEncryptedData();
String iv = param.getIv();
String code = param.getCode();
return getPhoneNumber(wxService.getSessionKey(code), encryptedData, iv);
} else {
return param.getPhoneNo();
}
}
public String getPhoneNumber(String sessionkey, String encryptedData, String iv) {
byte[] encrypData = java.util.Base64.getDecoder().decode(encryptedData);
byte[] ivData = java.util.Base64.getDecoder().decode(iv);
byte[] sessionKey = java.util.Base64.getDecoder().decode(sessionkey);
String resultString = null;
AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivData);
SecretKeySpec keySpec = new SecretKeySpec(sessionKey, "AES");
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
resultString = new String(cipher.doFinal(encrypData), "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
JSONObject object = JSONObject.parseObject(resultString);
if (object != null) {
// 拿到手机号码
String phone = object.getString("phoneNumber");
return phone;
}
return null;
}
}
\ No newline at end of file
package com.yeejoin.amos.boot.module.hygf.biz.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.module.jxiop.api.util.HttpUtil;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import java.io.InputStream;
/**
* TODO(一句话描述该类的功能)
*
* @author Provence
* @version v1.0
* @date 2023/8/21 16:21
*/
@Slf4j
@Component
public class WxServiceImpl {
@Value ("${hygfProgram.appid}")
private String appId;
@Value ("${hygfProgram.secret}")
private String secret;
public String getSessionKey(String code) {
JSONObject jsonObject = getCode2Session(code);
String sessionKey = null;
if (jsonObject != null) {
sessionKey = jsonObject.getString("session_key");
}
return sessionKey;
}
public JSONObject getCode2Session(String code) {
String url = buildOpenIdUrl(appId, secret, code);
String resultStr = HttpUtil.sendHttpGet(url);
ResponeVo responeVo = JSONObject.parseObject(resultStr, ResponeVo.class);
log.error("手机号解析结果" + JSONObject.toJSONString(responeVo));
System.out.println("手机号解析结果" + JSONObject.toJSONString(responeVo));
JSONObject jsonObject = JSONObject.parseObject(responeVo.getContent());
if (jsonObject != null) {
int errcode = jsonObject.getIntValue("errcode");
if (errcode == 0) {
// session_key 会话秘钥
// String openId = jsonObject.getString("openid");
return jsonObject;
} else {
throw new BadRequest(jsonObject.getString("errmsg"));
}
} else {
throw new BadRequest("微信接口调用失败");
}
}
private String buildOpenIdUrl(String appId, String secret, String code) {
String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appId + "&secret=" + secret + "&js_code="
+ code + "&grant_type=authorization_code";
return url;
}
@Data
public static class ResponeVo {
int code;
CloseableHttpResponse response;
String content;
byte[] inStream;
InputStream inputStream;
}
}
......@@ -85,30 +85,36 @@ spring.jms.pub-sub-domain=false
myqueue=amos.privilege.v1.JXIOP.AQSC_FDGL.userBusiness
regulator.unit.code=86*258
# 经销商应用code
# 经销商应用code
dealer.appcode=studio_normalapp_5133538
hygf.sms.tempCode=SMS_HYGF_0001
# 华为短信相关配置
# 华为短信相关配置
sms.huawei.url=https://smsapi.cn-north-4.myhuaweicloud.com:443/sms/batchSendSms/v1
sms.huawei.appKey=n3FYPWO7Heo1ze212QRBvF4VA2E2
sms.huawei.appSecret=IFhiMpWROi7w4Ei21ZbfIjKyt97b
# 模板id
# 模板id
sms.huawei.templateId=6aaeb4bf916d4db0a1942c598912519e
# 签名通道号
# 签名通道号
sms.huawei.sender=1069368924410006092
# 签名名称
sms.huawei.signature=华为云短信测试
# 签名名称
sms.huawei.signature=华为云短信测试
# 审核pageId确认
# 审核pageId确认
power.station.examine.pageId=1680853427061551106
# 电站审核计划id
# 电站审核计划id
power.station.examine.planId=c4ed1873-0dc6-4518-a7a9-dbc588ef35e5
# 用户组userGroupId
# 用户组userGroupId
hygf.user.group.id=1679755750924120066
unitInfo.station.examine.planId=51776087-a9cf-4a87-9a03-24fd24a8cf45
hygf.sms.tempCodeJXS=SMS_HYGF_0002
login.environment=
security.productWeb=
security.appKey=
hygfProgram.appid=wx2188769349b1ddeb
hygfProgram.secret=
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment