Commit ad453917 by jianan

电子报聘审批通知

parent 49f710ea
......@@ -6,6 +6,7 @@ import com.yd.api.agms.vo.hiring.*;
import com.yd.api.result.CommonResult;
import com.yd.dal.entity.agms.hiring.*;
import com.yd.dal.entity.customer.*;
import com.yd.dal.entity.customer.practitioner.PractitionerInfo;
import com.yd.dal.entity.meta.MdDropOptions;
import com.yd.dal.entity.meta.MdPractitionerHiringApproveSteps;
import com.yd.dal.entity.practitioner.hiring.HiringApproveRecords;
......@@ -22,6 +23,10 @@ import com.yd.dal.service.practitioner.PractitionerHiringDALService;
import com.yd.dal.service.user.AclUserDALService;
import com.yd.rmi.ali.send.service.SendService;
import com.yd.rmi.cache.SystemConfigService;
import com.yd.rmi.tencent.wechatinterf.pojo.templetemessage.DataDetailInfo;
import com.yd.rmi.tencent.wechatinterf.pojo.templetemessage.SendTemplateRequest;
import com.yd.rmi.tencent.wechatinterf.pojo.templetemessage.TemplateDataInfo;
import com.yd.rmi.tencent.wechatinterf.service.WechatInterfService;
import com.yd.util.CommonUtil;
import com.yd.util.config.ZHBErrorConfig;
import com.yd.util.page.PageInfoUtils;
......@@ -69,6 +74,8 @@ public class AgmsHiringServiceImpl implements AgmsHiringService {
private AclPractitionerPotentialAssignedTrackDALService aclPractitionerPotentialAssignedTrackDALService;
@Autowired
private MdDropOptionsDALService mdDropOptionsDALService;
@Autowired
private WechatInterfService wechatInterfService;
@Autowired
public void setAgmsHiringDalService(AgmsHiringDALService agmsHiringDalService){
......@@ -413,6 +420,9 @@ public class AgmsHiringServiceImpl implements AgmsHiringService {
//不是他
boolean flag = this.isHasNextStep(loginPractitionerId, mobileNo, basicInfoId, nextStep);
if (!flag) {
// 发送短信通知及公众号推送通知下一位审批人进行审批
noticeNextStep(nextStep, basicInfoId);
responseVO.setCommonResult(new CommonResult(true, ZHBErrorConfig.getErrorInfo("800000")));
return;
}
......@@ -421,6 +431,102 @@ public class AgmsHiringServiceImpl implements AgmsHiringService {
responseVO.setCommonResult(new CommonResult(true, ZHBErrorConfig.getErrorInfo("800000")));
}
private void noticeNextStep(MdPractitionerHiringApproveSteps nextStep, Long basicInfoId) {
AclPractitionerHiringBasicInfo basicInfo = aclPractitionerHiringBasicInfoDalService.findById(basicInfoId);
AclPractitionerHiringMembership membership = membershipMapper.selectByHiringBasicInfoId(basicInfoId);
// 1.获取下一步审批人的手机号
String[] mobileNoArray = new String [0];
// 1.1 如果是体系负责人
if (StringUtils.isNotEmpty(nextStep.getApproveRole())) {
Long practitionerId = membership.getApprovedBy();
AclPractitioner aclPractitioner = aclPractitionerMapper.selectByPrimaryKey(practitionerId);
mobileNoArray[0] = aclPractitioner.getMobileNo();
} else {
// 1.2 团队长之后的环节, 可能会有多个审批人
mobileNoArray = nextStep.getAppointedApprovePractitioners().split(",");
}
// 1.3 查询审批人列表
List<PractitionerInfo> practitionerList = aclPractitionerDalService.findPractitionerInfoByMobileList(Arrays.asList(mobileNoArray));
// 2.报聘人组织关系, 姓名
StringBuilder name2 = new StringBuilder();
String s3SubordinateSystemName = membership.getS3SubordinateSystemName();
String s2SubordinateSystemName = membership.getS2SubordinateSystemName();
String s1SubordinateSystemName = membership.getS1SubordinateSystemName();
if (StringUtils.isNotEmpty(s3SubordinateSystemName)) {
name2.append(s3SubordinateSystemName).append("纵队");
}
if (StringUtils.isNotEmpty(s2SubordinateSystemName)) {
name2.append(s2SubordinateSystemName).append("体系");
}
if (StringUtils.isNotEmpty(s1SubordinateSystemName)) {
name2.append(s1SubordinateSystemName).append("分部");
}
name2.append("的").append(basicInfo.getName());
// 发送短信通知下一位审批人进行审批
this.noticeSendSMS(name2.toString(), practitionerList, basicInfo);
// 公众号推送通知下一位审批人进行审批
this.noticeSendWeChatMsg(name2.toString(), practitionerList, basicInfo);
}
private void noticeSendWeChatMsg(String hiringName, List<PractitionerInfo> practitionerList, AclPractitionerHiringBasicInfo basicInfo) {
// String templateId = systemConfigService.getSingleConfigValue("TENCENT_WECHAT_TEMPLATE_ID_XB");
// String jumpUrl = systemConfigService.getSingleConfigValue("hiringApprove_page_url") + orderId;
String templateId = "4_GL7QFaFxucU4K35-2dy6RcjuPE6eQjJyf_2BKddx4";
String jumpUrl = "https://mdev.zuihuibi.cn/ydLife/login";
// 组装模板数据
String firstValue = systemConfigService.getSingleConfigValue("TENCENT_WECHAT_TEMPLATE_FIRST_HIRING");
String remarkValue = systemConfigService.getSingleConfigValue("TENCENT_WECHAT_TEMPLATE_REMARK_HIRING");
String color = systemConfigService.getSingleConfigValue("TENCENT_WECHAT_TEMPLATE_COLOR_XB");
TemplateDataInfo dataInfo = new TemplateDataInfo();
DataDetailInfo first = new DataDetailInfo();
DataDetailInfo keyword1 = new DataDetailInfo(hiringName, color);
DataDetailInfo keyword2 = new DataDetailInfo(CommonUtil.dateParseString(basicInfo.getCreatedAt(),"yyyy-MM-dd HH:mm:ss"), null);
DataDetailInfo remark = new DataDetailInfo(remarkValue, null);
dataInfo.setFirst(first);
dataInfo.setKeyword1(keyword1);
dataInfo.setKeyword2(keyword2);
dataInfo.setRemark(remark);
//TODO 调微信接口
if (StringUtils.isNotBlank(templateId)) {
SendTemplateRequest sendTemplateRequest = new SendTemplateRequest();
sendTemplateRequest.setTemplateId(templateId);
sendTemplateRequest.setData(dataInfo);
sendTemplateRequest.setUrl(jumpUrl);
for (PractitionerInfo practitionerInfo : practitionerList) {
// openId
sendTemplateRequest.setToUser(practitionerInfo.getYdWechatOpenid());
// 审批人姓名
first.setValue(firstValue.replace("name", practitionerInfo.getName()));
// 微信通知
wechatInterfService.sendTemplateMessage(sendTemplateRequest);
}
}
}
private void noticeSendSMS(String hiringName, List<PractitionerInfo> practitionerList, AclPractitionerHiringBasicInfo basicInfo) {
// 审批人姓名, 手机号
String name;
String mobileNo;
for (PractitionerInfo practitionerInfo : practitionerList) {
name = practitionerInfo.getName();
mobileNo = practitionerInfo.getMobileNo();
// 发短信
// ${name},您好!${name2}(S3纵队S2体系S1分部的XX)经纪人已提交报聘审批,请至“赢家平台>我的团队-报聘审批”进行查看审批,谢谢!
String templateCode = systemConfigService.getSingleConfigValue("ALI_SMS_HiringApproveNotice");
String content = "{\"name\":\"" + name + "\",\"hiringName\":\"" + hiringName + "\"}";
sendService.sendEmailOrSMS("sms", mobileNo, "0", content, templateCode, null, null, "电子报聘审批通知", 99, basicInfo.getId());
}
}
private boolean isHasNextStep(Long loginPractitionerId, String mobileNo, Long basicInfoId, MdPractitionerHiringApproveSteps nextStep) {
// 判断是辅导人和团队长
if (!CommonUtil.isNullOrZero(loginPractitionerId)) {
......
package com.yd.api.practitioner;
import com.yd.api.practitioner.service.PractitionerHiringContractService;
import com.yd.api.practitioner.service.PractitionerHiringService;
import com.yd.api.practitioner.vo.hiring.*;
import com.yd.api.result.JsonResult;
......@@ -270,4 +269,17 @@ public class PractitionerHiringController {
result.setData(responseVO);
return result;
}
/**
* 保存报聘经纪人微信个人二维码图片
*
*/
@RequestMapping("/saveWeChatQRcode")
public Object saveWeChatQRcode(@RequestBody SaveWeChatQRcodeRequestVO requestVO){
JsonResult result = new JsonResult();
SaveWeChatQRcodeResponseVO responseVO = practitionerHiringService.saveWeChatQRcode(requestVO);
result.addResult(responseVO);
result.setData(responseVO);
return result;
}
}
\ No newline at end of file
......@@ -58,4 +58,6 @@ public interface PractitionerHiringService {
QueryPractitionerInfoResponseVO queryPractitionerInfo(QueryPractitionerInfoRequestVO requestVO);
CommonResultResponseVO hiringSubmit(HiringBasicInfoIdRequestVO requestVO);
SaveWeChatQRcodeResponseVO saveWeChatQRcode(SaveWeChatQRcodeRequestVO requestVO);
}
......@@ -957,6 +957,33 @@ public class PractitionerHiringServiceImpl implements PractitionerHiringService
return resp;
}
@Override
public SaveWeChatQRcodeResponseVO saveWeChatQRcode(SaveWeChatQRcodeRequestVO requestVO) {
SaveWeChatQRcodeResponseVO resp = new SaveWeChatQRcodeResponseVO();
try {
String mediaId = requestVO.getVxUrlQRcode();
Long basicInfoId = requestVO.getHiringBasicInfoId();
String imgUrl = this.uploadImageToOss(mediaId, basicInfoId, 2);
if (imgUrl == null) {
resp.setCommonResult(new CommonResult(false, ZHBErrorConfig.getErrorInfo("830024")));
} else {
AclPractitionerHiringBasicInfo basicInfo = new AclPractitionerHiringBasicInfo();
basicInfo.setId(basicInfoId);
basicInfo.setWechatId(requestVO.getWechatId());
basicInfo.setWechatQRcodeOssPath(imgUrl);
basicInfoMapper.updateByPrimaryKeySelective(basicInfo);
resp.setCommonResult(new CommonResult(true, ZHBErrorConfig.getErrorInfo("800000")));
resp.setImgUrl(imgUrl);
}
} catch (Exception e) {
e.printStackTrace();
resp.setCommonResult(new CommonResult(false, e.getMessage()));
}
return resp;
}
private void distributeToSubsystemOwner(AclPractitionerHiringMembership memberShip) {
Long hiringBasicInfoId = memberShip.getHiringBasicInfoId();
String mdDropOptionName = memberShip.getMdDropOptionName();
......@@ -1029,7 +1056,7 @@ public class PractitionerHiringServiceImpl implements PractitionerHiringService
private String uploadImageToOss(String imgUrl, Long hiringBasicInfoId, Integer targetUseFor) throws Exception {
Map<String, Object> input = HttpUtil.getInput(imgUrl);
if (!(boolean) input.get("success")) {
throw new Exception(ZHBErrorConfig.getErrorInfo("830024"));
throw new Exception(ZHBErrorConfig.getErrorInfo("830025"));
}
//获取头像流
InputStream inputStream = (InputStream) input.get("is");
......
package com.yd.api.practitioner.vo.hiring;
import lombok.Data;
@Data
public class SaveWeChatQRcodeRequestVO {
private Long hiringBasicInfoId;
private String wechatId;
private String vxUrlQRcode;
}
package com.yd.api.practitioner.vo.hiring;
import com.yd.api.result.CommonResult;
import lombok.Data;
@Data
public class SaveWeChatQRcodeResponseVO {
private CommonResult commonResult;
private String imgUrl;
}
package com.yd.dal.entity.customer;
import java.util.Date;
import lombok.Data;
import java.util.Date;
/**
* 報聘经纪人基本资料表
*/
......@@ -94,6 +95,11 @@ public class AclPractitionerHiringBasicInfo {
private String wechatId;
/**
* 从业人员微信二维码
*/
private String wechatQRcodeOssPath;
/**
* email地址
*/
private String email;
......
......@@ -17,6 +17,10 @@ public class PractitionerInfo {
private Long canSeeSalaryList;
private String mobileNo;
private Long mentorId;//辅导人id
/**
* 银盾经纪公众号的微信客户标识,对当前开发账户唯一
*/
private String ydWechatOpenid;
public Long getCustomerId() {
return customerId;
......@@ -145,4 +149,12 @@ public class PractitionerInfo {
public void setMentorId(Long mentorId) {
this.mentorId = mentorId;
}
public String getYdWechatOpenid() {
return ydWechatOpenid;
}
public void setYdWechatOpenid(String ydWechatOpenid) {
this.ydWechatOpenid = ydWechatOpenid;
}
}
package com.yd.rmi.tencent.wechatinterf.pojo.templetemessage;
public class DataDetailInfo {
private String value;
private String color;
public DataDetailInfo() {
}
public DataDetailInfo(String value, String color) {
this.value = value;
this.color = color;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
package com.yd.rmi.tencent.wechatinterf.pojo.templetemessage;
import com.fasterxml.jackson.annotation.JsonProperty;
public class GetTemplateIdRequest {
@JsonProperty("template_id_short")
private String templateIdShort;
public String getTemplateIdShort() {
return templateIdShort;
}
public void setTemplateIdShort(String templateIdShort) {
this.templateIdShort = templateIdShort;
}
}
package com.yd.rmi.tencent.wechatinterf.pojo.templetemessage;
import com.fasterxml.jackson.annotation.JsonProperty;
public class GetTemplateIdResponse {
@JsonProperty("errcode")
private String errCode;
@JsonProperty("errmsg")
private String errMsg;
@JsonProperty("template_id")
private String templateId;
public String getErrCode() {
return errCode;
}
public void setErrCode(String errCode) {
this.errCode = errCode;
}
public String getErrMsg() {
return errMsg;
}
public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
public String getTemplateId() {
return templateId;
}
public void setTemplateId(String templateId) {
this.templateId = templateId;
}
}
package com.yd.rmi.tencent.wechatinterf.pojo.templetemessage;
import com.fasterxml.jackson.annotation.JsonProperty;
public class MiniProgramInfo {
@JsonProperty("appid")
private String appId;
@JsonProperty("pagepath")
private String pagePath;
public String getAppId() {
return appId;
}
public void setAppId(String appId) {
this.appId = appId;
}
public String getPagePath() {
return pagePath;
}
public void setPagePath(String pagePath) {
this.pagePath = pagePath;
}
}
package com.yd.rmi.tencent.wechatinterf.pojo.templetemessage;
import com.fasterxml.jackson.annotation.JsonProperty;
public class SendTemplateRequest {
@JsonProperty("touser")
private String toUser;
@JsonProperty("template_id")
private String templateId;
private String url;
@JsonProperty("miniprogram")
private MiniProgramInfo miniProgram;
private TemplateDataInfo data;
public String getToUser() {
return toUser;
}
public void setToUser(String toUser) {
this.toUser = toUser;
}
public String getTemplateId() {
return templateId;
}
public void setTemplateId(String templateId) {
this.templateId = templateId;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public MiniProgramInfo getMiniProgram() {
return miniProgram;
}
public void setMiniProgram(MiniProgramInfo miniProgram) {
this.miniProgram = miniProgram;
}
public TemplateDataInfo getData() {
return data;
}
public void setData(TemplateDataInfo data) {
this.data = data;
}
}
package com.yd.rmi.tencent.wechatinterf.pojo.templetemessage;
import com.fasterxml.jackson.annotation.JsonProperty;
public class SendTemplateResponse {
@JsonProperty("errcode")
private String errCode;
@JsonProperty("errmsg")
private String errMsg;
@JsonProperty("msgid")
private String msgId;
public String getErrCode() {
return errCode;
}
public void setErrCode(String errCode) {
this.errCode = errCode;
}
public String getErrMsg() {
return errMsg;
}
public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
public String getMsgId() {
return msgId;
}
public void setMsgId(String msgId) {
this.msgId = msgId;
}
}
package com.yd.rmi.tencent.wechatinterf.pojo.templetemessage;
import com.fasterxml.jackson.annotation.JsonProperty;
public class TemplateDataInfo {
@JsonProperty("first")
private DataDetailInfo first;
@JsonProperty("keyword1")
private DataDetailInfo keyword1;
@JsonProperty("keyword2")
private DataDetailInfo keyword2;
@JsonProperty("keyword3")
private DataDetailInfo keyword3;
@JsonProperty("remark")
private DataDetailInfo remark;
public DataDetailInfo getFirst() {
return first;
}
public void setFirst(DataDetailInfo first) {
this.first = first;
}
public DataDetailInfo getKeyword1() {
return keyword1;
}
public void setKeyword1(DataDetailInfo keyword1) {
this.keyword1 = keyword1;
}
public DataDetailInfo getKeyword2() {
return keyword2;
}
public void setKeyword2(DataDetailInfo keyword2) {
this.keyword2 = keyword2;
}
public DataDetailInfo getKeyword3() {
return keyword3;
}
public void setKeyword3(DataDetailInfo keyword3) {
this.keyword3 = keyword3;
}
public DataDetailInfo getRemark() {
return remark;
}
public void setRemark(DataDetailInfo remark) {
this.remark = remark;
}
}
......@@ -7,6 +7,7 @@ import com.yd.rmi.tencent.wechatinterf.pojo.accesstoken.AccessTokenResponse;
import com.yd.rmi.tencent.wechatinterf.pojo.authorize.AuthorizeRequest;
import com.yd.rmi.tencent.wechatinterf.pojo.jscode2session.Jscode2sessionRequest;
import com.yd.rmi.tencent.wechatinterf.pojo.jscode2session.Jscode2sessionResponse;
import com.yd.rmi.tencent.wechatinterf.pojo.templetemessage.SendTemplateRequest;
import com.yd.rmi.tencent.wechatinterf.pojo.ticket.TicketRequest;
import com.yd.rmi.tencent.wechatinterf.pojo.ticket.TicketResponse;
import com.yd.rmi.tencent.wechatinterf.pojo.token.TokenRequest;
......@@ -90,4 +91,10 @@ public interface WechatInterfService {
*/
AccessTokenByCodeResponse getAccessTokenByCode(AccessTokenByCodeRequest accessTokenByCodeRequest);
/**
* 发送模版信息
* @param sendTemplateRequest
*/
void sendTemplateMessage(SendTemplateRequest sendTemplateRequest);
}
......@@ -9,6 +9,7 @@ import com.yd.rmi.tencent.wechatinterf.pojo.accesstoken.AccessTokenResponse;
import com.yd.rmi.tencent.wechatinterf.pojo.authorize.AuthorizeRequest;
import com.yd.rmi.tencent.wechatinterf.pojo.jscode2session.Jscode2sessionRequest;
import com.yd.rmi.tencent.wechatinterf.pojo.jscode2session.Jscode2sessionResponse;
import com.yd.rmi.tencent.wechatinterf.pojo.templetemessage.SendTemplateRequest;
import com.yd.rmi.tencent.wechatinterf.pojo.ticket.TicketRequest;
import com.yd.rmi.tencent.wechatinterf.pojo.ticket.TicketResponse;
import com.yd.rmi.tencent.wechatinterf.pojo.token.TokenRequest;
......@@ -18,6 +19,8 @@ import com.yd.rmi.tencent.wechatinterf.service.WechatInterfService;
import com.yd.util.CommonUtil;
import com.yd.util.EncryptUtil;
import com.yd.util.JsonUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
......@@ -35,6 +38,7 @@ import java.util.Map.Entry;
@Service("wechatInterfService")
public class WechatInterfServiceImpl implements WechatInterfService {
private final static Logger logger = LoggerFactory.getLogger(WechatInterfServiceImpl.class);
@Autowired
private SystemConfigService systemConfigService;
@Autowired
......@@ -370,6 +374,18 @@ public class WechatInterfServiceImpl implements WechatInterfService {
return (AccessTokenByCodeResponse)JsonUtil.jsonToObj(responseStr, AccessTokenByCodeResponse.class);
}
@Override
public void sendTemplateMessage(SendTemplateRequest sendTemplateRequest) {
TokenResponse token = this.token(new TokenRequest());
String url = systemConfigService.getSingleConfigValue("TENCENT_WECHAT_TEMPLATE_SEND_URL") + token.getAccess_token();
logger.error("【》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》发送微信模板消息开始");
tranLogDALService.logDB("wechat", "sendTemplateMessage", "in", sendTemplateRequest.getToUser(), url, null, null);
String responseStr = weChatTransaction(url, null);
tranLogDALService.logDB("wechat", "sendTemplateMessage", "out", sendTemplateRequest.getToUser(), responseStr, null, null);
}
/**
* 微信接口交互
*/
......
......@@ -21,6 +21,7 @@
<result column="city_name" jdbcType="VARCHAR" property="cityName" />
<result column="resident_address" jdbcType="LONGVARCHAR" property="residentAddress" />
<result column="wechat_id" jdbcType="VARCHAR" property="wechatId" />
<result column="wechat_QRcode_oss_path" jdbcType="VARCHAR" property="wechatQRcodeOssPath" />
<result column="email" jdbcType="VARCHAR" property="email" />
<result column="personer_picture_oss_path" jdbcType="VARCHAR" property="personerPictureOssPath" />
<result column="payroll_oss_path" jdbcType="VARCHAR" property="payrollOssPath" />
......@@ -43,7 +44,7 @@
<!--@mbg.generated-->
id, practitioner_potential_id, invitee_practitioner_id, `name`, mobile_no, id_type_id,
id_type, id_no, gender, practitioner_birthdate, province_id, province_name, city_id,
city_name, resident_address, wechat_id, email, personer_picture_oss_path, payroll_oss_path, id_front_page_oss_path,
city_name, resident_address, wechat_id, wechat_QRcode_oss_path, email, personer_picture_oss_path, payroll_oss_path, id_front_page_oss_path,
id_back_page_oss_path, last_graduate_code, last_graduate_grade, last_graduate_school, last_graduate_certification_oss_path,
bank_account_opening, bank_account_id, personal_sign_oss_path, is_active, created_at,
created_by, updated_at, updated_by, approve_status
......@@ -324,6 +325,9 @@
<if test="wechatId != null">
wechat_id = #{wechatId,jdbcType=VARCHAR},
</if>
<if test="wechatQRcodeOssPath != null">
wechat_QRcode_oss_path = #{wechatQRcodeOssPath,jdbcType=VARCHAR},
</if>
<if test="email != null">
email = #{email,jdbcType=VARCHAR},
</if>
......
......@@ -1458,6 +1458,7 @@
<result column="practitionerRegNo" property="practitionerRegNo" />
<result column="canSeeSalaryList" property="canSeeSalaryList" />
<result column="mentor_id" property="mentorId" />
<result column="yd_wechat_openid" property="ydWechatOpenid" />
<result column="mobile_no" jdbcType="VARCHAR" property="mobileNo" typeHandler="com.yd.util.deshandler.DESTypeHandler"/>
</resultMap>
......@@ -1941,8 +1942,10 @@
p.practitioner_reg_no as practitionerRegNo,
p.mobile_no,
p.mentor_id mentorId,
c.yd_wechat_openid,
p.can_see_salary_list as canSeeSalaryList
from ag_acl_practitioner p
left join ag_acl_customer c on c.id = p.customer_id
left join ag_acl_insurer_branch b on p.insurer_branch_id = b.id
left join ag_acl_practitioner_subordinate_system sys on p.subordinate_system_id = sys.id
left join ag_acl_practitioner_setting s on p.id = s.practitioner_id
......
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