screen-api/src/main/java/com/moral/api/controller/AppUserController.java
@@ -18,10 +18,14 @@ import java.util.HashMap; import java.util.Map; import javax.validation.Valid; import com.alibaba.fastjson.JSON; import com.moral.api.pojo.query.app.AppAllocationPushUserCond; import com.moral.api.service.UserService; import com.moral.api.utils.HttpClientUtil; import com.moral.api.utils.WechatUtils; import com.moral.api.vo.WxMssVo; import com.moral.constant.ResponseCodeEnum; import com.moral.constant.ResultMessage; @@ -66,11 +70,12 @@ return ResultMessage.ok(); } @GetMapping("pushOneUser") @PostMapping("pushOneUser") @ApiOperation(value = "小程序推送消息") public ResultMessage pushOneUser(){ String body = push("oOCWi6-_hnzSvrMT8HX5D7Dz7tEA"); return ResultMessage.ok(body); public ResultMessage pushOneUser(@Valid @RequestBody AppAllocationPushUserCond appAllocationPushUserCond){ userService.pushOneUser(appAllocationPushUserCond); // String body = push("oOCWi6-_hnzSvrMT8HX5D7Dz7tEA"); return ResultMessage.ok(); } @@ -78,7 +83,7 @@ RestTemplate restTemplate = new RestTemplate(); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) //小程序订阅 String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + HttpClientUtil.getAccessToken(); String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + WechatUtils.getAccessToken(); // String url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=" + HttpClientUtil.getAccessToken(); // String url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token=" + HttpClientUtil.getAccessToken(); // String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + HttpClientUtil.getAccessToken(); @@ -108,7 +113,6 @@ m.put("thing2", map3); m.put("date4", map4); wxMssVo.setData(JSON.toJSON(m)); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMssVo, String.class); screen-api/src/main/java/com/moral/api/pojo/query/app/AppAllocationPushUserCond.java
New file @@ -0,0 +1,49 @@ package com.moral.api.pojo.query.app; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.util.Date; import javax.validation.constraints.NotNull; @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @ApiModel(value="AppAllocationPushUserCond - 推送消息对象", description="AppAllocationPushUserCond - 推送消息对象") public class AppAllocationPushUserCond { @ApiModelProperty(value = "上报时间") @NotNull(message = "上报时间不能为空!") private Date escalationTime; @ApiModelProperty(value = "责任单位id") @NotNull(message = "责任单位不能为空!") private Integer unitId; @ApiModelProperty(value = "上报单位id") @NotNull(message = "上报单位不能为空!") private Integer escalationUnitId; @ApiModelProperty(value = "状态") @NotNull(message = "状态不能为空!") private Integer state; /** *交办单号 */ @ApiModelProperty(value = "交办单号") @NotNull(message = "单号不能为空!") private String allocationNum; } screen-api/src/main/java/com/moral/api/service/UserService.java
@@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.moral.api.pojo.bo.UserBO; import com.moral.api.pojo.query.AppUserCond; import com.moral.api.pojo.query.app.AppAllocationPushUserCond; /** * <p> @@ -53,4 +53,6 @@ boolean updateUserId(Integer userId); void pushOneUser(AppAllocationPushUserCond appAllocationPushUserCond); } screen-api/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java
@@ -39,6 +39,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import java.text.DecimalFormat; import java.util.*; import java.util.stream.Collectors; @@ -292,6 +293,7 @@ } } String str = new DecimalFormat("#.######").format(Double.parseDouble(result.get("a21005").toString())); QueryFiveDataByMacVO queryFiveDataByMacVO = new QueryFiveDataByMacVO(); queryFiveDataByMacVO.setName(device.getName()); queryFiveDataByMacVO.setDataTime(datas.get("dataTime").toString()); @@ -299,7 +301,7 @@ queryFiveDataByMacVO.setA34002(result.get("a34002").toString()); queryFiveDataByMacVO.setA21026(result.get("a21026").toString()); queryFiveDataByMacVO.setA21004(result.get("a21004").toString()); queryFiveDataByMacVO.setA21005(result.get("a21005").toString()); queryFiveDataByMacVO.setA21005(str); queryFiveDataByMacVO.setA05024(result.get("a05024").toString()); queryFiveDataByMacVO.setA01008(result.get("a01008").toString()); queryFiveDataByMacVO.setA01007(result.get("a01007").toString()); screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java
@@ -11,24 +11,33 @@ import com.moral.api.entity.*; import com.moral.api.mapper.*; import com.moral.api.pojo.bo.UserBO; import com.moral.api.pojo.enums.AllocationApproveEnum; import com.moral.api.pojo.enums.FileTableEnum; import com.moral.api.pojo.enums.StateEnum; import com.moral.api.pojo.enums.SysDictTypeEnum; import com.moral.api.pojo.query.app.AppAllocationPushUserCond; import com.moral.api.pojo.vo.file.FileVo; import com.moral.api.service.FileTableService; import com.moral.api.service.ResponsibilityUnitService; import com.moral.api.service.UserService; import com.moral.api.utils.OperationLogUtils; import com.moral.api.utils.WechatUtils; import com.moral.api.vo.WxMssVo; import com.moral.constant.Constants; import com.moral.constant.ResponseCodeEnum; import com.moral.util.*; import com.sun.org.apache.regexp.internal.RE; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import org.springframework.web.client.RestTemplate; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -226,6 +235,72 @@ sysLog(userId+"退出了小程序",user); return true; } @Autowired private ResponsibilityUnitService responsibilityUnitService; /** * 小程序推送 * @param appAllocationPushUserCond */ @Override @Async public void pushOneUser(AppAllocationPushUserCond appAllocationPushUserCond) { ResponsibilityUnit responsibilityUnit = responsibilityUnitMapper.selectById(appAllocationPushUserCond.getUnitId()); Integer areaCode = responsibilityUnit.getAreaCode(); List<ResponsibilityUnit> responsibilityUnits = responsibilityUnitService.selectAreaUnit(areaCode.toString().length()>6?responsibilityUnit.getParentCode():responsibilityUnit.getAreaCode()); //获取unitid LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(User::getIsDelete,Constants.NOT_DELETE); Integer state = appAllocationPushUserCond.getState(); if (state==20){ wrapper.eq(User::getUnitId,appAllocationPushUserCond.getUnitId()); }else { wrapper.eq(User::getUnitId,ObjectUtils.isEmpty(responsibilityUnits)?0:responsibilityUnits.get(0).getUnitId()); } List<User> users = userMapper.selectList(wrapper); if (ObjectUtils.isEmpty(users)){ return; } String dateString = DateUtils.dateToDateString(appAllocationPushUserCond.getEscalationTime(),"MM月dd日"); //这里简单起见我们每次都获取最新的access_token(时间开发中,应该在access_token快过期时再重新获取) //小程序订阅 String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + WechatUtils.getAccessToken(); //发送消息 for (User user : users) { RestTemplate restTemplate = new RestTemplate(); //拼接推送的模版 WxMssVo wxMssVo = new WxMssVo(); wxMssVo.setTouser(user.getOpenId());//用户的openid(要发送给那个用户,通常这里应该动态传进来的) wxMssVo.setTemplate_id("YNqUZ1MgMvwY3G-NENVbcmIBR5dUotSdnwcz96CWrho");//订阅消息模板id wxMssVo.setLang("zh_CN"); wxMssVo.setMiniprogramState("formal"); // wxMssVo.setPage("pages/index/index"); Map<String, Object> m = new HashMap<>(); HashMap<String, Object> map1 = new HashMap<>(); HashMap<String, Object> map2 = new HashMap<>(); HashMap<String, Object> map3 = new HashMap<>(); HashMap<String, Object> map4 = new HashMap<>(); map1.put("value",responsibilityUnit.getUnitName()+dateString+"的交办单"); map2.put("value",appAllocationPushUserCond.getAllocationNum()); map3.put("value",state==30? AllocationApproveEnum.IN_APPROVAL.name:AllocationApproveEnum.UNDER_RECTIFICATION.name); map4.put("value",DateUtils.dateToDateString(new Date(),"yyyy年MM月dd日")); m.put("thing18", map1); m.put("character_string1", map2); m.put("thing2", map3); m.put("date4", map4); wxMssVo.setData(JSON.toJSON(m)); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxMssVo, String.class); String body = responseEntity.getBody(); log.info("信息:"+body+"账号:"+user.getUserName()); } } private void sysLog(String cont,User user){ //日志 HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); screen-api/src/main/java/com/moral/api/utils/HttpClientUtil.java
@@ -140,18 +140,4 @@ return resultString; } public static String getAccessToken() { RestTemplate restTemplate = new RestTemplate(); Map<String, String> params = new HashMap<>(); params.put("APPID", "wxf95fb77e0b1f8c09"); // params.put("APPSECRET", "acf3be9facf7f26bb8286c9b4eff93d0"); // ResponseEntity<String> responseEntity = restTemplate.getForEntity( "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={APPID}&secret={APPSECRET}", String.class, params); String body = responseEntity.getBody(); JSONObject object = JSON.parseObject(body); String Access_Token = object.getString("access_token"); String expires_in = object.getString("expires_in"); System.out.println("有效时长expires_in:" + expires_in); return Access_Token; } } screen-api/src/main/java/com/moral/api/utils/WechatUtils.java
@@ -3,16 +3,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; import java.util.HashMap; @@ -20,7 +13,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.moral.api.service.UserLogService; public class WechatUtils { @@ -46,4 +39,18 @@ return jsonObject; } public static String getAccessToken() { RestTemplate restTemplate = new RestTemplate(); Map<String, String> params = new HashMap<>(); params.put("APPID", APPID); // params.put("APPSECRET", SECRET); // ResponseEntity<String> responseEntity = restTemplate.getForEntity( "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={APPID}&secret={APPSECRET}", String.class, params); String body = responseEntity.getBody(); JSONObject object = JSON.parseObject(body); String Access_Token = object.getString("access_token"); // String expires_in = object.getString("expires_in"); return Access_Token; } } screen-api/src/main/resources/mapper/DeviceMapper.xml
@@ -199,7 +199,7 @@ <if test="organizationId !=null"> AND organization_id = #{organizationId} </if> and mac LIKE "%"#{mac}"%" AND is_delete = 0 and mac LIKE "%"#{mac}"%" or `name` like "%"#{mac}"%" AND is_delete = 0 union SELECT sd.id,sd.`name`,sd.mac,sd.special_type FROM special_device as sd WHERE 1=1