白坯织造云项目
清理垃圾
数据库日志
# 删除非花重锦账号,并且是7天前的登录请求数据
# 注意一定不能删除包含花重锦的数据,此类数据是花重锦PDA用于登录的
# 之后可能不限于 花重锦PDA01 ,如果有多个PDA则会有多个类似的数据
delete from qr_log where openid != '花重锦PDA01' and datediff(now(),create_time)>7;
# 和微信相关的 http 请求记录日志表,可以随意删除
TRUNCATE TABLE reqs_log;
报表服务
线上项目
开发环境
在 xdf250 服务器的路径 D:\projs\whiteaccount 下部署了完全同云端项目,访问地址 http://localhost/whiteaccount,使用的是本地 xdf250 的数据库,在目录 report 下是 FineReport 后台服务和打印模板,访问地址 http://192.168.0.250/whiteaccountr/ReportServer。有测试需求可编译后台服务 jar 更新到 D:\projs\whiteaccount\backend 下,打印模板放在 D:\projs\whiteaccount\report\WebReport\WEB-INF\reportlets 下对应账套目录下
微信
后台项目
源码仓库,其中 wxbe 分支是上线用分支,wxbedev 是开发用分支(2024年2月29日查看提交记录分支wxbe已经落后分支wxbedev很多)。微信用户数据库是 织造云数据.wechat。项目路径是 /data/extdisk/wxbe,启动命令 systemctl start wxbe
停机
由于制作最初没有设计停机功能,2025年2月21日 停机花重锦是修改表 user_mill 中 open_id ,使其扫描登录二维码后找不到合法的 openId 进而无法登录
服务器
高松的账号申请的腾讯云服务器,IP地址是:182.xxx.xxx.227,服务器相关数据查看微信号关联的 wps 中 “账号密码箱” 的标签页 “云服务器” 中的 “织造云服务”
新用户关注注册
概述
在已登录系统的状态下,点击右上角 “扫码关注”,新用户扫描该二维码后关注,有审核权限的微信用户就会受到审核用通知消息,管理员点击模板消息后填写真实姓名保存即可。鉴定微信用户是否有审核权限的逻辑是存储过程 usp_getAuditorsInMill。其中指定了 user_mill.audit = 1 的微信用户有审核权限,即微信用户在指定的 mill 环境下有审核权限。用户取消关注时微信后台不会删除用户,该用户再次关注时后台检测到已有该用户的信息也不会重复写入,不会报错。
关注时新增用户的日志
新用户关注公众号后会调用方法 WechatOpe.java#subscribe 向 user 和 user_mill 写入新用户信息,同时写入表 reqs_log 日志,其中字段 des = 新增微信mill关系,如果微信中没有收到通知消息可到此表中查找最近的该类数据。
删除指定微信的所有数据
# 删除指定微信用户的所有数据,赋值 openId 之后执行
DELIMITER $$
SET @openId = 'oSIC353OSnMotCWuR4B2HBXL8V84';
DELETE FROM user_mill WHERE open_id=@openId;
DELETE FROM user WHERE open_id=@openId;
delete from user_permission where openid=@openId;
$$
审核模板消息详情页
/data/extdisk/jzywxfe/wx_permission.html
推送
白坯、成品推送消息内容的构建存储过程 p_wechat_push_list,要修改推送的模板消息内容,修改这个存储过程中的对应的字段内容即可
推送成品发货
发送 post 请求到地址:https://www.jzy.world/wxbe/tmpmsg/w 参数的格式如下,即 metaList 表示模板消息的内容构成的数组,数组元素是 MetaData 类型, openidList 是要推送的微信 openId 构成的数组, 最后的 templateId 是模板消息的模板编号
{
"metaList":[
{"value":"你有一个订单已经发货"},
{"value":"昌越(虹桥印染)"},
{"value":"F21070006(白坯)"},
{"value":"MTP210010 全消光双面法兰绒 340*185 8mm 420*4 120D/192F全消光"},
{"value":"167匹,6276.4KG,单价12.90元,金额80965.56元","color":"#FF1722"},
{"value":"2021年07月04日"},
{"value":"如有质量问题,请在发货后7天内通知我厂,请勿开裁!"},
{"value":""}
],
"openidList":["oSIC359AVDEo0HStiJjGEi3cDVys"],
"templateId":"ct06WMt1UpbhUPr_u_N-y4J7uAZeHfYWrF7dZ5deOGc"
}
2021年6月27日 12:04:24 更换白坯发货模板消息的ID,完整的 post 请求如下
{
"metaList":[
{"value":"你有一个订单已发货"},
{"value":"富春(苏粤印染)"},
{"value":"F21060001"},
{"value":"MTP210008 双面法兰绒 230g*200 5mm 430*4 120D/192F半光 "},
{"value":"179匹,8873.4KG,单价11.3元,金额100269.42元","color":"#FF1722"},
{"value":"2021年6月26日"},
{"value":"如有质量问题,请在发货后7天内通知我厂,请勿开裁!"},
{"value":""}
],
"openidList":["oSIC35_Oiw3iKW3AfGiQiDGoFmaw","oSIC35xmZmDLWOihqocWwHyWQjLg","oSIC351QqfdfWys65MbOEj4eGU94","oSIC3540eOSRJyPMXgffHXFyobnI"],
"templateId":"ct06WMt1UpbhUPr_u_N-y4J7uAZeHfYWrF7dZ5deOGc"
}
前端页面
下面是白坯的前端页面 wplan.html :已排计划 worder.html :客户订单 woutput.html :日产量表 wfinance.html :应收应付 winventory.html :存货
下面是色布的页面 cplan.html : 已排计划 corder.html : 客户订单 cinventory.html : 存货
下面是原料的页面 rinventory.html : 收发存 authority.html : 权限管理 about.html :关于
项目后台
概述
后台项目路径是:/data/extdisk/whiteaccount,由于项目使用了多个配置文件,部署时没有采用外置配置文件的方案。 启动项目命令 systemctl start whiteaccount
API
外发管理
点击导入模态窗表格数据源 post 请求:productOutwardOrder/getUnImportedJRK 传入参数格式:
{"processCompname":"晨宇"}
导入的模态窗保存按钮的请求
post 请求:productOutwardOrder/insertByGatheredJrk 传入参数格式:
{"processCompanyName":"晨宇","ids":[1,2,3,4]}
业务逻辑
扫码关注
新用户扫描二维码关注后微信后台服务自动向表 user 中写入数据,记录当前微信用户,同时向管理员推送审核用的模板消息。可在该页面设置当前微信用户关联的 mill (在表 user_mill 中添加关联关系)。用户取消关注系统不会做任何操作,表 user 中仍然保留该用户的信息,当该用户再次关注时,后台服务执行关注的逻辑时在检测该用户已经存在于表 user 中则不会重复写入。
审核用的模板消息的详情页中保存关联的请求是 /userMill/save ,会先检测当前微信和指定的 mill 是否已经存在关联,不会重复写入
源码
基础资料 - 客户
contactCompany/listQuery
子菜单项图标
文件 C:\software\ideaProjs\white_account\src\main\resources\static\css\navigation.css 中注册了项目内的图标文件,后者在目录 C:\software\ideaProjs\white_account\src\main\resources\static\css\navigation 下
左侧导航菜单图标
左侧导航菜单的图标所在目录是 C:\software\ideaProjs\white_account\src\main\resources\static\jq-eject-aside\src\icons\navigation 对应的注册用文件是 C:\software\ideaProjs\white_account\src\main\resources\static\jq-eject-aside\src\css\navigation.css
新增左侧菜单项
在权限页面中增加一个菜单项,保留上级菜单为空则表示将菜单项增加到左侧导航
微信获取数据
要根据微信用户所属账套执行存储过程(有可能每个账套实现同一个业务逻辑的同名存储过程执行逻辑不同),对应的后端接口是 C:\software\ideaProjs\white_account\src\main\java\com\xdf\whiteaccount\mobilecontroller\DataGetterController.java
多数据源
实现多数据源切换的类是 C:\software\ideaProjs\white_account\src\main\java\com\xdf\whiteaccount\config\datasource\DynamicDataSource.java,这里的 CURRENT_DATASOURCE 和 STORAGE_DATASOURCE 其实保存的都是当前数据源,不过在账套切换的过程中可能导致 CURRENT_DATASOURCE 和 STORAGE_DATASOURCE 不同,后者用于将数据源切换到之前的账套上。例如,实现某个业务时需要将当前业务账套001切换到 wechat ,在执行一些逻辑后再切换回账套 001,但此时 CURRENT_DATASOURCE 已经是 wechat 了,这种情况下就要借助 STORAGE_DATASOURCE 切换回原来的数据源。对于多数据源的管理不可多次创建 DynamicDataSource 的实例,如果要使用该实例要通过调用 getInstance 获取实例对象然后再调用其他实例方法(当然静态方法可直接调用了)。数据源切换是通过切片 C:\software\ideaProjs\white_account\src\main\java\com\xdf\whiteaccount\aop\DynamicDataSourceAspect.java 中定义的每个方法。这些方法的注解定义了在哪些包下进行数据源的切换,所以有新业务要制作保证在现有包结构下新增文件。
自定义权限
在表 sys_permission 中新增一个字段,在 C:\software\ideaProjs\white_account\src\main\java\com\xdf\whiteaccount\config\ShiroRealm.java 的方法 getPermissions 中追加新的自定义权限。
计划管理
- html - templates/pages/jh/jh_plan_report.html
- js - static/js/pages/jh/jh_plan_report.js
白坯计划
- templates/pages/jh/jh_plan_report.html
- static/js/pages/jh/jh_plan_report.js
- 序时表表格请求调用的存储过程:p_plan_report
- 查看明细 右键菜单中的项目“查看明细”是在 js 文件中生成的对话框,其 id = "input_form",通过搜索该 ID 找到初始化模态窗数据的请求是 plan/report/detail/{id},一个请求响应来对话框中的所有数据,包括下面表格内的数据,请求所在控制器是 com.xdf.whiteaccount.controller.PlanController.getPlanDtl,对应的 mapper.xml 是mapping/CallMapper.xml,存储过程是 p_plan_dtl
- 白坯计划序时表 - 选中行右键菜单“查看明细” - 库存数据 - p_plan_storage_modify
- 白坯计划序时表 - 选中行右键菜单“查看明细” - 表格上面表单数据 - p_plan_dtl
移库弹出模态窗
表格数据源请求 - post: url - plan/reportExclude 参数格式 - {'id':'2'} 返回结果 - 返回所有未完工的白坯计划,排除参数中的主键值的计划 数据源存储过程 p_plan_report 沿用小张的,在 java 过滤掉用排除的计划
执行移库
后端请求 - post url - jrkbillAdjust/migrateStock 参数格式 - {"ido":"2","idt":"3","pairs":"11","qty":"22"} ido - 源计划主键 idt - 目标计划主键 pairs - qty - 移库的匹数和公斤 正数表示从 ido 转出给 idt ,负数则相反
成品计划序时表
- 前端 JS 文件:src/main/resources/static/js/pages/jh/jh_dye_plan_report.js。
- 序时表表格数据的请求 dyeFabricPlan/report
- 表格数据调用的存储过程:p_dye_fabric_plan_report
- 右键查看明细的代码在行号 1159,请求后端数据是将3个表格以及上面计划信息一起获取然后在前端分离显示。后端数据的请求是:dyeFabricPlan/report/detail/ 控制器是 src/main/java/com/xdf/whiteaccount/controller/DyeFabricPlanController.java 的方法 getPlanDtl 调用的存储过程是:p_dye_plan_dtl
- 序时表上方工具栏中按钮“订单完成”执行的请求是 dyeFabricPlan/finished。执行的控制器是 src/main/java/com/xdf/whiteaccount/controller/DyeFabricPlanController.java 中的方法 setFinishedState
- 取消审核的请求是 dyeFabricPlan/cancelAudit,控制器是 src/main/java/com/xdf/whiteaccount/controller/DyeFabricPlanController.java 对应的方法 cancelAuditByPrimaryKey
- 新增 / 修改单据的请求:dyeFabricPlan/insertSelective 和 dyeFabricPlan/updateSelective
外发管理
坯布入库
表格数据源存储过程:p_product_inbound_report。该存储过程在 2021年8月22日 14:22:02 追加字段 mode ,是枚举体:手动输入、自动导入。前端获取数据的字段为该存储过程的字段 点击导入弹出的模态窗表格的数据源存储过程是 usp_getUnImportedJRK 删除的请求 - post:productOutwardOrder/cancelByPk 参数名:id 保存导入数据的接口 - post:productOutwardOrder/mapping8jrk 传入参数:
{'processCompanyName':'晨宇','ids':ids}
白坯管理
html 页面:templates/pages/jh/jh_plan_report.html 对应的 js 文件:static/js/pages/jh/jh_plan_report.js 表格数据的请求:plan/report 对应的后端控制器:com.xdf.whiteaccount.controller.PlanController.getPlanReport 服务层实现类:com.xdf.whiteaccount.service.impl.CallServiceImpl.getPlanReport 对应的 Mapper 方法:mapping/CallMapper.xml.getPlanReport 使用存储过程:p_plan_report
白坯计划序时表右键菜单的“查看明细”中3个标签页的数据源是一个请求: com.xdf.whiteaccount.controller.PlanController.getPlanDtl 其中库存调整的数据源是:com.xdf.whiteaccount.dao.CallMapper.getPlanStorageModify 对应的存储过程是:p_plan_storage_modify 手动调整白坯库存的表是 jrkbill_adjust
部署与实施
启动与停止
- 将最新 jar 拷贝到目录 /data/extdisk/whiteaccount 下
- 通过命令 ps -aux|grep white-account 检查后台服务进程号
- 通过命令 kill -15 进程ID 关闭后台服务
- 修改第1步中的 jar 文件为:white-account.jar
- 将下面命令拷贝到 xshell 回车执行 - 启动服务
nohup java -jar /data/extdisk/whiteaccount/white-account.jar > /data/extdisk/whiteaccount/runtime.log 2>&1 & - 使用命令 ps -aux|grep white-account 检查服务是否正常启动
- 浏览器登录系统测试
- 想要制作 systemd 服务自启动,但是由于使用了多配置文件导致没有制作成功,所以采用上面的手动启动方法 自启动服务在 /usr/lib/systemd/system
本地测试
保证项目微信账号数据库指向云端,业务数据库指向本地,启动项目后可正常获得登录二维码,操作的数据影响的是本地的数据库 - 映射关系仍然使用云端指定的。 即本地开发并测试使用后面注释是:“本地” 的一套配置文件 生产环境要切换为“正式服务器” 注意本地要有配套业务数据库
改善计划
2026年3月28日 16:37:49
本次为齐力达制作推送的白坯发货推送模板消息中追加显示 客户单号 时发现新部署的项目启动后不会自动创建所有账套的数据源,会导致此时如果有009账套的发货单生成,后台在遍历数据源时由于没有009的数据源导致无法推送模板消息,在生成发货单之前有该账套的用户登录系统,系统会自动创建数据源,则生成发货单后能够正常推送模板消息
