jinpengyong
2023-11-06 8ed49f54d98e817913abb8a9f4751e3bc3b0b40a
chore:补充提交
1 files added
7 files modified
193 ■■■■ changed files
screen-api/src/main/java/com/moral/api/controller/AppUserController.java 18 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/pojo/query/app/AppAllocationPushUserCond.java 49 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/UserService.java 4 ●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/impl/HistoryFiveMinutelyServiceImpl.java 4 ●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/service/impl/UserServiceImpl.java 75 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/utils/HttpClientUtil.java 14 ●●●●● patch | view | raw | blame | history
screen-api/src/main/java/com/moral/api/utils/WechatUtils.java 27 ●●●●● patch | view | raw | blame | history
screen-api/src/main/resources/mapper/DeviceMapper.xml 2 ●●● patch | view | raw | blame | history
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