王 垚
2022-09-15 22b11da0f245314fa031905f68ee9b3b36216250
代码上传
2个文件已修改
235 ■■■■■ 已修改文件
MES/src/BLL/Demo.BillView/PRD/Pur_ReceiveByExcel.cs 224 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES/src/Model/Demo.Model/Model/PUR_ReceiveExcelEntry.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES/src/BLL/Demo.BillView/PRD/Pur_ReceiveByExcel.cs
@@ -77,6 +77,65 @@
                    foreach (var item in pur_ReceiveExcelEntry)
                    {
                        var FQty = item.FQTY;
                        //优先判断是否存在采购订单
                        var _pur_PurchaseExcelEntryOrder = pur_PurchaseExcelEntry.Where(x => x.FMaterialId == item.FMaterialId && x.FSupplierId == item.FSUPPLIERID && x.FBzbsId == item.FBzbsId && x.FRemainReceiveQty > 0 && x.FBILLNO == item.FPOORDERNO).ToList();
                        if (_pur_PurchaseExcelEntryOrder.Count > 0)
                        {
                            foreach (var _item in _pur_PurchaseExcelEntryOrder)
                            {
                                if (_item.FRemainReceiveQty >= FQty)
                                {
                                    pur_PoOrderExcelEntry.Add(new pur_PoOrderExcelEntry
                                    {
                                        FID = item.FID,
                                        FSUPPLIERID = item.FSUPPLIERID,
                                        FMATERIALID = item.FMaterialId,
                                        FEXCELIMPORTSEQ = item.FSEQ,
                                        FPoStockId = item.FSTOCKID,
                                        FPOBzbsId = item.FBzbsId,
                                        FPOORDERNO = _item.FBILLNO,
                                        FACTQTY = FQty,
                                        FPOCREATEDATE = _item.FCREATEDATE,
                                        FDELIVERYDATE = _item.FDeliveryDate,
                                        FPOORDERID = _item.FID,
                                        FPOORDERENTRYID = _item.FENTRYID,
                                        FPOORDERSEQ = _item.FSEQ,
                                        FRECEIVABLEQTY = _item.FNeedQty
                                    });
                                    _item.FRemainReceiveQty -= FQty;
                                    FQty = 0;
                                    break;
                                }
                                else
                                {
                                    pur_PoOrderExcelEntry.Add(new pur_PoOrderExcelEntry
                                    {
                                        FID = item.FID,
                                        FSUPPLIERID = item.FSUPPLIERID,
                                        FMATERIALID = item.FMaterialId,
                                        FEXCELIMPORTSEQ = item.FSEQ,
                                        FPoStockId = item.FSTOCKID,
                                        FPOBzbsId = item.FBzbsId,
                                        FPOORDERNO = _item.FBILLNO,
                                        FACTQTY = _item.FRemainReceiveQty,
                                        FPOCREATEDATE = _item.FCREATEDATE,
                                        FDELIVERYDATE = _item.FDeliveryDate,
                                        FPOORDERID = _item.FID,
                                        FPOORDERENTRYID = _item.FENTRYID,
                                        FPOORDERSEQ = _item.FSEQ,
                                        FRECEIVABLEQTY = _item.FNeedQty
                                    });
                                    FQty -= _item.FRemainReceiveQty;
                                    _item.FRemainReceiveQty = 0;
                                }
                            }
                        }
                        //已满足需求 循环下一个物料
                        if (FQty == 0)
                            continue;
                        var _pur_PurchaseExcelEntry = pur_PurchaseExcelEntry.Where(x => x.FMaterialId == item.FMaterialId && x.FSupplierId == item.FSUPPLIERID && x.FBzbsId == item.FBzbsId && x.FRemainReceiveQty > 0).ToList();
                        foreach (var _item in _pur_PurchaseExcelEntry)
                        {
@@ -152,11 +211,172 @@
                this.View.ShowErrMessage(ex.Message.ToString());
            }
        }
        /// <summary>
        /// 生成送货单
        /// 生成收料通知单(一对一)
        /// </summary>
        public void btnPush()
        {
            try
            {
                var FID = this.View.Model.GetPKValue();
                string sql = string.Format(@"
/*dialect*/
SELECT T3.FNAME AS FTYPENAME,M.FBILLNO HBILLNO,B.FID HINTERID,B.FENTRYID HENTRYID,C.FID,C.FENTRYID, D.FBILLNO,B.FACTQTY HQTY,CD.FRECEIVEORGID,CDOO.FNUMBER AS FRECEIVENUMBER
,D.FSUPPLIERID,DS.FNUMBER AS FSUPPLIERNUMBER,D.FPURCHASEORGID,DOO.FNUMBER AS FPURCHASEORGNUMBER,CROO.FNUMBER  AS FSETTLEORGNUMBER,
E.FPRICETIMEPOINT,E.FSETTLECURRID,EC.FNUMBER AS FSETTLECURRNUMBER,C.FMATERIALID,CM.FNUMBER AS FMATERIALNUMBER ,C.FUNITID
,CU.FNUMBER AS FUNITNUMBER,CR.FPRICE,CR.FTAXPRICE,CR.FTAXRATE,D.FPURCHASERID,isnull(T4.FNUMBER,'') AS FPURCHASERNUMBER,B.FSTOCKID,tst.FNUMBER AS FStockNumber,b.FBZBSID ,isnull(tpr.FNUMBER,'') as FBZNUMBER
FROM jit_pur_PoOrderExcelEntry B
JOIN jit_pur_ReceiveExcel M ON B.FID = M.FID
JOIN  T_PUR_POORDERENTRY C ON B.FPOORDERENTRYID = C.FENTRYID
LEFT JOIN  T_BD_MATERIAL CM ON C.FMATERIALID =CM.FMATERIALID
LEFT JOIN  T_BD_UNIT CU ON C.FUNITID =CU.FUNITID
JOIN  T_PUR_POORDERENTRY_D CD ON    C.FENTRYID = CD.FENTRYID
LEFT JOIN  T_ORG_ORGANIZATIONS CDOO ON CD.FRECEIVEORGID = CDOO.FORGID
JOIN  T_PUR_POORDERENTRY_F CR ON    C.FENTRYID = CR.FENTRYID
LEFT JOIN  T_ORG_ORGANIZATIONS CROO ON CR.FSETTLEORGID = CROO.FORGID
LEFT JOIN  T_PUR_POORDER D ON C.FID =D.FID
LEFT JOIN  T_BAS_BILLTYPE T2 ON D.FBILLTYPEID = T2.FBILLTYPEID
LEFT JOIN  T_BAS_BILLTYPE_L T3 ON T2.FBILLTYPEID = T3.FBILLTYPEID and FLOCALEID = 2052
LEFT JOIN   V_BD_BUYER T4 ON D.FPURCHASERID =T4.FID
LEFT JOIN  T_BD_SUPPLIER DS ON D.FSUPPLIERID = DS.FSUPPLIERID
LEFT JOIN  T_ORG_ORGANIZATIONS DOO ON D.FPURCHASEORGID = DOO.FORGID
JOIN  T_PUR_POORDERFIN E ON C.FID =E.FID
LEFT JOIN  T_BD_CURRENCY EC ON E. FSETTLECURRID =EC.FCURRENCYID
join T_BD_STOCK tst on B.FSTOCKID =tst.FStockId
left join T_BAS_PREBDONE tpr on B.FBZBSID = tpr.FID
where b.fid = {0}
", FID);
                DataTable dt = DBServiceHelper.ExecuteDataSet(Context, sql).Tables[0];
                if (dt.Rows.Count == 0)
                {
                    LogService.Write("sql:" + sql);
                    this.View.ShowErrMessage("未匹配数据或数据异常,请联系管理员");
                    return;
                }
                List<string> fmaterialIdList = new List<string>();
                if (dt.Rows.Count > 0)
                {
                    DataRow dr = dt.Rows[0];
                    JObject model = new JObject();
                    string fTypeName = "SLD01_SYS";//标准采购订单类型
                    string ywTypeName = "CG";//标准业务类型
                    if (dr["FTYPENAME"].ToString().Contains("委外"))
                    {
                        fTypeName = "SLD03_SYS";
                        ywTypeName = "WW";
                    }
                    if (dr["FTYPENAME"].ToString().Contains("资产"))
                    {
                        fTypeName = "SLD04_SYS";
                        ywTypeName = "ZCCG";
                    }
                    model.Add("FBILLTYPEID", new JObject() { ["Fnumber"] = fTypeName }); //单据类型
                    model.Add("FBusinessType", ywTypeName); //业务类型
                    model.Add("FBILLNO", dr["HBillNo"].ToString()); //单据编号
                    model.Add("FDate", DateTime.Now.ToString("yyyy-MM-dd")); //通知日期
                    model.Add("FStockOrgId", new JObject() { ["Fnumber"] = dr["FRECEIVENUMBER"].ToString() }); // 收料组织
                    model.Add("FPurOrgId", new JObject() { ["Fnumber"] = dr["FPURCHASEORGNUMBER"].ToString() }); //采购组织
                    model.Add("FSupplierId", new JObject() { ["Fnumber"] = dr["FSUPPLIERNUMBER"].ToString() }); //供应商
                    model.Add("FPURCHASERID", new JObject() { ["Fnumber"] = dr["FPURCHASERNUMBER"].ToString() }); //采购员
                    model.Add("FOwnerTypeIdHead", "BD_Supplier");//货主类型
                    model.Add("FOwnerIdHead", new JObject() { ["Fnumber"] = dr["FSUPPLIERNUMBER"].ToString() });//货主 供应商
                    JArray Fentity = new JArray();
                    foreach (DataRow _dr in dt.Rows)
                    {
                        JObject FentityModel = new JObject();
                        FentityModel.Add("FMaterialId", new JObject() { ["Fnumber"] = _dr["FMATERIALNUMBER"].ToString() }); // 物料编码
                        FentityModel.Add("FUnitID", new JObject() { ["Fnumber"] = _dr["FUNITNUMBER"].ToString() }); // 单位
                        FentityModel.Add("FStockID", new JObject() { ["Fnumber"] = _dr["FStockNumber"].ToString() }); // 仓库   FStockID
                        FentityModel.Add("FPreDeliveryDate", DateTime.Now.ToString("yyyy-MM-dd")); //预计到货日期
                        FentityModel.Add("FPriceUnitId", new JObject() { ["Fnumber"] = _dr["FUNITNUMBER"].ToString() }); // 计价单位
                        FentityModel.Add("FStockUnitID", new JObject() { ["Fnumber"] = _dr["FUNITNUMBER"].ToString() }); //  库存单位
                        FentityModel.Add("F_TEZV_Base", new JObject() { ["Fnumber"] = _dr["FBZNUMBER"].ToString() }); //  包装标识
                        FentityModel.Add("FActReceiveQty", Convert.ToDecimal(_dr["HQTY"])); // 供应商送货数量(提料计划数量 - 已生成送货单数量)
                        FentityModel.Add("FOwnerTypeId", "BD_OwnerOrg");//货主类型
                        FentityModel.Add("FOwnerID", new JObject() { ["Fnumber"] = dr["FPURCHASEORGNUMBER"].ToString() });//货主
                        FentityModel.Add("FSrcId", _dr["FID"].ToString());//源单内码
                        FentityModel.Add("FSRCFORMID", "PUR_PurchaseOrder");//源单类型
                        FentityModel.Add("FSrcBillNo", _dr["FBILLNO"].ToString());//源单单号
                        FentityModel.Add("FSRCENTRYID", _dr["FENTRYID"].ToString());//源单分录内码
                        FentityModel.Add("FORDERBILLNO", _dr["FBILLNO"].ToString());//源单单号
                        FentityModel.Add("FPOORDERENTRYID", _dr["FENTRYID"].ToString());//源单分录内码
                        FentityModel.Add("FSRMENTRYID", _dr["HENTRYID"].ToString());//SRM hentryid
                        FentityModel.Add("FPrice", _dr["FPRICE"].ToString());//单价
                        FentityModel.Add("FTaxPrice", _dr["FTAXPRICE"].ToString());//含税单价
                        FentityModel.Add("FEntryTaxRate", _dr["FTAXRATE"].ToString());//税率
                        JArray Fentity2 = new JArray();
                        JObject FentityModel2 = new JObject();
                        FentityModel2.Add("FDetailEntity_Link_FRULEID", "PUR_PurchaseOrder-PUR_ReceiveBill");
                        FentityModel2.Add("FDetailEntity_Link_FSTableName", "t_PUR_POOrderEntry");
                        FentityModel2.Add("FDetailEntity_Link_FSBillId", _dr["FID"].ToString());
                        FentityModel2.Add("FDetailEntity_Link_FSId", _dr["FEntryID"].ToString());
                        FentityModel2.Add("FDetailEntity_Link_FBaseUnitQtyOld", Convert.ToDecimal(_dr["HQTY"]));
                        FentityModel2.Add("FDetailEntity_Link_FBaseUnitQty", Convert.ToDecimal(_dr["HQTY"]));
                        FentityModel2.Add("FDetailEntity_Link_FStockBaseQtyOld", Convert.ToDecimal(_dr["HQTY"]));
                        FentityModel2.Add("FDetailEntity_Link_FStockBaseQty", Convert.ToDecimal(_dr["HQTY"]));
                        Fentity2.Add(FentityModel2);
                        FentityModel.Add("FDetailEntity_Link", Fentity2);
                        Fentity.Add(FentityModel);
                    }
                    model.Add("FDetailEntity", Fentity); //明细信息
                    JObject _FentityModel = new JObject();
                    _FentityModel.Add("FSettleOrgId", new JObject() { ["Fnumber"] = dr["FSETTLEORGNUMBER"].ToString() }); //  结算组织
                    _FentityModel.Add("FSettleCurrId", new JObject() { ["Fnumber"] = dr["FSETTLECURRNUMBER"].ToString() }); //  结算币别
                    _FentityModel.Add("FPricePoint", 0); //  定价时点
                    model.Add("FinanceEntity ", _FentityModel);//财务信息
                    JObject jsonRoot = new JObject()
                    {
                        ["Creator"] = "",
                        ["NeedUpDateFields"] = new JArray(),
                        ["NeedReturnFields"] = new JArray(),
                        ["IsDeleteEntry"] = "false",
                        ["SubSystemId"] = "",
                        ["IsVerifyBaseDataField"] = "false",
                        ["Model"] = model
                    };
                    CloudClient cloudClient = new CloudClient("http://localhost//k3cloud/");
                    var result = cloudClient.Save("PUR_ReceiveBill", jsonRoot.ToString());
                    JObject saveObj = JObject.Parse(result);
                    string saveIsSuc = saveObj["Result"]["ResponseStatus"]["IsSuccess"].ToString().ToUpper();
                    if (saveIsSuc == "TRUE")
                    {
                        //this.View.ShowErrMessage(jsonRoot.ToString());
                        // 打开单据维护界面:以打开销售订单100001为例
                        // using Kingdee.BOS.Core.Bill;
                        string pageId = Guid.NewGuid().ToString();
                        BillShowParameter showParameter = new BillShowParameter();
                        showParameter.FormId = "PUR_ReceiveBill";
                        showParameter.OpenStyle.ShowType = ShowType.MainNewTabPage;
                        showParameter.PageId = pageId;
                        showParameter.Status = OperationStatus.EDIT;
                        // 传入需要修改的销售订单内码,演示代码直接固定写死为100001
                        showParameter.PKey = saveObj["Result"]["Id"].ToString();
                        this.View.ShowForm(showParameter);
                    }
                    else
                    {
                        this.View.ShowMessage(saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                        this.View.ShowMessage("收料通知单生成失败:" + saveObj["Result"]["ResponseStatus"]["Errors"][0]["Message"].ToString());
                        LogService.Write(jsonRoot.ToString());
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                this.View.ShowMessage(ex.Message.ToString());
            }
        }
        /// <summary>
        /// 生成送货单(相同物料合并) 22-9-15 胡晶让更改为不合并
        /// </summary>
        /// <returns></returns>
        public void btnPush()
        public void btnPushold()
        {
            try
            {
MES/src/Model/Demo.Model/Model/PUR_ReceiveExcelEntry.cs
@@ -7,6 +7,9 @@
namespace Demo.Model.Model
{
    /// <summary>
    /// Excel导入生成收料通知单 导入信息
    /// </summary>
    public class pur_ReceiveExcelEntry
    {
        public long FORGID { get; set; }
@@ -18,9 +21,12 @@
        public long FBzbsId { get; set; }
        public decimal FQTY { get; set; }
        public long FSEQ { get; set; }
        public string FPOORDERNO { get; set; }
    }
    /// <summary>
    /// 采购订单数据
    /// </summary>
    public class pur_PurchaseExcelEntry
    {
        public long FPurchaseOrgId { get; set; }
@@ -38,6 +44,9 @@
        public decimal FNeedQty { get; set; } //剩余收料数量 不参与计算 用于记录
        public long FSTOCKID { get; set; }
    }
    /// <summary>
    /// Excel导入生成收料通知单 采购订单信息 用于存储
    /// </summary>
    public class pur_PoOrderExcelEntry
    {
        //[FID], [FEntryID], [FSUPPLIERID], [FMATERIALID], [FPOORDERNO], [FRECEIVABLEQTY], [FACTQTY], [FPOCREATEDATE], [FDELIVERYDATE], [FPOORDERID], [FPOORDERENTRYID], [FPOORDERSEQ], [FEXCELIMPORTSEQ], [FSEQ]