Commit b6943319 by huluobin

企业微信通知

parent 0b362d2e
...@@ -783,28 +783,37 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -783,28 +783,37 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
/*2、校验提交的预约时间是否可约*/ /*2、校验提交的预约时间是否可约*/
IdleTimeQuery query = new IdleTimeQuery(); IdleTimeQuery query = new IdleTimeQuery();
//店铺id
query.setDepartmentId(scheduleManage.getDepartmentId()); query.setDepartmentId(scheduleManage.getDepartmentId());
//预约日期
query.setScheduleDate(new SimpleDateFormat("yyyy-MM-dd").format(scheduleManage.getArriveTime())); query.setScheduleDate(new SimpleDateFormat("yyyy-MM-dd").format(scheduleManage.getArriveTime()));
query.setListScheduleServer(scheduleManage.getListScheduleServer() query.setListScheduleServer(scheduleManage.getListScheduleServer()
.stream() .stream()
.map(scheduleServeCommand -> { .map(scheduleServeCommand -> {
ScheduleServeQuery scheduleServe = new ScheduleServeQuery(); ScheduleServeQuery scheduleServe = new ScheduleServeQuery();
//时长
scheduleServe.setLengthTimeForEndTime(scheduleServeCommand.getLengthTime()); scheduleServe.setLengthTimeForEndTime(scheduleServeCommand.getLengthTime());
//款式id
scheduleServe.setProduceId(scheduleServeCommand.getProduceId()); scheduleServe.setProduceId(scheduleServeCommand.getProduceId());
//服务id
scheduleServe.setServeId(scheduleServeCommand.getServeId()); scheduleServe.setServeId(scheduleServeCommand.getServeId());
return scheduleServe; return scheduleServe;
}) })
.collect(Collectors.toList())); .collect(Collectors.toList()));
//是否显示详情
query.setShowNodeDetail(true); query.setShowNodeDetail(true);
//查询时间节点
query.setDateTimeList(Lists.newArrayList(scheduleManage.getArriveTime().getTime())); query.setDateTimeList(Lists.newArrayList(scheduleManage.getArriveTime().getTime()));
//查询方案树
List<IdleTimeDTO> idleTimeDTOList = this.queryIdleTime(query); List<IdleTimeDTO> idleTimeDTOList = this.queryIdleTime(query);
//如果时间节点不可用返回false
IdleTimeDTO idleTimeDTO = idleTimeDTOList.stream().findAny().orElseThrow(NullPointerException::new); IdleTimeDTO idleTimeDTO = idleTimeDTOList.stream().findAny().orElseThrow(NullPointerException::new);
if (!idleTimeDTO.isStatus()) { if (!idleTimeDTO.isStatus()) {
throw new RRException("预约时间不可用"); throw new RRException("预约时间不可用");
} }
/*3、判断美甲师是否是可用的美甲师*/ /*3、如果是指定美甲师、判断美甲师是否仍然可用*/
//构造子树 //构造路径
List<TreeProgram> treeProgramList = new ArrayList<>(); List<TreeProgram> treeProgramList = new ArrayList<>();
TreeProgram treeProgram = new TreeProgram(); TreeProgram treeProgram = new TreeProgram();
List<ScheduleServe> scheduleServeList = scheduleManage.getListScheduleServer() List<ScheduleServe> scheduleServeList = scheduleManage.getListScheduleServer()
...@@ -812,14 +821,17 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -812,14 +821,17 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
.filter(scheduleServe -> scheduleServe.getServeId() == null) .filter(scheduleServe -> scheduleServe.getServeId() == null)
.collect(Collectors.toList()); .collect(Collectors.toList());
List<List<ScheduleServe>> params = new ArrayList<>(); //方案树
scheduleServeList.forEach(scheduleServe -> { TreeProgram targetTree = idleTimeDTO.getTreeProgram();
params.add(CloneUtil.deepClone(scheduleServeList));
});
boolean isPath = treeProgram.isSubTree(targetTree);
if (!isPath) {
throw new RRException("请重新选择美甲师");
}
} }
} }
/** /**
* 通过ScheduleServe构建TreeProgram * 通过ScheduleServe构建TreeProgram
* *
...@@ -869,6 +881,7 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -869,6 +881,7 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
public void submitSchedule(SubmitScheduleCommand cmd) throws ParseException, ExecutionException, InterruptedException { public void submitSchedule(SubmitScheduleCommand cmd) throws ParseException, ExecutionException, InterruptedException {
/*1、校验*/ /*1、校验*/
cmd.getScheduleManageDTO().setScheduledUser(SessionUtils.getCustomerId()); cmd.getScheduleManageDTO().setScheduledUser(SessionUtils.getCustomerId());
//参数补全
ScheduleManage scheduleManage = this.setScheduleServe(cmd.getScheduleManageDTO(), cmd.getDefaultNodeList()); ScheduleManage scheduleManage = this.setScheduleServe(cmd.getScheduleManageDTO(), cmd.getDefaultNodeList());
this.validSubmit(scheduleManage); this.validSubmit(scheduleManage);
...@@ -1139,7 +1152,7 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper, ...@@ -1139,7 +1152,7 @@ public class ScheduleManageServiceImpl extends ServiceImpl<ScheduleManageMapper,
List<ScheduleServeCommand> scheduleServeCommandList = cmd.getScheduleServeDTOList(); List<ScheduleServeCommand> scheduleServeCommandList = cmd.getScheduleServeDTOList();
//根据defaultNodeList的参数设置服务开始时间,服务结束时间,服务美甲师 //如果defaultNodeList不为空 根据defaultNodeList的参数设置服务开始时间,服务结束时间,服务美甲师
if (ListUtil.isNotEmpty(defaultNodeList)) { if (ListUtil.isNotEmpty(defaultNodeList)) {
defaultNodeList.forEach(defaultNode -> { defaultNodeList.forEach(defaultNode -> {
scheduleServeCommandList scheduleServeCommandList
......
package com.gogirl.dto;
import lombok.Data;
import java.util.List;
@Data
public class EnterpriseWxMsg {
private String msgType;
private EnterpriseTextWxMsg text;
@Data
public static class EnterpriseTextWxMsg {
private String content;
private List<String> mentioned_mobile_list;
}
}
...@@ -62,4 +62,6 @@ public class GogirlProperties { ...@@ -62,4 +62,6 @@ public class GogirlProperties {
private String adminBackendUrl; private String adminBackendUrl;
private String adminBackendAchievementsUrl; private String adminBackendAchievementsUrl;
private String enterpriseWechatWebhook;
} }
...@@ -8,6 +8,15 @@ import java.util.Date; ...@@ -8,6 +8,15 @@ import java.util.Date;
*/ */
public interface PushMsgService { public interface PushMsgService {
/**
* 发送预约消息
*
* @param openId
* @param scheduleName
* @param arriveTime
* @param departmentName
* @param address
*/
void sendScheduleMsg(String openId, void sendScheduleMsg(String openId,
String scheduleName, String scheduleName,
Date arriveTime, Date arriveTime,
......
package com.gogirl.infrastructure.service.push;
public interface TechnicianPushService {
/**
* 预约提醒
*
* @param scheduledId
*/
void scheduledMsg(Integer scheduledId);
/**
* 取消预约提醒
*
* @param scheduledId
*/
void cancelScheduledMsg(Integer scheduledId);
/**
* 预约过期
*
* @param scheduledId
*/
void ScheduledOverTimeMsg(Integer scheduledId);
}
package com.gogirl.infrastructure.service.push.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gogirl.domain.order.serve.ScheduleManage;
import com.gogirl.domain.order.serve.ScheduleServe;
import com.gogirl.domain.store.store.StoreTechnician;
import com.gogirl.dto.EnterpriseWxMsg;
import com.gogirl.infrastructure.config.property.GogirlProperties;
import com.gogirl.infrastructure.mapper.order.serve.ScheduleManageMapper;
import com.gogirl.infrastructure.mapper.order.serve.ScheduleServeMapper;
import com.gogirl.infrastructure.mapper.store.store.StoreTechnicianMapper;
import com.gogirl.infrastructure.service.push.TechnicianPushService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
@Service
@Slf4j
public class TechnicianPushServiceImpl implements TechnicianPushService {
@Resource
RestTemplate restTemplate;
@Resource
ScheduleManageMapper scheduleManageMapper;
@Resource
ScheduleServeMapper scheduleServeMapper;
@Resource
StoreTechnicianMapper storeTechnicianMapper;
@Resource
GogirlProperties gogirlProperties;
@Override
public void scheduledMsg(Integer scheduledId) {
ScheduleManage scheduleManage = scheduleManageMapper.selectById(scheduledId);
String name = scheduleManage.getStoreScheduleUsername();
String phone = scheduleManage.getTelephone();
String date = scheduleManage.getArriveTime().toString();
List<ScheduleServe> scheduleServeList = scheduleServeMapper.selectList(new LambdaQueryWrapper<ScheduleServe>().eq(ScheduleServe::getSchId, scheduledId));
String serves = scheduleServeList.stream().map(ScheduleServe::getServeName).collect(Collectors.joining(","));
List<StoreTechnician> storeTechnicianList = storeTechnicianMapper.selectBatchIds(scheduleServeList.stream().map(ScheduleServe::getTechnicianId).collect(Collectors.toList()));
String technicianNames = storeTechnicianList.stream().map(StoreTechnician::getName).collect(Collectors.joining(","));
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_JSON);
EnterpriseWxMsg enterpriseWxMsg = new EnterpriseWxMsg();
enterpriseWxMsg.setMsgType("text");
EnterpriseWxMsg.EnterpriseTextWxMsg textWxMsg = new EnterpriseWxMsg.EnterpriseTextWxMsg();
StringBuilder builder = new StringBuilder();
String content = builder.append("预约提醒\n")
.append("预约客户 :").append(name).append("\n")
.append("预约客户手机 :").append(phone).append("\n")
.append("预约时间:").append(date).append("\n")
.append("预约技师").append(technicianNames).append("\n")
.append("预约项目: ").append(serves).append("\n")
.toString();
textWxMsg.setMentioned_mobile_list(storeTechnicianList.stream().map(StoreTechnician::getMobile).collect(Collectors.toList()));
textWxMsg.setContent(content);
enterpriseWxMsg.setText(textWxMsg);
HttpEntity<EnterpriseWxMsg> httpEntity = new HttpEntity<>(enterpriseWxMsg, httpHeaders);
restTemplate.postForEntity(gogirlProperties.getEnterpriseWechatWebhook(), httpEntity, String.class);
}
@Override
public void cancelScheduledMsg(Integer scheduledId) {
}
@Override
public void ScheduledOverTimeMsg(Integer scheduledId) {
}
}
...@@ -97,4 +97,39 @@ public class TreeProgram implements Serializable { ...@@ -97,4 +97,39 @@ public class TreeProgram implements Serializable {
return this.getStoreTechnicianDTO().getTechnicianId().equals(treeProgram.getStoreTechnicianDTO().getTechnicianId()) return this.getStoreTechnicianDTO().getTechnicianId().equals(treeProgram.getStoreTechnicianDTO().getTechnicianId())
&& this.getScheduleServeQuery().getServeId().equals(treeProgram.getScheduleServeQuery().getServeId()); && this.getScheduleServeQuery().getServeId().equals(treeProgram.getScheduleServeQuery().getServeId());
} }
public boolean isSubTree(TreeProgram treeProgram) {
if (treeProgram == null) {
return true;
}
boolean bool = this.isSameNode(treeProgram);
if (!bool) {
return false;
} else {
TreeProgram subPath = this.getChildList().stream().findAny().orElseThrow(NullPointerException::new);
List<TreeProgram> targetTreeList = treeProgram.getChildList();
TreeProgram targetTree = targetTreeList.stream().filter(val -> val.isSameNode(subPath)).findAny().orElse(null);
if (targetTree == null) {
return false;
}
return subPath.isSubTree(targetTree);
}
}
public boolean isSameNode(TreeProgram treeProgram) {
/**/
boolean sameServe = this.getScheduleServeQuery().getLengthTimeForEndTime()
.equals(treeProgram.getScheduleServeQuery().getLengthTimeForEndTime())
&& this.getScheduleServeQuery().getServeId().equals(treeProgram.getScheduleServeQuery().getServeId())
&& this.getScheduleServeQuery().getProduceId().equals(treeProgram.getScheduleServeQuery().getProduceId())
&& this.getScheduleServeQuery().getPeriod().equals(treeProgram.getScheduleServeQuery().getPeriod());
/**/
boolean sameTech = this.getStoreTechnicianDTO().getTechnicianId().equals(treeProgram.getStoreTechnicianDTO().getTechnicianId());
/**/
return sameServe && sameTech;
}
} }
...@@ -94,9 +94,11 @@ gogirl: ...@@ -94,9 +94,11 @@ gogirl:
#评论延迟时间 #评论延迟时间
test-paper-time: 1440 test-paper-time: 1440
#后台后端接口访问地址 #后台后端接口访问地址
admin-backend-url: http://test.admin.begogirls.com:7712/api/ReportTable/GetTechnicianPage admin-backend-url: http://test.admin.begogirls.com:7712/api/ReportTable/GetTechnicianPage、
#
admin-backend-achievements-url: http://test.admin.begogirls.com:7712/api/salary/AchievementsPersonaResultPageApi admin-backend-achievements-url: http://test.admin.begogirls.com:7712/api/salary/AchievementsPersonaResultPageApi
#
enterprise-wechat-webhook: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693axxx6-7aoc-4bc4-97a0-0ec2sifa5aaa"
wx: wx:
pay: pay:
appId: wx058b46db3cd0e979 appId: wx058b46db3cd0e979
......
...@@ -93,10 +93,11 @@ gogirl: ...@@ -93,10 +93,11 @@ gogirl:
#评论延迟时间 #评论延迟时间
test-paper-time: 1 test-paper-time: 1
#后台后端接口访问地址 #后台后端接口访问地址
admin-backend-url: http://test.admin.begogirls.com:7712/api/ReportTable/GetTechnicianPage admin-backend-url: "http://test.admin.begogirls.com:7712/api/ReportTable/GetTechnicianPage"
admin-backend-achievements-url: http://test.admin.begogirls.com:7712/api/salary/AchievementsPersonaResultPageApi admin-backend-achievements-url: "http://test.admin.begogirls.com:7712/api/salary/AchievementsPersonaResultPageApi"
enterprise-wechat-webhook: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693axxx6-7aoc-4bc4-97a0-0ec2sifa5aaa"
wx: wx:
pay: pay:
appId: wx058b46db3cd0e979 appId: wx058b46db3cd0e979
......
...@@ -94,7 +94,7 @@ gogirl: ...@@ -94,7 +94,7 @@ gogirl:
#后台后端接口访问地址 #后台后端接口访问地址
admin-backend-url: http://admin.begogirls.com:7712/api/ReportTable/GetTechnicianPageApi admin-backend-url: http://admin.begogirls.com:7712/api/ReportTable/GetTechnicianPageApi
admin-backend-achievements-url: http://admin.begogirls.com:7712/api/salary/AchievementsPersonaResultPageApi admin-backend-achievements-url: http://admin.begogirls.com:7712/api/salary/AchievementsPersonaResultPageApi
enterprise-wechat-webhook: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693axxx6-7aoc-4bc4-97a0-0ec2sifa5aaa"
wx: wx:
pay: pay:
appId: wx058b46db3cd0e979 appId: wx058b46db3cd0e979
......
...@@ -95,7 +95,7 @@ gogirl: ...@@ -95,7 +95,7 @@ gogirl:
#后台后端接口访问地址 #后台后端接口访问地址
admin-backend-url: http://test.admin.begogirls.com:7712/api/ReportTable/GetTechnicianPage admin-backend-url: http://test.admin.begogirls.com:7712/api/ReportTable/GetTechnicianPage
admin-backend-achievements-url: http://test.admin.begogirls.com:7712/api/salary/AchievementsPersonaResultPageApi admin-backend-achievements-url: http://test.admin.begogirls.com:7712/api/salary/AchievementsPersonaResultPageApi
enterprise-wechat-webhook: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693axxx6-7aoc-4bc4-97a0-0ec2sifa5aaa"
wx: wx:
pay: pay:
appId: wx058b46db3cd0e979 appId: wx058b46db3cd0e979
......
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