kazelee
2025-06-10 570a2d760cc1f2b78922d91d941ef81f01199e4c
api/ApiHelper.cs
@@ -1200,9 +1200,9 @@
            var taskName = TaskName.C成品胶出库;
            try {
                var orderNo = GenerateOrderNo("出库单号", "ON");
                var orderNo = GenerateOrderNo("出库单号", "CKD");
                var cgDetailList = SelectCgByTotalQty(model);
                var cgDetailList = SelectCgByTotalQty(model.Qty, model.ItemCode, model.BatchNo, model.CntrType, model.ForcedOut);
                if (cgDetailList.Count == 0) {
                    info = "没有合适的物料可以出库";
@@ -1271,9 +1271,9 @@
            var taskName = TaskName.C成品胶出库;
            try {
                var orderNo = GenerateOrderNo("出库单号", "ON");
                var orderNo = GenerateOrderNo("出库单号", "CKD");
                var cgDetailList = SelectCgByTotalQty(model);
                var cgDetailList = SelectCgByTotalQty(model.Qty, model.ItemCode, model.BatchNo, model.CntrType, model.ForcedOut);
                if (cgDetailList.Count == 0) {
                    info = "没有合适的物料可以出库";
@@ -1331,14 +1331,14 @@
            }
        }
        public static List<TN_CG_Detail> SelectCgByTotalQty(FinishedOutboundInfo model) {
        public static List<TN_CG_Detail> SelectCgByTotalQty(int qty, string itemCode, string batchNo, string cntrType = "", bool forcedOut = true) {
            var db = new SqlHelper<object>().GetInstance();
            var result = new List<TN_CG_Detail>();
            var targetNum = model.Qty;
            var targetNum = qty;
            var info = "";
            try {
                var targetCg = db.Queryable<TN_CG_Detail>()
                    .Where(a => a.S_ITEM_CODE == model.ItemCode && a.S_BATCH_NO == model.BatchNo)
                    .Where(a => a.S_ITEM_CODE == itemCode && a.S_BATCH_NO == batchNo)
                    .Where(a => a.N_ITEM_NUM > targetNum)
                    .OrderBy(a => a.N_ITEM_NUM, OrderByType.Asc).First();
                if (targetCg != null) //刚好有一行满足条件
@@ -1351,10 +1351,18 @@
                var sortedMaterials = new List<TN_CG_Detail>();
                if (model.ForcedOut) {
                var cntrTypeList = new List<string>();
                if (cntrType == "") {
                    cntrTypeList = new List<string> { "托盘", "好运箱" }; // 不指定托盘类型,二者均可
                }
                else {
                    cntrTypeList.Add(cntrType);
                }
                if (forcedOut) {
                    sortedMaterials = db.Queryable<TN_CG_Detail, TN_Loc_Container>((d, c) => d.S_CNTR_CODE == c.S_CNTR_CODE)
                    .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo && d.N_ITEM_NUM > 0)
                    .Where((d, c) => c.S_CNTR_TYPE == model.CntrType)
                    .Where(d => d.S_ITEM_CODE == itemCode && d.S_BATCH_NO == batchNo && d.N_ITEM_NUM > 0)
                    .Where((d, c) => cntrTypeList.Contains(c.S_CNTR_TYPE))
                    .Where(d => d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "合格"
                             || d.N_ITEM_STATE == 1 && d.S_ITEM_STATE == "待检")
                    .OrderBy(d => d.N_ITEM_NUM, OrderByType.Desc)
@@ -1362,13 +1370,12 @@
                }
                else {
                    sortedMaterials = db.Queryable<TN_CG_Detail, TN_Loc_Container>((d, c) => d.S_CNTR_CODE == c.S_CNTR_CODE)
                    .Where(d => d.S_ITEM_CODE == model.ItemCode && d.S_BATCH_NO == model.BatchNo && d.N_ITEM_NUM > 0)
                    .Where((d, c) => c.S_CNTR_TYPE == model.CntrType)
                    .Where(d => d.S_ITEM_CODE == itemCode && d.S_BATCH_NO == batchNo && d.N_ITEM_NUM > 0)
                    .Where((d, c) => cntrTypeList.Contains(c.S_CNTR_TYPE))
                    .Where(d => d.N_ITEM_STATE == 0 && d.S_ITEM_STATE == "合格")
                    .OrderBy(d => d.N_ITEM_NUM, OrderByType.Desc)
                    .OrderBy(d => d.N_ITEM_STATE, OrderByType.Asc).ToList();
                }
                if (sortedMaterials.Count == 0) //没有满足条件的
                {
@@ -1481,124 +1488,124 @@
        public static ErpResult ErpSendOutboundPlan(ErpSendOutboundPlanInfo model) {
            var db = new SqlHelper<object>().GetInstance();
            var orderNo = GenerateOrderNo("出库单号", "ON");
            var orderNo = GenerateOrderNo("出库单号", "CKD");
            var info = "";
            try {
                if (string.IsNullOrEmpty(orderNo)) {
                    info = "出库单号不能为空";
                // 参数合法性确认部分:错误编码:400
                if (model.pzsl <= 0) {
                    info = $"物料数量(pzsl){model.pzsl}不合法:物料数量应该大于 0";
                    LogHelper.Info(info);
                    return NewErpResult(400, info);
                }
                var outboundPlan = new TN_Outbound_Plan {
                    JHDH = model.jhdh, // 计划单号(唯一标识)
                    CKZT = model.ckzt, // 出库状态
                    JHLB = model.jhlb, // 计划类别
                    CKDH = model.ckdh, // 参考单号
                    CPH = model.cph, // 车牌号
                    YSFS = model.ysfs, // 运输方式
                    CPZT = model.cpzt, // 产品状态
                    MDDW = model.mddw, // 买断单位
                    CPDM = model.cpdm, // 产品代码
                    CPLB = model.cplb, // 产品类别
                    CPLBMX = model.cplbmx, // 产品类别明细
                    PP = model.pp, // 品牌
                    DJ = model.dj, // 等级
                    GH = model.gh, // 罐号
                    PH = model.ph, // 批号
                    BZLX = model.bzlx, // 包装类型
                    PZDH = model.pzdh, // 派装单号
                    PZD_DW = model.pzd_dw, // 派装单单位
                    PZD_DYBH = model.pzd_dybh, // 派装单调运编号
                    PZJS = model.pzjs, // 派装件数
                    PZSL = model.pzsl, // 派装数量
                    PZ_RQ = model.pz_rq, // 派装日期(yyyy-mm-dd)
                    PZ_CZRQ = model.pz_czrq, // 派装操作日期
                    PZ_ZFBJ = model.pz_zfbj, // 派装作废标记
                    PZ_ZFRQ = model.pz_zfrq, // 派装作废日期
                    PZ_BZ = model.pz_bz, // 派装备注
                    CKDBH = model.ckdbh, // 出库单编号
                    SFJS = model.sfjs, // 实发件数
                    SFSL = model.sfsl, // 实发数量
                    SFCS = model.sfcs, // 实发车数
                    ZCSJ = model.zcsj, // 装车时间
                    JLDW = model.jldw, // 计量单位
                    FHRQ = model.fhrq, // 发货日期
                    CKDM = model.ckdm, // 仓库代码
                    FHR = model.fhr, // 发货人
                    CZYDM = model.czydm, // 操作员
                    SHR_USERNAME = model.shr_username, // 审核人
                    SHRQ = model.shrq, // 审核日期
                    ZFBJ = model.zfbj, // 作废标记
                    ZFRQ = model.zfrq, // 作废日期
                    JSDW = model.jsdw, // 结算单位
                    SHDW = model.shdw, // 收货单位
                    YSDW = model.ysdw, // 运输单位
                    LXR = model.lxr, // 联系人
                    RY_ZXG = model.ry_zxg, // 装卸工
                    RY_CCSJ = model.ry_ccsj, // 叉车司机
                    ERPHX_JHDH = model.erphx_jhdh, // erp交货单号
                    ERPHX_WLBM = model.erphx_wlbm, // erp物料编码
                    ERPHX_WLMC = model.erphx_wlmc, // erp物料名称
                    ERPHX_CJRQ = model.erphx_cjrq, // erp创建日期
                    HW = model.hw, // 货位
                    HWZT = model.hwzt // 货位状态
                };
                var cgDetailList = SelectCgByTotalQty(
                    qty: (int)model.pzsl,
                    itemCode: model.cpdm,
                    batchNo: model.ph
                    );
                if (cgDetailList.Count == 0) {
                    info = "没有合适的物料可以出库";
                    LogHelper.Info(info);
                    return NewErpResult(3, info);
                }
                var order = new TN_Outbound_Order {
                    S_NO = orderNo,
                    S_ITEM_CODE = model.cpdm,
                    S_BATCH = model.ph,
                    N_END_NUM = (int)model.pzsl,
                    //F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY),
                    S_END_AREA = model.ysfs == "汽车" ? "QCCKQ" : "HCCKQ", // 暂时用运输方式(火车/汽车)来区分终点货区
                    S_BS_NO = model.jhdh,
                    S_BS_TYPE = "ERP",
                };
                var detailList = new List<TN_Outbound_Detail>();
                foreach (var cgDetail in cgDetailList) {
                    var detail = new TN_Outbound_Detail {
                        S_OO_NO = orderNo,
                        S_ITEM_CODE = cgDetail.S_ITEM_CODE,
                        S_BATCH_NO = cgDetail.S_BATCH_NO,
                        S_CNTR_CODE = cgDetail.S_CNTR_CODE,
                        N_COUNT = cgDetail.N_ITEM_NUM,
                        S_END_AREA = order.S_END_AREA, // order为detail的每一个货位设置终点值
                        S_BS_NO = order.S_BS_NO,
                        S_BS_TYPE= order.S_BS_TYPE,
                    };
                    detailList.Add(detail);
                }
                using (var tran = db.Ado.UseTran()) {
                    if (db.Insertable<TN_Outbound_Order>(order).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        info = "生成出库单失败:" + JsonConvert.SerializeObject(order);
                    LogHelper.Info(info);
                    return NewErpResult(2, info);
                }
                var outboundPlan = new TN_Outbound_Plan {
                    jhdh = model.jhdh,
                    ckzt = model.ckzt,
                    jhlb = model.jhlb,
                    ckdh = model.ckdh,
                    cph = model.cph,
                    ysfs = model.ysfs,
                    cpzt = model.cpzt,
                    mddw = model.mddw,
                    cpdm = model.cpdm,
                    cplb = model.cplb,
                    cplbmx = model.cplbmx,
                    pp = model.pp,
                    dj = model.dj,
                    gh = model.gh,
                    ph = model.ph,
                    bzlx = model.bzlx,
                    pzdh = model.pzdh,
                    pzd_dw = model.pzd_dw,
                    pzd_dybh = model.pzd_dybh,
                    pzjs = model.pzjs,
                    pzsl = model.pzsl,
                    pz_rq = model.pz_rq,
                    pz_czrq = model.pz_czrq,
                    pz_zfbj = model.pz_zfbj,
                    pz_zfrq = model.pz_zfrq,
                    pz_bz = model.pz_bz,
                    ckdbh = model.ckdbh,
                    sfjs = model.sfjs,
                    sfsl = model.sfsl,
                    sfcs = model.sfcs,
                    zcsj = model.zcsj,
                    jldw = model.jldw,
                    fhrq = model.fhrq,
                    ckdm = model.ckdm,
                    fhr = model.fhr,
                    czydm = model.czydm,
                    shr_username = model.shr_username,
                    shrq = model.shrq,
                    zfbj = model.zfbj,
                    zfrq = model.zfrq,
                    jsdw = model.jsdw,
                    shdw = model.shdw,
                    ysdw = model.ysdw,
                    lxr = model.lxr,
                    ry_zxg = model.ry_zxg,
                    ry_ccsj = model.ry_ccsj,
                    erphx_jhdh = model.erphx_jhdh,
                    erphx_wlbm = model.erphx_wlbm,
                    erphx_wlmc = model.erphx_wlmc,
                    erphx_cjrq = model.erphx_cjrq,
                    hw = model.hw,
                    hwzt = model.hwzt
                };
                    if (db.Insertable<TN_Outbound_Detail>(detailList).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        info = "生成出库单明细失败";
                        LogHelper.Info(info);
                        return NewErpResult(4, info);
                    }
                //var cgDetailList = SelectCgByTotalQty(new FinishedOutboundInfo {
                //    BatchNo = model.BatchNo,
                //    CntrType= model.CntrType,
                //    ItemCode= model.ItemCode,
                //    EndArea= model.EndArea,
                //    ForcedOut= model.ForcedOut,
                //    Qty= model.Qty,
                //    Spe = model.Spe
                //});
                //if (cgDetailList.Count == 0) {
                //    info = "没有合适的物料可以出库";
                //    LogHelper.Info(info);
                //    return NewErpResult(3, info);
                //}
                //var order = new TN_Outbound_Order {
                //    S_NO = orderNo,
                //    S_ITEM_CODE = model.ItemCode,
                //    S_BATCH = model.BatchNo,
                //    N_END_NUM = model.Qty,
                //    //F_OUT_QTY = cgDetailList.Sum(a => a.N_QTY),
                //    S_END_AREA = model.EndArea,
                //    S_BS_NO = model.ErpNo,
                //    S_BS_TYPE = "ERP",
                //};
                //var detailList = new List<TN_Outbound_Detail>();
                //foreach (var cgDetail in cgDetailList) {
                //    var detail = new TN_Outbound_Detail {
                //        S_OO_NO = orderNo,
                //        S_ITEM_CODE = cgDetail.S_ITEM_CODE,
                //        S_BATCH_NO = cgDetail.S_BATCH_NO,
                //        S_CNTR_CODE = cgDetail.S_CNTR_CODE,
                //        N_COUNT = cgDetail.N_ITEM_NUM,
                //        S_END_AREA = model.EndArea
                //    };
                //    detailList.Add(detail);
                //}
                using (var tran = db.Ado.UseTran()) {
                    //if (db.Insertable<TN_Outbound_Order>(order).ExecuteCommand() <= 0) {
                    //    tran.RollbackTran();
                    //    info = "生成出库单失败:" + JsonConvert.SerializeObject(order);
                    //    LogHelper.Info(info);
                    //    return NewErpResult(2, info);
                    //}
                    //if (db.Insertable<TN_Outbound_Detail>(detailList).ExecuteCommand() <= 0) {
                    //    tran.RollbackTran();
                    //    info = "生成出库单明细失败";
                    //    LogHelper.Info(info);
                    //    return NewErpResult(4, info);
                    //}
                    if (db.Insertable<TN_Outbound_Plan>(outboundPlan).ExecuteCommand() <= 0) {
                        tran.RollbackTran();
                        info = "生成出库单计划记录表失败";