lzh
2025-06-19 3a6436e0c88042c6ce8dca2fe8adb0109f0ad9e4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
--[[
    编码: GT-100-03
    名称: GT-WMS
    作者:LZH
    入口函数: MaterialMaintain
 
 
    功能说明:
        GT-WMS下发基础物料信息给 GZ-WMS系统,GZ-WMS系统对基础数据进行新增/修改        
 
        输入数据:        
        [{
            "item_code": "xxx",  -- 物料编码
            "item_name": "xxx",  -- 物料描述
            "is_validate": "Y",  -- 是否条码验证
            "sub_type": "粉料01",  -- 中类
            "minor_type": "粉料0102",  --小类
            "isothermal": "Y",  -- 是否恒温
            "is_insulate": "N",  -- 是否保温
            "is_pack": "N",  -- 是否拣选
            "wh_code": "AHYLK",  -- 仓库号
            "area_code": "全钢",  -- 库区
            "remark1": "",  -- 备注 暂未启用
            "remark2": "",  -- 备注 暂未启用
            "remark3": "",  -- 备注 暂未启用
            "remark4": ""   -- 备注 暂未启用
        },
        ...
        ]
 
        处理逻辑
        -- step1 解析接口传递的 datajson 参数
        -- step2 校验必传字段是否为空,为空则报错
        -- step3 根据接口类型字段对基础数据进行新增或修改操作
                                                                    
    变更记录:
    20241111 LZH V1.1 GT-WMS要求格式为List
    20250221 LZH V1.2 新增4个备用字段
--]]
m3    = require("oi_base_mobox")
json  = require("json")
mobox = require("OILua_JavelinExt")
function MaterialMaintain(strLuaDEID)
    local nRet, strRetInfo, in_date, material
    -- step1 获取接口数据
    local list
    nRet, list = m3.GetSysDataJson(strLuaDEID)
    if (nRet ~= 0) then lua.Error(strLuaDEID, debug.getinfo(1), "WCStoreCallback 无法获取数据包!" .. list) end
    local count = #list
    if (list == nil or count == 0) then return end
    lua.Debug(strLuaDEID, debug.getinfo(1), '物料基础属性下发参数:', list)
 
    for i = 1, count do
        in_date = list[i]
        -- step2 判断是否都有值?没值报错返回
        local item_code = in_date.item_code
        if (item_code == nil or item_code == '') then lua.Error(strLuaDEID, debug.getinfo(1), "物料编码不能为空!") end
        local wh_code = in_date.wh_code
        local sub_type = in_date.sub_type
        local item_name = in_date.item_name
        local is_validate = in_date.is_validate
        local minor_type = in_date.minor_type
        local isothermal = in_date.isothermal
        local is_pack = in_date.is_pack
        local area_code = in_date.area_code
        -- V1.2 新增备用字段
        local remark1 = in_date.remark1
        local remark2 = in_date.remark2
        local remark3 = in_date.remark3
        local remark4 = in_date.remark4
 
        local strSetSQL_update = ""
        -- 拼接修改语句
        if (wh_code ~= nil and wh_code ~= '') then
            strSetSQL_update = strSetSQL_update .. ",S_WH_CODE = '" .. wh_code .. "'"
        end
        if (item_name ~= nil and item_name ~= '') then
            strSetSQL_update = strSetSQL_update .. ",S_ITEM_NAME = '" .. item_name .. "'"
        end
        if (is_validate ~= nil and is_validate ~= '') then
            strSetSQL_update = strSetSQL_update .. ",C_IS_VALIDATE = '" .. is_validate .. "'"
        end
        if (sub_type ~= nil and sub_type ~= '') then
            strSetSQL_update = strSetSQL_update .. ",S_SUB_TYPE = '" .. sub_type .. "'"
        end
        if (minor_type ~= nil and minor_type ~= '') then
            strSetSQL_update = strSetSQL_update .. ",S_MINOR_TYPE = '" .. minor_type .. "'"
        end
        if (isothermal ~= nil and isothermal ~= '') then
            strSetSQL_update = strSetSQL_update .. ",C_IS_ISOTHERMAL = '" .. isothermal .. "'"
        end
        if (is_pack ~= nil and is_pack ~= '') then
            strSetSQL_update = strSetSQL_update .. ",C_IS_PACK = '" .. is_pack .. "'"
        end
        if (area_code ~= nil and area_code ~= '') then
            strSetSQL_update = strSetSQL_update .. ",S_AREA_CODE = '" .. area_code .. "'"
        end
 
        -- 判断修改语句是否为空,为空则不做操作,不为空则删除拼接语句的第一个 逗号字符并修改
        if (strSetSQL_update ~= "") then
            strSetSQL_update = strSetSQL_update:sub(2)
            local strCondition = "S_ITEM_CODE = '" .. item_code .. "'"
            nRet, strRetInfo = mobox.updateDataAttrByCondition(strLuaDEID, "Material", strCondition,
                strSetSQL_update)
            if (nRet ~= 0) then lua.Error(strLuaDEID, debug.getinfo(1), "修改【物料】信息失败!" .. strRetInfo) end
            if (tonumber(strRetInfo) == 0) then
                -- step3 获取一个初始的【物料】数据对象
                material = m3.AllocObject(strLuaDEID, "Material")
                material.item_code = item_code
                material.wh_code = wh_code
                material.item_name = item_name
                material.is_validate = is_validate
                material.sub_type = sub_type
                material.minor_type = minor_type
                material.isothermal = isothermal
                material.is_pack = is_pack
                material.area_code = area_code
                nRet, material = m3.CreateDataObj(strLuaDEID, material)
                if (nRet ~= 0) then lua.Error(strLuaDEID, debug.getinfo(1), 'mobox 创建【物料】对象失败!' .. material) end
            end
        end
    end
end