跳至主要內容

成品管理

chanchaw大约 26 分钟weberp开发手册

成品混缸发货

JSP - src/main/webapp/WEB-INF/web/MainPages/pages_CPGL/CP_hgdispatch.jsp
JS - src/main/webapp/web/MainPages/pages_CPGL/CP_hgdispatch_v6.js
右边表格选中色号后中间表格请求数据的API - gjrkbill/getInveOneColor8OrderDtlPK
调用的存储过程 - usp_getInveOneColor8OrderDtlPK

成品发货

页面请求:toDispatch.do
model and view : account.controller.system.ModelAndViewController 的方法:todispatch
JSP:src/main/webapp/WEB-INF/web/MainPages/pages_CPGL/CP_dispatch.jsp
JS : web/MainPages/pages_CPGL/CP_dispatch.js

新盛针纺 2021年12月29日 08:26:54发货管理页面 JSP - src/main/webapp/WEB-INF/web/MainPages/pages_CPGL/CP_dispatch.jsp JS - src/main/webapp/web/MainPages/pages_CPGL/CP_dispatch_v6.js

发货单单据页面 JSP - src/main/webapp/WEB-INF/web/MainPages/pages_CPGL/CP_sendOut.jsp JS - CP_sendOut_v8.js

发货单抬头 表 reportlets 中所有 name = "发货单" 的 title 会显示在“成品发货”页面的下拉选项中

新达 2022年2月21日 15:10:19 JSP - CP_dispatch.jsp JS - CP_dispatch_v6.js 保存发货单单据的后台API - cpmain/insert.do 同时上传到云服务器的API - upload/product 保存后显示生成的发货单标签页请求数据的后台API - tosendout.do 上面的请求打开的 JSP - CP_sendOut.jsp - 成品出库单单据页面

2023年4月19日 成品发货相关逻辑: 获取成品库存的请求:delivery/data/ 对应 BillordermainMapper.xml # findMainByVatNo 通过 resultMap 的 collect 类型的属性关联自动查询数据,发货页面最左边表格(缸号库存数据)数据源是 CpDatadetailMapper.xml # findByDetailId,存储过程:usp_getInvcp8OrderId 中间表格(细码数据)的数据源是 GJrkbillMapper.xml # selectForCpByPrimaryKey , 存储过程:call usp_getInvCP8PlanId


成品发货单据

成品发货单单据JSP:web/MainPages/pages_CPGL/CP_sendOut.jsp 小张做的几个版本单据JS文件:D:\Java\ideaProjs\pademis_ssm\src\main\webapp\web\MainPages\pages_CPGL\CP_sendOut_v1.js chanchaw的华宇版本JS文件: D:\Java\ideaProjs\pademis_ssm\src\main\webapp\web\MainPages\pages_CPGL\CP_sendOut.js 打印细码单:JS文件的方法:btn_print_xmd 打印细码单

JS中请求细码单数据对应的控制器是:account.controller.system.TemplateContrroller account.template.detailbill.service.impl.GeneratorDetailBillServiceImpl 的方法:queryObjectByBillCode MAPPER:D:\Java\ideaProjs01\pademis_ssm\src\main\java\account\entity\Mapping\template\GeneratorDetailBillMapper.xml 的方法:getDetailItemByBillCode。该方法的返回类型 detailItemMap 是本 xml 文件的映射类型,其中又嵌套引用了 getTotalByBillCode ,该方法是最终获取细码单数据的方法

加载明细表格的后台API - cpdetail/update.do

**新盛针纺 2021年12月25日 10:25:46 ** JSP - src/main/webapp/WEB-INF/web/MainPages/pages_CPGL/CP_sendOut.jsp JS - src/main/webapp/web/MainPages/pages_CPGL/CP_sendOut_v8.js

“保存”按钮的后台API - cpmain/update/main

新达 JSP - CP_sendOut.jsp JS - CP_sendOut_v7.js 表格数据源存储过程 - p_cpbill_dtl

调整数量

审核后的数据都在表 cpbill_audited 中,是完整的发货数据,要查看是否有调整数量需要拿 modify 的数量减掉发货数量有插值表示当前行的产品有调整数量,例如:

SELECT id,bill_date,
       bill_code,pairs,kilo,net_kilo,meter,
       modify_kilo - kilo AS diff_kilo,
       modify_pairs - pairs AS diff_pairs,
       modify_meter - meter AS diff_meter
FROM cpbill_audited ORDER by id desc;# F200702016

该表的字段 bill_date 不是发货日期是审核日期(也是调整日期),所以不要拿这个日期到成品发货统计的报表中查询

成品发货统计 - 综合序时表

双击表格行打开原始发货单单据的后台API - tosendout.do (和“成品发货”页面保存后打开单据是同一个请求) JSP - CP_sendOut.jsp JS - CP_sendOut_v8.js

成品发货统计 - 出库对账单

成品发货统计 account.controller.system.ModelAndViewController 中的方法:toCpprocess 2022年1月17日 14:12:21 新达 jsp:web/MainPages/pages_CPGL/CP_process.jsp js:web/MainPages/pages_CPGL/CP_ProcessBill_v2.js 标签页 - 出库对账单,获得表数据的请求是:cpcpdetail/getBalanceAccount controller:account.controller.report.CpCpdetailController 的方法:getBalanceAccount mapper:D:\Java\ideaProjs\pademis_ssm\src\main\java\account\entity\Mapping\CallMapper.xml 中的方法:getBalanceAccount 存储过程:p_cpBAccount

银海印花 2022年2月21日 12:31:02 JSP - CP_process.jsp JS - CP_ProcessBill_v5.js 表格数据后台 API - cpcpdetail/getBalanceAccount 存储过程 - p_cpBAccount

成品发货统计 - 综合序时表

请求:toCpprocess.do
控制器:account.controller.system.ModelAndViewController 的方法:toCpprocess
JSP:web/MainPages/pages_CPGL/CP_process.jsp
JS:web/MainPages/pages_CPGL/CP_ProcessBill_v2.js
综合序时表中双击打开原单的请求:tosendout.do?billCode=xxxx
对应到请求:account.controller.system.ModelAndViewController 的方法:toDispatch
对应的JSP(成品发货单单据JSP):web/MainPages/pages_CPGL/CP_sendOut.jsp
成品发货单单据JS:web/MainPages/pages_CPGL/CP_sendOut_v1.js
打印A4细码单的方法在上面JS文件的方法:btn_print_xmd

**新盛针纺 2021年12月25日 10:24:22 ** 成品发货统计 JSP - src/main/webapp/WEB-INF/web/MainPages/pages_CPGL/CP_process.jsp 成品发货统计 JS - src/main/webapp/web/MainPages/pages_CPGL/CP_ProcessBill_v5.js 双击综合序时表的行打开原发货单的请求 - tosendout.do 和在发货页面生成发货单后自动打开的页面是同一个页面: JSP - src/main/webapp/WEB-INF/web/MainPages/pages_CPGL/CP_sendOut.jsp JS - src/main/webapp/web/MainPages/pages_CPGL/CP_sendOut_v8.js

成品库存明细表

URL请求:cp_finishedgoods_repertory_dtl.do 控制器:account.controller.system.ModelAndViewController 的方法:CP_finishedgoods_repertory_dtl JSP:web/MainPages/pages_CPGL/CP_finishedgoods_repertory.jsp JS:web/MainPages/pages_CPGL/CP_finishedgoods_repertory_v2.js 获取库存数据的请求:rfinishedgoods/select.do 控制器:account.controller.repertory.RFinishedgoodsController 的方法:select 服务接口:account.service.CallService 服务实现类:account.service.impl.CallServiceImpl 的方法:getCpRepositoryDtl MAPPER:D:\Java\ideaProjs01\pademis_ssm\src\main\java\account\entity\Mapping\CallMapper.xml 的方法 getCpRepositoryDtl 调用的存储过程:p_cp_repository_dtl

添加库存备注

可设置缸单的库存备注

可设置缸单的库存备注open in new window{"vatNum":"R12071503","inventoryRemark":"测试第一次库存备注"}

也可以设置订单明细的库存备注 也可以设置订单明细的库存备注open in new window{"sId":11298,"inventoryRemark":"测试订单明细第一次库存备注"}

成品库存表

请求:cp_inventory 控制器:account.controller.system.ModelAndViewController 的方法:CP_Inventory JSP:web/MainPages/pages_CPGL/CP_Inventory.jsp JS:web/MainPages/pages_CPGL/CP_Inventory.js 库存数量请求:rfinishedgoods/getCPKCSummary 控制器:account.controller.repertory.RFinishedgoodsController 的方法:getCPKCSummary 服务实现类:account.service.impl.CallServiceImpl 的方法:getCPKCSummary MAPPER:D:\Java\ideaProjs01\pademis_ssm\src\main\java\account\entity\Mapping\CallMapper.xml 的方法:getCPKCSummary 使用存储过程是:usp_CPKCSummary

发货对账单汇总表

JSP - CP_statement_summary.jsp JS - CP_statement_summary.js 相关打印模板: cp_statement_summary_1.cpt cp_statement_summary_3.cpt cp_statement_summary_1_1.cpt cp_statement_summary_4.cpt

2022年1月16日 16:08:07 查看新达源码 第一个标签页 - 明细序时表 - 表格ID - MX 表格数据后台API - cpStatementSummary/report 调用的存储过程 - p_statement_summary

第二个标签页 - 综合序时表 - 表格ID - ZH 表格数据后台API - cpStatementSummary/report/main 调用的存储过程 - p_statement_summary_main_report

发货月对账单汇总表

新达 2022年1月5日 16:07:50 menu.jsp - CP_statement_monthly_summary.do JSP - src/main/webapp/WEB-INF/web/MainPages/pages_CPGL/CP_statement_monthly_summary.jsp JS - src/main/webapp/web/MainPages/pages_CPGL/CP_statement_monthly_summary_v1.js

成品库存综合表

新盛针纺 - 利丰 - 2022年1月10日 10:01:32 JSP - src/main/webapp/WEB-INF/web/MainPages/pages_CPGL/CP_finishedgoods_repertory_new.jsp JS - src/main/webapp/web/MainPages/pages_CPGL/CP_finishedgoods_repertory_new.js 上面表格后台API - rfinishedgoods/cp/collect mapper - src/main/java/account/entity/Mapping/ViewMapper.xml # selectCpCollect 视图 - v_cpCollect

下面表格后台API - rfinishedgoods/cp/detail mapper - src/main/java/account/entity/Mapping/CallMapper.xml # getCpRepertory 存储过程 - p_cpRepertory

乐达三 2022年2月25日 16:44:13 JSP - CP_finishedgoods_repertory_new.jsp JS - CP_finishedgoods_repertory_new.js 下面的明细表格请求数据的后端API所在函数 - initKendoUiGrid 后台API - rfinishedgoods/cp/detail 存储过程 - p_cpRepertory

成品库存明细表

利丰 - 2022年1月10日 10:16:27 JSP - src/main/webapp/WEB-INF/web/MainPages/pages_CPGL/CP_finishedgoods_repertory.jsp JS - src/main/webapp/web/MainPages/pages_CPGL/CP_finishedgoods_repertory_v2.js 表格数据后台API - rfinishedgoods/select.do mapper - src/main/java/account/entity/Mapping/CallMapper.xml # getCpRepositoryDtl 存储过程- p_cp_repository_dtl

乐达3 2022年2月22日 08:24:15 同上面一样

成品库存

利丰- 2022年1月10日 10:20:24 JSP - src/main/webapp/WEB-INF/web/MainPages/pages_CPGL/CP_Inventory.jsp JS - src/main/webapp/web/MainPages/pages_CPGL/CP_Inventory_v2.js 表格数据后台API - rfinishedgoods/getCPKCSummary mapper - src/main/java/account/entity/Mapping/CallMapper.xml # getCPKCSummary 存储过程 - usp_CPKCSummaryhy

A5细码单

概述

表 reportlets 中 id = 4 是A5细码单抬头,原本带有厂名,如果要去掉,这里修改名称即可。
成品发货单据 jsp 页面 CP_sendOut.jsp 相关 js 是 CP_sendOut.js
其中函数 btn_print_xmd 下有根据不同选择打印不同样式的 A5格式细码单。
对应的 ModelAndViewController 类是 account.controller.system.TemplateController # showDetailTemplate
本方法中的 detailItem 是打印报表的明细数据。最终使用的 SQL 是方法
GeneratorDetailBillMapper.xml # getDetailItemByBillCode
注意其 resultMap 类型中有自动填充的 collection 属性,该属性是细码单明细数据。
实际的模板文件在 src\main\webapp\WEB-INF\template\细码单A5-净重.ftl

调用的实现类是 GeneratorDetailBillForA5ServiceImpl.java 其中的静态属性 ROW_COUNT 是横向的栏目数量
静态属性 COL_LENGTH 是每个栏目的行数,如果要调整行数则需要同时调整打印模板中的 maxRowLen 和此处的数量
如果仅仅调整的打印模板中的行数(增加)则会造成多出一个空白行

修改栏目数

  1. 修改 D:\source\java\pademis\xinshengzhenfang\pademis_ssm\src\main\webapp\WEB-INF\template 下的后缀是 ftl 的模板文件
  2. 在文件头定义栏目数的变量是 <#assign rowLen = 5 /> ,此处数量仅仅用于计算页数
  3. 找到表格标签的代码 <table ,其下面一行通过标签 <col 定义了列的样式,其中属性 span 指定了整个页面横向有多少列,最初的默认值15表示有15列,每个栏目有3列(匹号、公斤、米数)则分为5栏,如果要修改为4栏则设定 span=12,本标签的属性 width:38pt 表示每个列的宽度,当栏目数量减少时要适当扩大列宽,从原本的 38pt 修改为 55pt 来适应4栏的宽度
  4. 本模板文件继续向下可以看到每个栏目的头文本订单号、品名、规格等等都是硬编码的,所以要将原本的5栏中的最后一栏注释掉,从订单号到最后的门幅都要注释最后一栏
  5. 由于减少了栏目数又扩大了列宽,导致页脚的页数位置有变动,需要向左移动在注释掉其前面的空白 td 标签
  6. 最后要整体移动打印范围,找到标签 <table 上面的 div 通过 margin-topmargin-left 整体移动打印区域
  7. 在2025年2月18日为新盛针纺修改本打印模板时还要追加打卷职工手动输入的缸号,并结合系统缸号和手动缸号一起换栏,此时更改了多出细码单数据源,从 xml 中的硬编码 sql 制作为存储过程,多个存储过程名称是:usp_A5xmd02_getDtlItemByBillCode,usp_A5xmd0201_getDtlHeadTitleByVatNumber,usp_A5xmd0202_getDtlRowsItemByVatNumber,usp_A5xmd0203Footer_getDtlFooterByVatNumber
  8. 标签 <col 中要使用 freemarker 声明的变量如:<col span='${colCount}' ,即在变量名称外面要使用单引号

数据源

2023年2月26日 新泰分支中将细码单数据源从 xml 文件中剥离,新建存储过程 usp_rptA5xmd,下面是小李于 2024年8月17日 09:13:09整理

/打卷细码单 打卷详细数据 对呀存储过程/ usp_rptA5FinalDetail usp_rptA5xmd usp_rptA5xmd_etTotalByBillCode usp_rptA5xmd_getDtlFooterByVatNumber /下面是Java文件名 数据源的文件/ GeneratorDetailBillMapper.xml /下面id对应的是 细码单列头数据 订单号、颜色、色号等内容/ id=getDtlHeadTitleByVatNumber

俪铭

源码来自银海染色,将A5细码单中多出数据源从 xml 重构为使用存储过程,将 GeneratorDetailBillMapper.xml 中的 getDtlFooterByVatNumber,getTotalByBillCode,getDtlRowsItemByVatNumber 封装为存储过程: usp_rptA5xmd_getDtlFooterByVatNumber,usp_rptA5xmd_etTotalByBillCode,usp_rptA5FinalDetail,源码分别如下:

# MYSQL
DROP PROCEDURE IF EXISTS `usp_rptA5xmd_getDtlFooterByVatNumber`;
delimiter $
# 下面的 `root`@`%`表示允许任意机器上通过用户root使用本存储过程
CREATE DEFINER=`root`@`%` PROCEDURE `usp_rptA5xmd_getDtlFooterByVatNumber`(IN fpdid INT)
BEGIN
    SELECT
    count(*)                                                                      pairs,
    #round(ifnull(sum(round(a.B_GJ, 1)), 0), 1)                                    kilo,
    null                                                                       as kilo,
    round(ifnull(sum(round(a.B_MS, 1)), 0), 1)                                    meter,
    round(ifnull(sum(round(a.B_MS, 1) / 0.9144), 0), 1)                           size,
    # round(ifnull(sum(round(ifnull(a.B_GJ, 0), 1) - ifnull(b.`empty`, 0) - ifnull(b.emptyHidden, 0) - ifnull(b.packageWeight, 0) - ifnull(b.paperTube, 0)), 0), 1) netWeight
    null                                                                       as netWeight
    FROM g_jrkbill a
    LEFT JOIN plan b ON a.B_ID = b.id
    WHERE a.B_FPDID = fpdid
    GROUP BY a.B_FPDID;
END;$
create definer = root@`%` procedure usp_rptA5xmd_etTotalByBillCode(IN vBillCode varchar(100))
BEGIN
    SELECT
    #ifnull(round(sum(round(d.B_GJ, 1)), 1), 0)                                  totalKilo,
    null                                                                     as totalKilo,
    ifnull(round(sum(round(d.B_MS, 1)), 1), 0)                                  totalMeter,
    count(*)                                                                    totalPairs,
    ifnull(round(sum(round(d.B_MS, 1) / 0.9144), 1), 0)                         totalSize,
    #ifnull(round(sum(round(ifnull(d.B_GJ, 0), 1) - ifnull(c.`empty`, 0) - ifnull(c.packageWeight, 0) - ifnull(c.paperTube, 0) - ifnull(c.emptyHidden, 0)), 1), 0) totalNetWeight
    null                                                                     as totalNetWeight
    FROM cpbillmain a
    LEFT JOIN cpbilldetail b ON a.id = b.pId AND b.status = 1
    LEFT JOIN plan c ON b.vatNo = c.vatNum
    LEFT JOIN g_jrkbill d ON b.id = d.B_FPDID
    WHERE a.billCode = vBillCode
    GROUP BY a.billCode;
END;
create definer = root@`%` procedure usp_rptA5FinalDetail(IN fpdid int)
BEGIN
    # 202391214:29:38
    # 打印A5细码单时最终明细数据 - 公斤、米数
    SELECT @num := @num + 1                                     no,
    a.B_PH2                                                     pairNo,
    round(ifnull(a.B_MS, 0), 1)                                 meter,
    #round(ifnull(a.B_GJ, 0), 1)                                 kilo,
    null                                                     as kilo,
    round(ifnull(a.B_MS, 0) / 0.9144, 1)                        size,
    # round(round(ifnull(a.B_GJ, 0), 1) - ifnull(c.`empty`, 0) - ifnull(c.packageWeight, 0) - ifnull(c.paperTube, 0) - ifnull(c.emptyHidden, 0), 1) netKilo
    null                                                     as netKilo
    FROM g_jrkbill a
    LEFT JOIN plan c ON a.B_ID = c.id
    JOIN (SELECT @num := 0) b
    WHERE a.B_FPDID = fpdid
    ORDER BY a.B_ItemID ASC;
END;

中样大货表

JSP - CP_midGoods.jsp 存储过程 - usp_getMidGoods

乐亿达仓库

库存审核 JSP - CP_lyd_audit.jsp JS - CP_lyd_audit.js 待审核标签页数据源 - call/lydAudit - 已审核的后台API 一样 存储过程 - usp_getnotsj_lyd

库存表 JSP - CP_lyd_inventory.jsp JS - CP_lyd_inventory.js 后台数据API - call/getkclyd 存储过程 - usp_getkc_lyd

发货统计 JSP - CP_lyd_stat.jsp JS - CP_lyd_stat.js 后台API - call/getSendoutGoodsLyd 存储过程 - usp_getsendoutgoods_lyd

删除发货数据

下面的数字是发货单主表主键,切记不可设置为空,要设置为0

UPDATE g_jrkbill SET fpdid2 = 0 WHERE fpdid2 IN (SELECT id
                                                    FROM cpbilldetail WHERE pId IN (916,913,911));
                                                    
DELETE FROM cpbilldetail WHERE pId IN (916,913,911);
DELETE FROM cpbillmain WHERE id IN (916,913,911);

2022年11月1日 13:17:38 将上面代码制作为存储过程: 调用方式:call usp_delLYDFHD(发货单单据编号);

# MYSQL
DROP PROCEDURE IF EXISTS `usp_delLYDFHD`;
delimiter $
# 下面的 `root`@`%`表示允许任意机器上通过用户root使用本存储过程
CREATE DEFINER=`root`@`%` PROCEDURE `usp_delLYDFHD`(IN vBillCode VARCHAR(100))
BEGIN
    # 2022年11月1日 13:11:02
    # 删除乐亿达制作的发货单,传入发货单单据编号
    START TRANSACTION ;
    set @id = (select id from cpbillmain where billCode = vBillCode);
    UPDATE g_jrkbill SET fpdid2 = 0 WHERE fpdid2 IN (SELECT id FROM cpbilldetail WHERE pId = @id);
    DELETE FROM cpbilldetail WHERE pId = @id;
    DELETE FROM cpbillmain WHERE id = @id;
    COMMIT ;
END;$

恢复乐达3发到乐亿达为乐达3的发货单

# 恢复发到乐亿达的单据为从乐达3发送给客户
# 只要填写变量 @billCode - 在乐达3的发货单单据编号
DELIMITER $$
SET @billCode = 'F220626014';
set @mainId = (SELECT id FROM cpbillmain WHERE billCode=@billCode);

# 恢复打卷数据 toStore,从1修改为0
UPDATE g_jrkbill SET toStore = 0 WHERE B_FPDID IN (SELECT id FROM cpbilldetail WHERE pId = @mainId);

# 恢复发货单主表标识字段
UPDATE cpbillmain SET toStore = 0 WHERE id = @mainId;
$$

将乐达3的发货单设置为发给乐亿达的单据

# 将乐达3的发货单设置为发给乐亿达的单据
DELIMITER $$
SET @billCode = 'F220702010';
set @mainId = (SELECT id FROM cpbillmain WHERE billCode=@billCode);
# 修改主表标识字段
UPDATE cpbillmain SET toStore = 1 WHERE id = @mainId;
UPDATE g_jrkbill SET toStore = 1 WHERE B_FPDID IN (SELECT id FROM cpbilldetail WHERE pId = @mainId);
$$

打卷详细数据

<a url="toDatadetail.do">打卷详细数据</a> account.controller.system.ModelAndViewController 的方法:toDatadetail jsp:web/MainPages/pages_CPGL/CP_datadetail.jsp js:web/MainPages/pages_CPGL/CP_datadetail_v1.js

2021年12月23日 17:10:55 新盛针纺: JSP - src/main/webapp/WEB-INF/web/MainPages/pages_CPGL/CP_datadetail.jsp JS - src/main/webapp/web/MainPages/pages_CPGL/CP_datadetail_v2.js 调用的存储过程 - p_dj_dtl 选出选中缸号的请求 - gjrkbill/deleteByVatnum

请求表格数据:cpdatadetail/findByDate.do 控制器:account.controller.report.CpDataDetailController 的方法:findByDate 服务接口:account.service.CallService 的方法:getDjDtl 服务实现类:account.service.impl.CallServiceImpl 的方法:getDjDtl D:\Java\ideaProjs\pademis_ssm\src\main\java\account\entity\Mapping\CallMapper.xml 的方法:getDjDtl 存储过程:p_dj_dtl

白玉兰 2022年1月27日 16:07:06 在 JSP head 中通过检测参数动态调用 JS 文件 CP_datadetail_module.js 或者 CP_datadetail_v2.js 获取打卷详细数据的存储过程:p_dj_dtl

乐达三 2022年2月24日 10:34:22 JSP - CP_datadetail.jsp JS - CP_datadetail_module.js 或者 CP_datadetail_v2.js。默认后者 请求数据的后台API - cpdatadetail/findByDate.do 调用存储过程 - p_dj_dtl

品质管理

废布入库序时表

乐达三 2022年2月22日 10:58:12 JSP - BP_wasteCloth_report.jsp JS - BP_wasteCloth_report.js 打印模板 - waste_cloth_report.cpt

计划开单序时表

<a url="toProcessPlanbill.do">计划开单序时表</a> account.controller.system.ModelAndViewController 中的方法:toProcessPlanbill jsp:web/MainPages/pages_SCJH/SC_ProcessPlanbill.jsp // js:web/MainPages/pages_SCJH/SC_planbill_process_v3.js 2020年10月6日 14:36:10 查看源码上面的 JS文件已经不用了改用下面的 web/MainPages/pages_SCJH/SC_planbill_process_v6.js

利丰 2022年1月22日 08:53:57 JSP - src/main/webapp/WEB-INF/web/MainPages/pages_SCJH/SC_ProcessPlanbill.jsp JS - src/main/webapp/web/MainPages/pages_SCJH/SC_planbill_process.js

新盛针纺 2021年12月26日 12:50:32 JSP - src/main/webapp/WEB-INF/web/MainPages/pages_SCJH/SC_ProcessPlanbill.jsp JS - src/main/webapp/web/MainPages/pages_SCJH/SC_planbill_process_v6.js 第一个标签页的打印模板 - planbill_report.cpt 右键菜单 制作回修单 JSP - src/main/webapp/WEB-INF/web/MainPages/pages_SCJH/SC_DyePlanBill_repaired.jsp

第二个标签页的打印模板 - planbill_report_repaired.cpt 第三个标签页的打印模板 - planbill_unarrange_printing.cpt 第四个标签页的打印模板 - planbill_unarrange_dye.cpt 第五个标签页的打印模板 - planbill_arrange_printing.cpt 第六个标签页的打印模板 - planbill_arrange_dye.cpt

进度查询 在第二个标签页表格中右键菜单有“进度查询”,ModelAndView 的请求是 sc_order_progress.do,传递了缸号参数 进度查询的 JSP - src/main/webapp/WEB-INF/web/MainPages/pages_SCJH/SC_order_progress.jsp JS - src/main/webapp/web/MainPages/pages_SCJH/SC_order_progress.js 用到的存储过程 - usp_GetFlowProgress

双击打开计划原单

下面是 2022年12月13日 15:11:16 银海印花源码

  • 改色单 新增 - planBill/change/save.do 修改 - planBill/change/update.do
  • 回修单 新增 - planBill/repaired/save.do 修改 - planBill/repaired/update.do
  • 正常单
    • 染色 新增 - planBill/save.do 修改 - planBill/update.do
    • 印花 新增 - planBill/save.do 修改 - planBill/update.do - SourcePlanBillServiceImplI#modify

第一个标签页 - 计划开单序时表

提示

利丰 2022年2月24日 13:07:40

JSP: SC_ProcessPlanbill.jsp JS: SC_planbill_process.js 请求后端API: pbill/detail 调用存储过程: p_plan_report

表格数据请求:pbill/detail account.controller.report.PBillController 中的方法:selectByDateAndStatus account.service.impl.CallServiceImpl 的方法:getPlanReport D:\Java\ideaProjs\pademis_ssm\src\main\java\account\entity\Mapping\CallMapper.xml 的方法:getPlanReport 存储过程:p_plan_report

第一个标签页表格ID = ZH,双击打开原始单据的请求分为以下4中情况:

  1. 染印开单的染色:sc_flatdye_planbill.do?vatNum=${vatNum}    请求来自 account.controller.system.ModelAndViewController 的方法:scFlatDyePlanBill JSP:web/MainPages/pages_SCJH/SC_FlatDyePlanBill.jsp 相关的JS:SC_PlanBill_table_list_dyeflat.js                                                   SC_PlanBill_shuttle_dyeflat.js                                                   SC_PlanBill_Flat_Dye.js
  2. 染印开单的印花:toPlanBill.do?vatNum=${vatNum}    请求来自 account.controller.system.ModelAndViewController 的方法:toPlanBill JSP:web/MainPages/pages_SCJH/SC_DyePlanBill.jsp                                                已开缸单表格:web\MainPages\pages_SCJH\SC_PlanBill_table_list.js                                                 计划单穿梭框:web\MainPages\pages_SCJH\SC_PlanBill_shuttle.js                                                 计划单页面主JS:web\MainPages\pages_SCJH\SC_PlanBill_Dye.js                                                    或者:web/MainPages/pages_SCJH/SC_FlatPlanBill.jsp 相关的JS:web\MainPages\pages_SCJH\SC_PlanBill_table_list.js                                                   web\MainPages\pages_SCJH\SC_PlanBill_shuttle.js                                                   web\MainPages\pages_SCJH\SC_PlanBill_Flat.js
  3. 正常单据:toPlanBill.do?vatNum=${vatNum}     染色计划单 请求来自 account.controller.system.ModelAndViewController 的方法:toPlanBill JSP:web/MainPages/pages_SCJH/SC_DyePlanBill.jsp 相关的JS:web\MainPages\pages_SCJH\SC_PlanBill_table_list.js      web\MainPages\pages_SCJH\SC_PlanBill_shuttle.js      web\MainPages\pages_SCJH\SC_PlanBill_Dye.js

印花计划单 或者:web/MainPages/pages_SCJH/SC_FlatPlanBill.jsp 相关的JS:web\MainPages\pages_SCJH\SC_PlanBill_table_list.js      web\MainPages\pages_SCJH\SC_PlanBill_shuttle.js      web\MainPages\pages_SCJH\SC_PlanBill_Flat.js 4. 回修单据:sc_repaired_planbill.do?vatNo=${vatNum} 请求来自 account.controller.system.ModelAndViewController 的方法:scRepairedPlanBill JSP:web/MainPages/pages_SCJH/SC_DyePlanBill_repaired.jsp 相关的JS:web\MainPages\pages_SCJH\SC_PlanBill_table_list_repaired.js      web\MainPages\pages_SCJH\SC_PlanBill_shuttle_repaired.js      web\MainPages\pages_SCJH\SC_PlanBill_Dye_repaired.js

第二个标签页 - 回修单序时表

表格数据请求:pbill/repaired/select.do account.controller.report.PBillController 中的方法:selectRepairedByDateAndState account.service.ViewService 中的方法:selectPlanRepaired account.service.impl.ViewServiceImpl 中的方法:selectPlanRepaired dao:account.dao.ViewMapper 中的方法:selectPlanRepaird D:\Java\ideaProjs\pademis_ssm\src\main\java\account\entity\Mapping\ViewMapper.xml 中的方法:selectPlanRepaird 硬编码了SQL语句,数据取自视图:v_plan_rep

第三个标签页 - 未排生产印花

表格数据请求:pbill/unproductive/printing account.controller.report.PBillController 中的方法:selectUnOrderedPrinting 从方法 service.selectUnOrdered() 中获取印花的计划 服务接口 account.service.PBillService 的方法:selectUnOrdered 服务实现类 account.service.impl.PBillServiceImpl 的方法:selectUnOrdered D:\Java\ideaProjs\pademis_ssm\src\main\java\account\entity\Mapping\PBillMapper.xml 中的方法:selectUnOrdered 没有使用存储过程,硬编码SQL,数据来自p_bill

第四个标签页 - 未排生产染色

表格数据请求:pbill/unproductive/dye account.controller.report.PBillController 中的方法:selectUnorderedDye 从方法 service.selectUnOrdered() 中获取染色的计划 服务接口 account.service.PBillService 的方法:selectUnOrdered 服务实现类 account.service.impl.PBillServiceImpl 的方法:selectUnOrdered D:\Java\ideaProjs\pademis_ssm\src\main\java\account\entity\Mapping\PBillMapper.xml 中的方法:selectUnOrdered 没有使用存储过程,硬编码SQL,数据来自p_bill

第五个标签页 - 已排生产印花

表格数据请求:pbill/productive/printing account.controller.report.PBillController 的方法:selectPrintingByDate account.service.PBillService 的方法:getPlanArrange D:\Java\ideaProjs\pademis_ssm\src\main\java\account\entity\Mapping\PBillMapper.xml 的方法:getPlanArrange 调用了存储过程:p_plan_arrange 2020年10月6日 14:40:32 重读源码更新内容如下 - 上面记录的本标签页的内容酌情使用 表格请求数据的URI 是:pbill/productive/printing 对应的控制器是:account.controller.report.PBillController 控制器中的方法是:selectPrintingByDate 服务实现类是:account.service.impl.CallServiceImpl 其中的方法是:getPlanArrange 对应的 mapper 文件是:account/entity/Mapping/CallMapper.xml 其中的方法:getPlanArrange 调用的存储过程是:p_plan_arrange

第六个标签页 - 已排生产染色

表格数据请求:pbill/productive/dye 控制器:account.controller.report.PBillController 的方法:selectDyeByDate 实现类:account.service.impl.PBillServiceImpl 的方法:getPlanArrange 调用了存储过程:p_plan_arrange

第七个标签页 - 已封号缸单

js文件D:\Java\ideaProjs\pademis_ssm\src\main\webapp\web\MainPages\pages_SCJH\SC_planbill_process_v3.js 中的方法:btnClick_lock 表格ID = tableLocked 封号事件:btnClick_lock 初始化封号标签页数据的函数是:kendoTable_locked 表格使用的数据源请求是:pbill/selectLocked 控制器:account.controller.report.PBillController 的方法:selectLocked 服务实现类:account.service.impl.CallServiceImpl 的方法:selectLocked MAPPER.XML是:D:\Java\ideaProjs01\pademis_ssm\src\main\java\account\entity\Mapping\CallMapper.xml 的方法:selectLocked 使用了存储过程:usp_plan_locked

染料序时表

<a url="rl_goodsdyeprocess.do">染料序时表</a> account.controller.system.ModelAndViewController 的方法:RL_GoodsDye_Process jsp:web/MainPages/pages_RLPF/RL_GoodsDye_Process.jsp js:web/MainPages/pages_RLZJ/RL_GoodsDye_Process_v1.js

明细序时表

表格数据请求URL:goodsdyeprocess/detail/date
account.controller.report.GoodsDyeProcessbillController 的方法:selectDetailByDateAndStatus
服务接口:account.service.GGbillService 的方法:selectDetailByDateAndStatus
服务实现类:account.service.impl.GGbillServiceImpl 的方法:selectDetailByDateAndStatus
mapper:GGdetailbillMapper 的方法:selectByDateAndStatus
D:\Java\ideaProjs\pademis_ssm\src\main\java\account\entity\Mapping\GGdetailbillMapper.xml 的方法:selectByDateAndStatus
没有使用存储过程,硬编码了SQL语句,数据来自视图:g_gdetailbill

计划单执行情况表

<a url="sc_plan_execute_report.do">计划单执行情况表</a> account.controller.system.ModelAndViewController 的方法:sc_report jsp:web/MainPages/pages_SCJH/SC_template_report_1.jsp js:SC_plan_execute_report.js 表格数据请求:planReport/dtl account.controller.report.PlanReportController 的方法:getPlanReportDtl 服务接口:account.service.CallService 的方法:getPlanReportDtl 服务实现类:account.service.impl.CallServiceImpl 的方法:getPlanReportDtl MAPPER:D:\Java\ideaProjs\pademis_ssm\src\main\java\account\entity\Mapping\CallMapper.xml 的方法:getPlanReportDtl,执行的存储过程:p_plan_report_dtl

白坯收发存汇总表

请求:bp_output_total.do 控制器:account.controller.system.ModelAndViewController 的方法:bpTemplateReport JSP:web/MainPages/pages_BPGL/BP_template_report JS:BP_output_total.js 数据源控制器:account.controller.report.BpReportController 的方法:getBpCollect MAPPER:D:\Java\ideaProjs01\pademis_ssm\src\main\java\account\entity\Mapping\CallMapper.xml 的方法:getBpCollect 使用的存储过程是:p_bpCollect

白坯库存表

<a url="toBPCashStatement.do">白坯库存表</a> account.controller.system.ModelAndViewController 的方法:toBPCashStatement jsp:web/MainPages/pages_BPGL/BP_BPCashStatement.jsp js:web\MainPages\pages_BPGL\BP_BPCashStatement.js 表格数据请求:bpreposity/filter account.controller.repertory.BpRepositoryController 的方法:filterByParam 服务接口:account.service.BpRepositoryService 的方法:filterByParam 服务实现类:account.service.impl.BpRepositoryServiceImpl 的方法:filterByParam D:\Java\ideaProjs\pademis_ssm\src\main\java\account\entity\Mapping\BpRepositoryMapper.xml 的方法:filterByParam 数据来自视图:r_bpBill

白坯单据

<a url="toGreyFabric.do">白坯单据</a> account.controller.system.ModelAndViewController 的方法:toGreyFabric jsp:D:\Java\ideaProjs\pademis_ssm\src\main\webapp\WEB-INF\web\MainPages\pages_BPGL\BP_BPBill.jsp js:web\MainPages\pages_BPGL\BP_BPBill_v1.js 打印: D:\Java\ideaProjs\pademis_ssm\src\main\webapp\WEB-INF\reportlets\bp-inbound.cpt

现金账报表

JSP - src/main/webapp/WEB-INF/web/MainPages/pages_CWGL/cash_report_chro.jsp JS - src/main/webapp/web/MainPages/pages_CWGL/CW_CashRpt_Chro.js 表格请求数据API - cashBill/rptChro 存储过程 - usp_Rpt_Cash

基础资料

染料助剂

请求:jc_goodsdye.do 控制器:account.controller.system.ModelAndViewController 的方法:JCGoodsDye JSP:web/MainPages/pages_JCZL/JC_GoodsDye.jsp 染料控制器:account.controller.basicdata.GoodsdyeController   根据左边树形结构选中节点的分类的ID显示该指定分类下的所有染料 使用上面控制器中的方法select 服务接口:account.service.GoodsdyeService 的方法:selectByTypeAndState 实现类:account.service.impl.GoodsdyeServiceImpl 的方法:selectByTypeAndState MAPPER:D:\Java\ideaProjs\pademis_ssm\src\main\java\account\entity\Mapping\GoodsdyeMapper.xml 的方法:selectByTypeAndState 染料分类的控制器:account.controller.basicdata.DyetypeController 染料分类获取所有分类的请求是:/dyetype/select  =方法  selectType 对应的MAPPER:D:\Java\ideaProjs\pademis_ssm\src\main\java\account\entity\Mapping\DyetypeMapper.xml 数据表是:dyetype

工序工艺

JSP - src/main/webapp/WEB-INF/web/MainPages/pages_JCZL/JC_technologic.jsp 左侧树形数据后台API - technologic/findAll.do 控制器 - account.controller.basicdata.CraftMainController 树形数据方法 - findAllCraft 存储数据的表 - craftmain、craftdetail

着色方式

数据库表 - tintingtype

单价套用

JSP - src/main/webapp/WEB-INF/web/MainPages/pages_JCZL/JC_EditPrice.jsp 数据表 - editprice

染色小工序

JSP - src/main/webapp/WEB-INF/web/MainPages/pages_JCZL/JC_Yrprocess.jsp 数据表 - g_yrprocess

品名

新盛针纺 2021年12月28日 13:46:00 整理 JSP - src/main/webapp/WEB-INF/web/MainPages/pages_JCZL/JC_BP.jsp 左边树形结构数据后台 API - greyfabrictype/select.do 白坯品种数据表 - greyfabrictype 树形结构数据编辑模态窗中“染色品种”下拉的数据来自dye_category

白坯品名表、品种表、染色品种表 三者的关系如下

select a.* 
from greyfabric a
LEFT JOIN greyfabrictype b on a.pId = b.id
LEFT JOIN dye_category c on b.dye_category_id = c.id

品种类别

JSP - src/main/webapp/WEB-INF/web/MainPages/pages_JCZL/JC_dyeCategory.jsp 表格后台API - dye_category/query 数据表 - dye_category

工序

src/main/webapp/WEB-INF/web/MainPages/pages_JCZL/JC_progress.jsp

错误与提示

打印FineReport报表出现 Java heap xxx

调整 tomcat 的内存池的最大值

FineReport Java Heap.png
FineReport Java Heap.png

报表页面表格部分显示为空白

是 js 的引用冲突导致,看下图。将 fr 的引用当到 bootstrap.min.js 之前就可以了

报表页面表格部分显示为空白
报表页面表格部分显示为空白

如果报表引入了 JSP 标签

<jsp:include page="../jspfiles/header.jsp"></jsp:include>

则要将 FineReport 的引入放在该行上面,否则也要报错。工序产量表的完整代码如下 - FineReport 的行号8要在行号9的代码上面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>生产计划-报表模板</title>
    <script type="text/javascript" src="ReportServer?op=emb&resource=finereport.js"></script>
    <jsp:include page="../jspfiles/header.jsp"></jsp:include>
    <link rel="stylesheet" type="text/css" href="CSS/kendo_grid_row.css">
    <link rel="stylesheet" href="Source/KendoUI/styles/kendo.common.min.css"/>
    <link rel="stylesheet" href="Source/KendoUI/styles/kendo.default.min.css"/>
    <link rel="stylesheet" href="Source/KendoUI/styles/kendo.default.mobile.min.css"/>
    <link rel="stylesheet" href="Source/KendoUI/styles/kendo.rtl.min.css"/>
    <script type="text/javascript" src="Source/KendoUI/js/jszip.min.js"></script>
    <script type="text/javascript" src="Source/KendoUI/js/kendo.all.min.js"></script>
    <script type="text/javascript" src="Source/KendoUI/js/messages/kendo.messages.zh-CN.min.js"></script>
    <style>

responseJSON 报错

2021年12月23日 13:44:05 在新盛针纺的白坯库存表中发现之前没有引入 FineReport 的 js 文件,而在引入该文件后(本页面通过 jsp 标签引入了 header.jsp ,在后者中添加的 FineReport 的 js 文件)。运行项目在浏览器控制台报错 responseJSON 不存在。后来将下面的写法

var name = $.ajax({
  url: 'contactCompany/findName.do',
  data: {id: v},
  type: 'post',
  async: false
}).responseJSON.data;

更改为:(原本就是 async: false 的写法,本次只是修改为传递参数内部属性增加 success 的方式)

let ret = "";
$.ajax({
  url: 'contactCompany/findName.do',
  data: {id: v},
  type: 'post',
  async: false,
  success: function(data){
  	ret = data.data;
  }
});

return ret;

导航页面图标文案为 null - 打开页面显示没有权限

新部署的服务器上已经运行了 redis 打开页面仍然显示没有权限,同时导航页面的图标上面的文案显示为 null 问题出在通过 navicat 恢复数据时部分数据没有恢复进入,需要调整 mysql 配置文件。服务器内存8G则使用本文件open in new window服务器内存16G则使用本文件open in new window。分别是将 mysql 使用内存设置为4G 和 8G。将前面两个配置文件中的一个拷贝到目录 C:\ProgramData\MySQL\MySQL Server 5.7 下并覆盖原文件,重启 mysql 即可。

染色员工产量

account.controller.system.ModelAndViewController 的方法:sc_workshop_task JSP:src/main/webapp/WEB-INF/web/MainPages/pages_SCJH/SC_DyeProcess.jsp JS:web/MainPages/pages_SCJH/SC_DyeProcess.js

新盛针纺 - 2021年12月22日 09:10:34

JSP - src/main/webapp/WEB-INF/web/MainPages/pages_SCJH/SC_DyeProcess.jsp JS - src/main/webapp/web/MainPages/pages_SCJH/SC_DyeProcess_v2.js 上面表格的存储过程 - P_GetRSProcessNumber 下面表格的存储过程 - P_GetRSProcessNumberDetail

染色员工产量表: 请求:sc_workshop_task.do 控制器:account.controller.system.ModelAndViewController 的方法:sc_workshop_task JSP:web/MainPages/pages_SCJH/SC_DyeProcess.jsp JS:web/MainPages/pages_SCJH/SC_DyeProcess.js 上面表格数据的请求:account.controller.report.DyeProcessReportController 的方法:getDyeMainReport callService.getDyeProcess 服务实现类:account.service.impl.CallServiceImpl 的方法:getDyeProcess MAPPER:D:\Java\ideaProjs01\pademis_ssm\src\main\java\account\entity\Mapping\CallMapper.xml 的方法:getDyeProcess 使用的存储过程:P_GetRSProcessNumber

染色产量序时表

account.controller.system.ModelAndViewController 的方法:toScDyeProcessReport JSP:web/MainPages/pages_SCJH/SC_DyeProcessReport.jsp JS:web/MainPages/pages_SCJH/SC_DyeProcessReport.js

2021年12月24日 10:04:45 新盛针纺 JSP - src/main/webapp/WEB-INF/web/MainPages/pages_SCJH/SC_DyeProcessReport.jsp JS - src/main/webapp/web/MainPages/pages_SCJH/SC_DyeProcessReport_v1.js 第一个标签页后台 API - cjflowbill/getDyeProcessReport 第一个标签页存储过程 - p_dyeProcess

第二个标签页后台 API - cjflowbill/getDyeProcessGather 第二个标签页存储过程 - p_dye_process_gather

新盛针纺 - 2021年12月18日

JSP - src/main/webapp/WEB-INF/web/MainPages/pages_SCJH/SC_DyeProcessReport.jsp JS - src/main/webapp/web/MainPages/pages_SCJH/SC_DyeProcessReport_v1.js 删除产量的方法 - btn_delete 删除的请求 - cjflowbill/deleteByItemId

员工产量汇总表

  • 所有 ModelAndView 的控制器 account.controller.system.ModelAndViewController
  • 本报表的请求是 sc_emp_output_gather
  • html 页面是:WEB-INF/web/MainPages/pages_SCJH/SC_template_report.jsp
  • js 文件:银海印花 - web/MainPages/pages_SCJH/SC_emp_output_gather_v2.js

2021年12月24日 14:29:15 新盛针纺 JS - src/main/webapp/web/MainPages/pages_SCJH/SC_emp_output_gather_v2.js 表格后台数据API - vempgather/empgatherFilter 控制器 - account.controller.report.VEmpgatherController#getEmpgatherByDateFilter 实现类 - account.service.impl.CallServiceImpl#getEmpGatherOutputFilter 存储过程 - p_EmpGatherOutput 2022年1月6日 09:29:57 在本报表的工具栏中追加过滤功能,此后采用新的存储过程 - p_EmpGatherOutput_Filter 打印模板 - EmployeeSalary.cpt

员工产量明细表

account.controller.system.ModelAndViewController 的方法:sc_emp_output_detail JSP:web/MainPages/pages_SCJH/SC_template_report.jsp 动态调用JS文件:web/MainPages/pages_SCJH/SC_emp_output_detail_v1.js 或者 web/MainPages/pages_SCJH/SC_emp_output_detail_lad_v1.js

新盛针纺 2022年1月5日 08:09:34 menu.jsp - sc_emp_output_detail.do JSP - src/main/webapp/WEB-INF/web/MainPages/pages_SCJH/SC_template_report.jsp JS - SC_emp_output_detail_lad_v1.js 表格请求数据的 API - emp_output/getEmpDetail menuId - 115 实现类 account.service.impl.CallServiceImpl#getEmpDetailOutput 存储过程 - p_EmpDetailOutput

白坯序时表

account.controller.system.ModelAndViewController 的方法:toGreyFabricList JSP:web/MainPages/pages_BPGL/BP_BPProcessBill.jsp JS:web/MainPages/pages_BPGL/BP_BPProcessBill_v1.js

多账套

  • web.xml - src/main/webapp/WEB-INF/web.xml 中的参数 spring.profiles.active 配置了使用的数据库连接参数配置文件
  • src/main/resources/DBproperties/jdbc-pro.properties 保存了多个数据库连接的参数信息,之后在 src/main/resources/Spring/spring-MyBatis.xml 中会用到。年终结转后需要在本文件中配置上年度的连接参数,例如:
#2020年度数据源
jdbc_last_2020_url=jdbc:mysql://localhost:3306/pademisaccount(2020)?userUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
jdbc_username_2020=root
jdbc_password_2020=chanchaw
#2021年度数据源
jdbc_last_2021_url=jdbc:mysql://localhost:3306/pademisaccount(2021)?userUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
jdbc_username_2021=root
jdbc_password_2021=chanchaw
  • 之后在 src/main/resources/Spring/spring-MyBatis.xml 中配置上年度 Bean 参数。追加下面代码
    <!-- 2020年度数据库 -->
    <bean id="last2020DataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close" lazy-init="true">
        <property name="driverClassName" value="${jdbc_driver}"/>
        <property name="url" value="${jdbc_last_2020_url}"/>
        <property name="username" value="${jdbc_username_2020}"/>
        <property name="password" value="${jdbc_password_2020}"/>
        <property name="minIdle" value="${jdbc_minIdle}"/>
        <property name="initialSize" value="${jdbc_initialSize}"/>
        <property name="maxActive" value="${jdbc_maxTotal}"/>
        <property name="maxWait" value="${jdbc_maxWaitMillis}"/>
        <property name="queryTimeout" value="${jdbc_defaultQueryTimeout}"/>
        <property name="timeBetweenEvictionRunsMillis" value="${jdbc_timeBetweenEvictionRunsMillis}"/>
        <property name="minEvictableIdleTimeMillis" value="${jdbc_minEvictableIdleTimeMillis}"/>
        <property name="validationQuery" value="${jdbc_validationQuery}"/>
        <property name="validationQueryTimeout" value="${jdbc_validationQueryTimeout}"/>
        <property name="breakAfterAcquireFailure" value="${jdbc_breakAfterAcquireFailure}"/>
        <property name="connectionErrorRetryAttempts" value="${jdbc_connectionErrorRetryAttempts}"/>
        <property name="timeBetweenConnectErrorMillis" value="${jdbc_timeBetweenConnectErrorMillis}"/>
        <property name="notFullTimeoutRetryCount" value="${jdbc_notFullTimeoutRetryCount}"/>
        <property name="removeAbandoned" value="${jdbc_removeAbandoned}"/>
        <property name="removeAbandonedTimeout" value="${jdbc_removeAbandonedTimeout}"/>
    </bean>

继续向下数据源 map 中要追加新的 2021 账套,代码如下 最后一个 last2021DataSource 是新增加的。

<!--数据源-->
    <!-- 下面写选择数据源的类 -->
    <bean id="dataSource" class="account.spiderweb.DataSourceRouter">
        <!-- 设置此数据源为默认数据源 -->
        <property name="defaultTargetDataSource" ref="currentAccount"/>
        <!--注入数据源-->
        <property name="targetDataSources">
            <map>
                <!-- 默认ERP数据源 -->
        <entry key="currentAccount" value-ref="currentAccount"/>
                <!-- 图片数据源 -->
        <entry key="imgAccount" value-ref="imgAccount"/>
                <!-- 云数据源 -->
        <entry key="cloudDataSource" value-ref="cloudDataSource"/>
                <!-- 本地配置数据源 -->
        <entry key="configDataSource" value-ref="configDataSource"/>
                <!-- 2019年度数据源(账套) -->
        <entry key="last2019DataSource" value-ref="last2019DataSource"/>
                <!-- 2020年度数据源 -->
        <entry key="last2020DataSource" value-ref="last2020DataSource"/>
                <entry key="last2021DataSource" value-ref="last2021DataSource"/>
            </map>
        </property>
    </bean>
  • 在枚举体 account/enums/AccountEnum.java 中设置常量 在最后新增 2021年账套
    CURRENT_DATASOURCE("1", "本年度账套", "currentAccount"),
    LASTYEAR_2019("2", "2019年度账套", "last2019DataSource"),
    CLOUD_DATASOURCE("3", "云数据库", "cloudDataSource"),
    IMAGE_DATASOURCE("4", "图片数据库", "imgAccount"),
    LASTYEAR_2020("5", "2020年度账套", "last2020DataSource"),
    LASTYEAR_2021("6", "2021年度账套", "last2021DataSource"),
    ;
  • 在配置表 g_config_onevar 的项目 WEB应用_当前账套编号 中追加上一步枚举体新增的编号。注意多个数据库中该行数据保证一致
  • 注意新达的源码在切换账套上是测试过的,但是 2022年1月23日 10:48:11 测试其他客户源码都没有实现,这里还要在源码上做修改
  • 在配置文件 spring-Mybatis.xml 中保证有下面代码
<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
  <property name="transactionManager" ref="appTransactionManager"/>
</bean>
  • 账套保持类 account.spiderweb.DataSourceHolder 保证返回方法的代码如下
    public static String getDataSourceType() {
        try {
            if (SecurityUtils.getSubject() != null) {
                if (!Objects.equals(AccountEnum.CLOUD_DATASOURCE.getDataSource(), contextHolder.get())) {
                    Session shiroSession = SecurityUtils.getSubject().getSession();
                    String account = String.valueOf(shiroSession.getAttribute("account"));
                    contextHolder.set(account);
                }
            }
        } catch (Exception e) {
//            contextHolder.set(AccountEnum.CURRENT_DATASOURCE.getName());
        }
        return contextHolder.get();
    }

制作新页面的步骤

  • 在 account.authority.MenuId 中制作新页面对应的菜单ID,之后授权要用到
  • 在路径 src/main/webapp/WEB-INF/web/MainPages/pages_CPGL/下制作 JSP 页面
  • 在路径src/main/webapp/web/MainPages/pages_CPGL 下制作 JSP 页面用到的 JS 文件
  • 在文件 account.controller.system.ModelAndViewController 中制作前端请求,用于打开页面
  • 在 src/main/webapp/WEB-INF/web/LoginPage/menu.jsp 中制作菜单项请求 ModelAndView打开页面
  • 最后进入系统为用户设置权限

错误提示与异常

无法查询到相关数据,空指针异常!

修改订单表格中内容保存提示:无法查询到相关数据,空指针异常!,错误信息:null 问题出在同步最新数据到计划单时候方法 Billordermain.java#compare 的比较中使用了空对象调用方法 导致出错,本方法下的所有比较逻辑都需要修改!!!

白坯入库单据修改备注提示成功但没有成功

执行保存单据的逻辑对应 BpBillDetailMapper.xml # updateByPkForIn ,其中会检测当前没有库存则不会修改,sql 中应该还要包含一个逻辑:匹数、公斤、米数 3个计量数字都没有变动则可以保存 - 用户可能修改备注之类的非数字要素。该问题首次发现于新泰,2023年3月17日 更新,在本 sql 中追加了一个 or 条件,如下: 当前单据中的数据和新数据都保留一位小数后进行比较,相等则表示用户没有修改数量则可无条件修改单据。

OR (
        format(ifnull(b.kilo,0),1) = format(ifnull(#{kilo,jdbcType=DOUBLE},0),1)
    and format(ifnull(b.pairs,0),1) = format(ifnull(#{pairs,jdbcType=DOUBLE},0),1)
    and format(ifnull(b.meter,0),1) = format(ifnull(#{meter,jdbcType=DOUBLE},0),1)
)

表格记忆功能实体类转换异常

原因实际 spring-devtools 和 dozer 冲突,看文章 https://www.yuque.com/chanchaw/pkb/xweqs5#XPky6open in new window

白坯核销时提示 null 异常

已经生成的缸单(已经有了计划领料)修改领料的白坯批次,然后将之前计划领料的白坯批次作废,导致一个缸号在数据库中有2行计划领料数据,其中一行是作废的状态,但是在核销领料点击“保存”的逻辑中实现判断库存是否足够,此时没有过滤掉被作废的计划领料,导致判断该白坯批次时没有库存数据(该批次的白坯是 null),导致报出空异常。解决该问题只要修改获取缸号计划领料数据时过滤掉被作废的明细数据即可,修改 BpBillDetailMapper.xml 的方法 selectByVatNo ,完整代码如下:

<select id="selectByVatNo" resultMap="BpBillDetailMap">
  SELECT a.*
  FROM bpbilldetail a
  LEFT JOIN bpbillMain b ON a.billCode = b.billCode
  WHERE a.status=1 and b.vatNo = #{vatNo,jdbcType=VARCHAR}
</select>