package com.hssx.cloudmodel.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.hssx.cloudmodel.constant.Constant; import com.hssx.cloudmodel.entity.*; import com.hssx.cloudmodel.entity.vo.MouldEquipmentVO; import com.hssx.cloudmodel.entity.vo.MouldVO; import com.hssx.cloudmodel.entity.vo.ProjectVO; import com.hssx.cloudmodel.entity.vo.UserVO; import com.hssx.cloudmodel.mapper.*; import com.hssx.cloudmodel.service.MouldService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.hssx.cloudmodel.util.HttpKit; import com.hssx.cloudmodel.util.HttpRespMsg; import com.hssx.cloudmodel.util.ListUtil; import com.hssx.cloudmodel.util.WechatTemplateMessage; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringEscapeUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.IOException; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.*; /** *

* 服务实现类 *

* * @author 吴涛涛 * @since 2019-07-30 */ @Service @Slf4j public class MouldServiceImpl extends ServiceImpl implements MouldService { @Resource MouldMapper mouldMapper; @Resource UserMapper userMapper; @Resource PowerMapper powerMapper; @Resource ProjectMapper projectMapper; @Resource ProjectApproveMapper projectApproveMapper; @Resource CustomCompanyMapper customCompanyMapper; @Resource CompanyMapper companyMapper; @Resource ProjectUserMapper projectUserMapper; @Resource NewsNoticeMapper newsNoticeMapper; @Resource NewsNoticeUserMapper newsNoticeUserMapper; @Override public HttpRespMsg addAndUpdateMould(Mould mould, User user) { HttpRespMsg msg = new HttpRespMsg(); if (mould.getId() != null) { //修改 Mould m = mouldMapper.selectOne(new QueryWrapper().eq("model_no", mould.getModelNo())); if ((m != null && m.getId() == mould.getId()) || m == null) { Company company = companyMapper.selectById(mould.getProduceCompanyId()); mould.setArea(company.getCompanyAddress()); mouldMapper.updateById(mould); } else { msg.setError("当前模具编号已存在,请重新输入其他模具编号"); } } else { //查询当前模具编号的模具是否存在 Integer count = mouldMapper.selectCount(new QueryWrapper().eq("model_no", mould.getModelNo())); if (count > 0) { msg.setError("当前模具编号已存在,请重新输入其他模具编号"); } else { mould.setCreatorId(user.getId()); mould.setCompanyId(user.getCompanyId()); mouldMapper.insert(mould); } } return msg; } @Override public HttpRespMsg getMoildDetail(MouldVO mouldVO) { HttpRespMsg msg = new HttpRespMsg(); Map map = new HashMap<>(); MouldVO mould = mouldMapper.getDetailById(mouldVO); map.put("vo", mould); ProjectVO vo = projectMapper.getProjectById(mould.getProjectId()); User currentUser = userMapper.selectOne(new QueryWrapper().eq("head_imgurl", mouldVO.getToken())); if (null == mould.getProjectId()) { map.put("update", 0); map.put("download", 0); map.put("view", 0); map.put("approve", 0); } else { List list = customCompanyMapper.selectList(new QueryWrapper().eq("project_id", mould.getProjectId())); map.put("customCompany", list); if (Constant.SYS_PARENT_ID == currentUser.getParentId()) { //当前人超级管理员 ,对项目只可以浏览 map.put("update", 0); map.put("download", 0); map.put("view", 1); map.put("approve", 0); } else if (Constant.SYS_ID == currentUser.getParentId()) { //当前为系统管理员 map.put("update", 1); map.put("download", 1); map.put("view", 1); map.put("approve", 0); } else if (vo.getManagerId() == currentUser.getId()) { //当前人是该项目的项目经理 Integer approve = 0; if (projectApproveMapper.selectCount(new QueryWrapper().eq("approver_id", currentUser.getId())) > 0) { //查看当前项目经理是否为审批人 approve = 1; } map.put("update", 1); map.put("download", 1); map.put("view", 1); map.put("approve", approve); } else { //该项目的参与人 Integer update = 0; Integer download = 0; Integer view = 0; Integer approve = 0; List powers = powerMapper.selectList(new QueryWrapper().eq("project_id", mould.getProjectId()).eq("user_id", currentUser.getId())); if (powers.size() > 0) { for (Power power : powers) { if (power.getPowerType() == 0) { update = 1; } else if (power.getPowerType() == 1) { download = 1; } else if (power.getPowerType() == 2) { view = 1; } else { approve = 1; } } } map.put("update", update); map.put("download", download); map.put("view", view); map.put("approve", approve); } } msg.data = map; return msg; } @Override public HttpRespMsg maintenanceReminder() throws Exception { HttpRespMsg msg = new HttpRespMsg(); //查询所有被分配到项目的模具 List moulds = mouldMapper.selectList(new QueryWrapper().isNotNull("project_id")); for (Mould mould : moulds) { List counts = ListUtil.convertIntegerIdsArrayToList(mould.getMaintainCount()); Collections.sort(counts); Integer noticeCount = 0; if (counts.size() > 0) { for (Integer count : counts) { if (count <= mould.getRunTimes()) { noticeCount = count; } } } if (noticeCount != 0) { //需要保养 Mould m = new Mould(); m.setId(mould.getId()); m.setIsMaintain(1); mouldMapper.updateById(m); // //提示保养,向模具资产方人员公众号推送消息 // User user = userMapper.selectOne(new QueryWrapper().eq("parent_id", Constant.SYS_ID).eq("company_id", mould.getCompanyId())); // MouldEquipmentVO mouldEquipmentVO = new MouldEquipmentVO(); // mouldEquipmentVO.setPlanType(Constant.PLAN_TYPE); // mouldEquipmentVO.setArea(mould.getArea()); // mouldEquipmentVO.setName(mould.getModelName()); // msg = sendMaintainTemplateMessage(Constant.MAINTAIN_NOTICE_TEMPLATE_ID, user.getOpenid(), Constant.WECHAT_APPID, Constant.WECHAT_SECRET, mouldEquipmentVO); //添加通知消息 Project project = projectMapper.selectById(mould.getProjectId()); //查询到参与该项目的人 List userIds = new ArrayList<>(); userIds.add(project.getCreatorId()); userIds.add(project.getManagerId()); List projectUsers = projectUserMapper.selectList(new QueryWrapper().eq("project_id", project.getId())); for (ProjectUser projectUser : projectUsers) { userIds.add(projectUser.getUserId()); } List projectApproves = projectApproveMapper.selectList(new QueryWrapper().eq("project_id", project.getId())); for (ProjectApprove projectApprove : projectApproves) { userIds.add(projectApprove.getApproverId()); } List users = userMapper.selectList(new QueryWrapper().in("id", userIds)); //查询到之前模具保养的消息 NewsNotice oldNews = newsNoticeMapper.selectOne(new QueryWrapper().eq("ref_id", mould.getId()).eq("notice_type", 1)); NewsNotice newsNotice = new NewsNotice(); if(oldNews != null){ NewsNotice newNews = new NewsNotice(); newNews.setId(oldNews.getId()); oldNews.setIndate(LocalDateTime.now()); newsNoticeMapper.updateById(oldNews); newsNoticeUserMapper.updateNewsNoticeUserByNewsNoticeId(oldNews.getId()); // for (User u : users) { // //添加通知的消息 // NewsNoticeUser newsNoticeUser = new NewsNoticeUser(); // newsNoticeUser.setNewsId(oldNews.getId()); // newsNoticeUser.setUserId(u.getId()); // newsNoticeUser.setIsRead(0); // newsNoticeUserMapper.updateById(newsNoticeUser); // } }else{ newsNotice.setNoticeType(Constant.MAINTAIN_TYPE); newsNotice.setProjectId(project.getId()); newsNotice.setProjectName(project.getProjectName()); newsNotice.setRefId(mould.getId()); newsNotice.setContent(Constant.MAIN_TAIN_NOTICE); newsNoticeMapper.insert(newsNotice); for (User u : users) { //添加通知的消息 NewsNoticeUser newsNoticeUser = new NewsNoticeUser(); newsNoticeUser.setNewsId(newsNotice.getId()); newsNoticeUser.setUserId(u.getId()); newsNoticeUserMapper.insert(newsNoticeUser); } } } } return msg; } @Override public HttpRespMsg delMoule(Mould mould) { HttpRespMsg msg = new HttpRespMsg(); Mould newMould = mouldMapper.selectById(mould.getId()); if (null != mould.getProjectId()) { msg.setError("该模具已被应用到项目,不提供删除操作"); } else { mouldMapper.deleteById(newMould.getId()); } return msg; } @Override public HttpRespMsg isMaintain(Mould mould) { HttpRespMsg msg = new HttpRespMsg(); if (mould.getId() != null) { mouldMapper.updateById(mould); } else { msg.setError("模具id不存在"); } return msg; } @Override public HttpRespMsg maintainMouldList(UserVO userVO) { return null; } //告警模板推送通用接口 /** * templateId 模板id,touserOpenId 被推送者的openId,appId微信公众号的appId * firstData 推送标题 */ public HttpRespMsg sendEmergencyTemplateMessage(String templateId, String touserOpenId, String appId, String secret, MouldEquipmentVO mouldEquipmentVO) throws Exception { HttpRespMsg msg = new HttpRespMsg(); String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + secret; String resp; String resp1; resp1 = HttpKit.get(url, true); resp1 = StringEscapeUtils.unescapeJava(resp1); JSONObject json = (JSONObject) JSON.parse(resp1); // 获取值赋值给全局变量 if (!json.containsKey("errcode")) { String newAccessToken = json.getString("access_token"); String url1 = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + newAccessToken; WechatTemplateMessage wechat = new WechatTemplateMessage(); wechat.setTemplate_id(templateId); wechat.setTouser(touserOpenId); wechat.setAppid(appId); Map> data = new HashMap<>(); Map first = new HashMap<>(); Map value1 = new HashMap<>(); Map value2 = new HashMap<>(); Map value3 = new HashMap<>(); Map value4 = new HashMap<>(); Map remark = new HashMap<>(); // 推送信息主体 first.put("value", "告警通知");//firstData推送标题 data.put("first", first); value1.put("value", mouldEquipmentVO.getEquipmentName()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); data.put("keyword1", value1); value2.put("value", mouldEquipmentVO.getEmergencyType()); data.put("keyword2", value2); value3.put("value", sdf.format(new Date())); data.put("keyword3", value3); value4.put("value", mouldEquipmentVO.getEmergencyContent()); data.put("keyword4", value4); remark.put("value", "请尽快检查该设备"); data.put("remark", remark); wechat.setData(data); String jsonString = JSONObject.toJSONString(wechat); // System.out.println("jsonString"+jsonString); resp = HttpKit.post(url1, jsonString); // System.out.println("resp0"+resp); resp = StringEscapeUtils.unescapeJava(resp); // System.out.println("resp"+resp); json = (JSONObject) JSON.parse(resp); } return msg; } //保养 /** * templateId 模板id,touserOpenId 被推送者的openId,appId微信公众号的appId * firstData 推送标题 */ public HttpRespMsg sendMaintainTemplateMessage(String templateId, String touserOpenId, String appId, String secret, MouldEquipmentVO mouldEquipmentVO) throws Exception { HttpRespMsg msg = new HttpRespMsg(); String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + secret; String resp; String resp1; resp1 = HttpKit.get(url, true); resp1 = StringEscapeUtils.unescapeJava(resp1); JSONObject json = (JSONObject) JSON.parse(resp1); // 获取值赋值给全局变量 if (!json.containsKey("errcode")) { String newAccessToken = json.getString("access_token"); String url1 = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + newAccessToken; WechatTemplateMessage wechat = new WechatTemplateMessage(); wechat.setTemplate_id(templateId); wechat.setTouser(touserOpenId); wechat.setAppid(appId); Map> data = new HashMap<>(); Map first = new HashMap<>(); Map value1 = new HashMap<>(); Map value2 = new HashMap<>(); Map value3 = new HashMap<>(); Map value4 = new HashMap<>(); Map remark = new HashMap<>(); // 推送信息主体 first.put("value", "你好,你有新的保养通知");//firstData推送标题 data.put("first", first); value1.put("value", mouldEquipmentVO.getEquipmentName()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd"); data.put("keyword1", value1); value2.put("value", mouldEquipmentVO.getArea()); data.put("keyword2", value2); value3.put("value", sdf.format(new Date())); data.put("keyword3", value3); value4.put("value", mouldEquipmentVO.getPlanType()); data.put("keyword4", value4); remark.put("value", "模具初始模次不满足运行了"); data.put("remark", remark); wechat.setData(data); String jsonString = JSONObject.toJSONString(wechat); // System.out.println("jsonString"+jsonString); resp = HttpKit.post(url1, jsonString); // System.out.println("resp0"+resp); resp = StringEscapeUtils.unescapeJava(resp); // System.out.println("resp"+resp); json = (JSONObject) JSON.parse(resp); } return msg; } }