# wxpad **Repository Path**: chanchaw/wxpad ## Basic Information - **Project Name**: wxpad - **Description**: 新东方智能化微信服务号后台程序 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2019-09-17 - **Last Updated**: 2026-02-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: 染厂, Java, wechat-mp ## README ## 实现功能 - 发送车间刷卡进度提醒模板消息 - 发送成品发货提醒模板消息,带有详情页 ## 所有配置项 1. `user_weixin.status = 1` 表示微信用户关注了服务号,该状态下才会推送给其消息 2. `user_weixin.receive = 1` 表示接受消息,等于1表示接受服务号推送的消息 3. 注意上面两个配置对白坯入库、成品发货、工序刷卡的模板消息推送有效 4. `client.push_bp` 规定了当前用户在云端产生数据后是否会推送白坯入库的模板消息 如果设置为0表示即使云端有白坯入库的数据并且上面的1、2都设置1,也不会推送白坯入库消息 5. `client.push_cp` 类似上面的4,规定了当前用户是否推送成品发货的模板消息 6. `client.push_process` 类似上面的4,规定了当前用户是否推送工序刷卡的模板消息 7. 天然气报警设置 `user_mill.alarm_gas = 1` 对应的工厂会被检测是否需要报警,该行上对应的微信号(可能有多个)都 会被通知警告。 8. 心跳检测的配置项 `heart_beat_config` 中设置厂名为 `true` 表示不检测该客户是否在线 ## API * 在2019年11月28日08:19:43更换为后端项目中整合了 `swagger`,那么及时准确的API应该访问 ` https://www.xdfznh.club/wxpadbe/swagger-ui.html ` * 客户关注用二维码:`http://www.xdfznh.club/wx/tqr/朗迪印染,1033,杜战春` 访问后返回二维码地址,在浏览器中输入该地址可以看到二维码,或者将地址赋值给标签 `img` 的属性 `src` 即可。 * 微信用户相关: * 获取所有微信用户的列表:`http://www.xdfznh.club/user/g` * 插入一条记录:`http://www.xdfznh.club/user/i` ,要求传入 `body` 参数 * 删除一行:`http://www.xdfznh.club/user/d`,路径参数传入微信 `openId` * 检测是否开发人员:`http://www.xdfznh.club/user/isDev`,路径参数传入微信 `openId` * * 成品发货单详情:`https://www.xdfznh.club:7443/sod/go/朗迪印染/F191029016` * 前端项目成品发货详情页地址:`https://www.xdfznh.club/wxpadfe/soDtl?mill=朗迪印染&billCode=F191029016` ## 更新日志 - 2019年9月17日16:24:14 创建本项目 - 2019年9月28日12:58:57 在项目内部署了``SSL`` 证书,之后前端请求的格式是:`https://www.xdfznh.club:7443/push/getPP/Y29091822`,以前不用带端口号,现在要带了,并且之前可以不用显式的给出 ``http`` 协议,现在要显示的给出 ``https`` ### 2024年9月2日 10:30:52 推送模板消息记录结果日志 新达天字业务员反应白坯入库、工序刷卡都收不到消息,之前一直没有制作推送模板消息后,微信用户是否真正收到消息。本次记录下微信后台反馈给自己的服务号后台程序的推送成功结果,更新内容如下: 1. 新增模型对象:PostJson 2. 新增系统配置:`CustomizeConfigure.java` 中新增 `restTemplate` 相关的两个方法 3. 配置文件:新增配置项目 `globalv.server` 和 `globalv.enviroment` 4. 动态定时器:`Schedule.java` 中设置如果非生产环境则不动态创建定时器 5. 推送模板消息:类 `ProcessProgressTM.java` 中记录推送模板消息后得到的响应结果。制作工具类 `RestTemplateUtils` 6. 新增方法 `DevController # pushProcess` 可手动推送刷卡进度给指定的微信用户 ## 数据库结构说明 - 车间刷卡客户端中上传的数据保存在表 ``client_pushlist`` 中,通过字段 ``mill`` 标识来自于哪个工厂,所有工厂的上传数据都保存在该表中 - 表 ``client`` 中保存了每个工厂下辖的客户。``client_nickname`` 是该客户在工厂ERP中的往来单位编号,``client_name`` 为往来单位名称,自增字段 ``id`` 用于表 ``user_convent`` 映射。 - ``client.id = user_convent.client_id``,``user_convent.user_weixin_id = user_weixin.id`` - 由上面的关系从待推送列表 ``client_pushlist`` 关联到微信用户表 ``user_weixin`` - 综上,刷卡进度提醒涉及到表有:``client_pushlist``,``client``,``client_convent``,``user_weixin`` - 推送后将字段 ``client_pushlist.status`` 设置为1,即表示已经推送过。 - client.id = user_convent.client_id client.client_nickname = ERP中客户编号 client.client_name = ERP中客户名称 - user_mill,记录工厂下辖的微信号openid,可以多对多 - user_weixin.id = user_convent.user_weixin_id - ## 开发者工具 - 设置所有微信用户接受所有刷卡推送 - 先清空所有映射关系 ```sql DELETE FROM user_convent; INSERT INTO user_convent(client_id,user_weixin_id) SELECT b.id,a.id FROM user_weixin a CROSS JOIN client b ``` - 待推送列表中存在的客户但是在客户表 ``client`` 中不存在 ```sql SELECT DISTINCT client_id,client FROM ( SELECT b.*,a.client_id,a.client FROM client_pushlist a LEFT JOIN client b ON a.mill = b.mill AND a.client_id = b.client_nickname ) c WHERE c.id IS NULL AND c.client_id IS NOT NULL ``` ## 故障排查 ### 未能在云端查询到该客户 初次发现是在 “染厂云” 服务器中部署 “静之研软件” 配套的报表打印服务时给 CentOS 设置中文环境时由于单词拼错导致中文都不识别了,客户微信扫描二维码关注时微信后台接受到的厂名中文乱码导致在后台查询不到厂名、客户名的指定数据。后来修正 CentOS7 的中文环境后解决了该问题。出现该现象时候可以查看日志表 ```sql select * from log_runtime where module='新用户注册' and remark='用户扫描的场景值' ORDER BY iid DESC LIMIT 100; ``` 能看到中文显示乱码了。 ### 推送流程进度是否成功 2024年9月2日 14:55:30 新增表 `call_template_msg_res` 保存定时任务推送流程进度给微信用户后微信服务器响应来的结果,其中 `errcode` 为0表示推送成功,大于1则表示错误代码,要查看官方对于错误码的定义。本表字段 `pk` = `client_pushlist.id` 表示本次推送的刷卡工序的主键。字段 `msgid` 表示微信服务器系统内的事件ID,可到表 `log_runtime` 中查找 `module=定时推送工序` 同时 `MsgID` 为该值的微信用户是否成功接收的响应。