duhe
2025-04-28 b7f144bf5256d986762b27a07a7531f7679c52ce
WebAPI/Controllers/Êý¾Ýͬ²½/СÖî¸ðͬ²½/XZG_DataSynchronizationController.cs
@@ -28,6 +28,7 @@
using System.Security.Cryptography;
using System.Net.Http.Headers;
using System.Web;
using Kingdee.BOS.WebApi.Client;
namespace WebAPI.Controllers
{
@@ -427,6 +428,118 @@
    #endregion
    #endregion
    #region ç”Ÿäº§æ±‡æŠ¥
    #region å·²å®¡æ ¸çš„æŠ¥å·¥è®°å½•信息列表
    public class ICMOReportListResponse
    {
        public string code;
        public string msg;
        public List<ICMOReportListResponse_Data> data;
    }
    public class ICMOReportListResponse_Data
    {
        public List<ICMOReportListResponse_Data_Data> data;
        public string pageIndex;
        public string pageCount;
    }
    public class ICMOReportListResponse_Data_Data
    {
        public string produceReportId;                  //报工记录id
        public string machineName;                      //设备名称
        public string macId;                            //设备id
        public string productName;                      //产品名称
        public string partId;                           //产品id
        public string workTime;                         //工作时间
        public string tour;                             //班次
        public string productNum;                       //生产数据
        public string standardNum;                      //报合格数量
        public string defectiveNum;                     //次品数量
        public string remark;                           //备注
        public string materialId;                       //
        public string materialName;                     //材料名称
        public string materialNo;                       //材料编号
        public string producePerson;                    //生产人员
        public string producePersonId;                  //生产人员id
        public string producePersonCode;                //生产人员code
        public string planNo;                           //计划单号
        public string taskNo;                           //任务单号
        public string partNum;                          //产品编号
        public string produceRecordId;                  //生产记录的id
        public string moldNo;                           //模具编号
        public string reportDate;                       //报工日期
        public string reportUser;                       //报工人员
        public string reportUserCode;                   //报工人员编码
        public string auditUser;                        //审核人
        public string auditUserCode;                    //审核人员编号
        public string auditDate;                        //审核日期
        public string moldName;                         //模具名称
        public string defectiveReasonName;              //次品明细信息
        public string boxCodes;                         //箱码
        public string tourGroupName;                    //班组
    }
    #endregion
    #region ç”Ÿäº§æ±‡æŠ¥è¯¦ç»†ä¿¡æ¯
    public class ICMOReportDetailResponse
    {
        public string code;
        public string msg;
        public List<ICMOReportDetailResponse_Data> data;
    }
    public class ICMOReportDetailResponse_Data
    {
        public string produceReportId;                  //报工记录id
        public string machineName;                      //设备名称
        public string macId;                            //设备id
        public string productName;                      //产品名称
        public string partId;                           //产品id
        public string workTime;                         //工作时间
        public string tour;                             //班次
        public string productNum;                       //生产数据
        public string standardNum;                      //报合格数量
        public string defectiveNum;                     //次品数量
        public string stockInputNum;
        public string remark;                           //备注
/*        public string materialId;     */             //
        public string materialName;                      //材料名称
        public string materialNo;                       //材料编号
        public string producePerson;                    //生产人员
        public string producePersonId;                  //生产人员id
        public string producePersonCode;                //生产人员code
        public string planNo;                           //计划单号
        public string taskNo;                           //任务单号
        public string partNum;                          //产品编号
        public string produceRecordId;                  //生产记录的id
        public string moldNo;                           //模具编号
        public string reportDate;                       //报工日期
        public string reportUser;                       //报工人员
        public string reportUserCode;                   //报工人员编码
        public string auditUser;                        //审核人
        public string auditUserCode;                    //审核人员编号
        public string auditDate;                        //审核日期
        public string piceWage;                         //单价
        public string moldName;                         //模具名称
        public List<string> defectiveReasonNameList;
        public List<string> defectiveNumList;
        public string tourGroupName;            //班组
        public List<ICMOReportDetailResponse_Data_Box> boxs;
    }
    public class ICMOReportDetailResponse_Data_Box
    {
        public string boxCode;                  //箱码
        public string boxActQty;                //数量
    }
    #endregion
    #endregion
    #endregion
    #region å°è¯¸è‘›æ•°æ®åŒæ­¥
@@ -442,6 +555,10 @@
        #region å°è¯¸è‘›æ•°æ®åŒæ­¥å¯†é’¥
        string APPID = "1f2e019a-ff51-f115-ce59-205606c72853";
        string APPPWD = "YYLM01A";
        #endregion
        #region erp数据库名称
        string erpDatabaseName = "AIS20210811135644..";
        #endregion
        #region èŽ·å–æœåŠ¡åœ°å€
@@ -522,6 +639,37 @@
            return res;
        }
        #endregion
        #region æ•°æ®åŒæ­¥
        #region æ•°æ®åŒæ­¥-汇总全部同步
        public async Task<json> dataAnsy()
        {
            try
            {
                //产品档案同步(erp->小诸葛)
                await productInfoSyncFromERPToXZG();
                //生产订单同步(erp->小诸葛)
                await icmoInfoSyncFromERPToXZG();
                //生产汇报单同步(小诸葛->erp)
                await icmoReportInfoSyncFromXZGToERP();
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "同步成功!";
                objJsonResult.data = null;
                return objJsonResult;
            }
            catch(Exception e)
            {
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "同步失败!" + e.Message;
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
        #endregion
        #region äº§å“æ¡£æ¡ˆ
@@ -832,29 +980,22 @@
        #region èŽ·å–ç”Ÿäº§è®¢å•è¯¦ç»†ä¿¡æ¯
        public async Task<ICMODetailResponse> getICMODetailAsync(string url, string key, string planNum)
        {
            try
            {
                //请求地址
                url = url + "/v2/GET/getPlanOrderDetail";
                //请求参数
                Dictionary<string, string> queryParams = new Dictionary<string, string>
            //请求地址
            url = url + "/v2/GET/getPlanOrderDetail";
            //请求参数
            Dictionary<string, string> queryParams = new Dictionary<string, string>
            {
                {"key", key},
                {"planNum",planNum }
            };
                //返回结果
                string responseBody = await DefinedRequestSendMethod.GetDataAsyncByGetRequest(url, queryParams);
            //返回结果
            string responseBody = await DefinedRequestSendMethod.GetDataAsyncByGetRequest(url, queryParams);
                //将字符串转换为对象
                ICMODetailResponse icmoDetailResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<ICMODetailResponse>(responseBody);
            //将字符串转换为对象
            ICMODetailResponse icmoDetailResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<ICMODetailResponse>(responseBody);
                return icmoDetailResponse;
            }catch(Exception e)
            {
                return new ICMODetailResponse();
            }
            return icmoDetailResponse;
        }
        #endregion
@@ -955,7 +1096,7 @@
                //获取金蝶云生产订单数据
                List<ICMO> icmos = new List<ICMO>();
                string sql = @"select 
                               cast(a.FBILLNO as varchar(100)) + '_' + cast(b.FSEQ as varchar(10)) è®¡åˆ’单号
                               cast(a.FBILLNO as varchar(100)) + '_' + cast(b.FSEQ as varchar(10)) + '_' +  cast(b.FENTRYID as varchar(10)) è®¡åˆ’单号
                               ,cast(b.FQTY as int) è®¡åˆ’数量
                               ,m.FNUMBER äº§å“ç¼–号
                               ,convert(varchar(100),b.FPLANSTARTDATE,20) è®¡åˆ’开工日期
@@ -985,7 +1126,7 @@
                               or
                               convert(varchar(100),c.fstartdate ,23) >= convert(varchar(100),dateadd(day,-7,getdate()),23)
                               )
                            and cast(a.FBILLNO as varchar(100)) + '_' + cast(b.FSEQ as varchar(10)) = 'MO000269_1'";
                            --and cast(a.FBILLNO as varchar(100)) + '_' + cast(b.FSEQ as varchar(10)) = 'MO000269_1'";
                DataSet ds = oCN.RunProcReturn(sql, "AIS20210811135644..T_PRD_MO");
                if (ds != null && ds.Tables.Count > 0)
                {
@@ -1090,6 +1231,768 @@
        }
        #endregion
        #endregion
        #region ç”Ÿäº§æ±‡æŠ¥
        #region èŽ·å–å·²å®¡æ ¸çš„æŠ¥å·¥è®°å½•ä¿¡æ¯åˆ—è¡¨ä¿¡æ¯
        public async Task<ICMOReportListResponse> getICMOReportListAsync()
        {
            //请求地址
            string url = await getServerAddressAsync() + "/v2/GET/getAuditedProduceReportList";
            string token = await getTokenAsync();
            //请求参数
            Dictionary<string, string> queryParams = new Dictionary<string, string>
            {
                {"key", token},
                {"indexPage", "1"},
                //{"startDate", DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd")},
                //{"endDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")},
                {"sidx", "reportDate"},
                {"sord", "desc"},
                //{"tour", "白班"},
                {"type", "1"},
                {"reportStartDate", DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd HH:mm:ss")},
                {"reportEndDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}
            };
            //返回结果
            string responseBody = await DefinedRequestSendMethod.GetDataAsyncByGetRequest(url, queryParams);
            //将字符串转换为对象
            ICMOReportListResponse icmoReportListResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<ICMOReportListResponse>(responseBody);
            return icmoReportListResponse;
        }
        #endregion
        #region èŽ·å–ç”Ÿäº§æ±‡æŠ¥è¯¦ç»†ä¿¡æ¯
        public async Task<ICMOReportDetailResponse> getICMOReportDetailAsync(string url, string key, string reportId)
        {
            //请求地址
            url = url + "/v2/GET/getProduceRecordReport";
            //请求参数
            Dictionary<string, string> queryParams = new Dictionary<string, string>
            {
                {"key", key},
                {"reportId",reportId }
            };
            //返回结果
            string responseBody = await DefinedRequestSendMethod.GetDataAsyncByGetRequest(url, queryParams);
            //将字符串转换为对象
            ICMOReportDetailResponse icmoReportDetailResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<ICMOReportDetailResponse>(responseBody);
            return icmoReportDetailResponse;
        }
        #endregion
        #region ç”Ÿäº§æ±‡æŠ¥å®šæ—¶åŒæ­¥_从小诸葛到ERP
        public async Task<json> icmoReportInfoSyncFromXZGToERP()
        {
            string sErrMsg = "";
            try
            {
                //请求地址
                string url = await getServerAddressAsync();
                string token = await getTokenAsync();
                ICMOReportListResponse iCMOReportListResponse = await getICMOReportListAsync();
                List<ICMOReportListResponse_Data_Data> iCMOReportList = new List<ICMOReportListResponse_Data_Data>();
                for(int i = 0; i < iCMOReportListResponse.data.Count; i++)
                {
                    for(int j=0;j< iCMOReportListResponse.data[i].data.Count; j++)
                    {
                        string sql = "select * from AIS20210811135644..T_PRD_MORPT where FBillNo = '" + iCMOReportListResponse.data[i].data[j].produceReportId + "'";
                        DataSet ds_erp = oCN.RunProcReturn(sql, "AIS20210811135644..T_PRD_MORPT");
                        if(ds_erp!=null&ds_erp.Tables[0].Rows.Count == 0)
                        {
                            iCMOReportList.Add(iCMOReportListResponse.data[i].data[j]);
                        }
                    }
                }
                ////金蝶云生产汇报单:批量同步
                //ICMOReportListResponse_Data_Data data = new ICMOReportListResponse_Data_Data();
                //data.planNo = "MO000269_1_100483";
                //data.reportDate = "2025-04-27 00:00:00";
                //data.standardNum = "1";
                //data.produceReportId = "1234321";
                //iCMOReportList.Add(data);
                objJsonResult = set_SaveICMOReportBillList(iCMOReportList);
                //objJsonResult.code = "1";
                //objJsonResult.count = 1;
                //objJsonResult.Message = "同步成功!";
                //objJsonResult.data = null;
                return objJsonResult;
            }
            catch (Exception e)
            {
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "同步失败!" + e.Message;
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
        #region ç”Ÿäº§æ±‡æŠ¥ æ‰¹é‡æ–°å¢ž
        public json set_SaveICMOReportBillList(List<ICMOReportListResponse_Data_Data> iCMOReportList)
        {
            string sErrMsg = "";
            string sRemark = "";
            string sRemark_errAudit = "";
            try
            {
                for (int i = 0; i < iCMOReportList.Count; i++)
                {
                    objJsonResult = set_SaveICMOReportBill(iCMOReportList[i]);
                    if (objJsonResult.code == "1" && objJsonResult.count == 1)
                    {
                        sRemark += objJsonResult.Message;
                    }else if(objJsonResult.code == "1" && objJsonResult.count == 0)
                    {
                        sRemark_errAudit += objJsonResult.Message;
                    }
                    else
                    {
                        sErrMsg += objJsonResult.Message;
                    }
                }
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "【同步并审核成功信息】:" + sRemark + ";【同步成功但审核失败信息】:" + sRemark_errAudit + ";【同步失败信息:】:" + sErrMsg  ;  //成功!
                objJsonResult.data = null;
                return objJsonResult;
            }
            catch (Exception e)
            {
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "生产汇报单上传失败!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
        #region ç”Ÿäº§æ±‡æŠ¥ æ–°å¢ž
        public json set_SaveICMOReportBill(ICMOReportListResponse_Data_Data data)
        {
            string sErrMsg = "";
            //用于记录过程数据,作为日记数据
            string sRemark = "";
            try
            {
                try
                {
                    #region ä»Žé…ç½®æ–‡ä»¶èŽ·å– CLOUD网址、账套信息、登录用户、登录密码
                    //登录
                    string HReturn;
                    bool bLogin = false;
                    var loginRet = InvokeHelper.LoginUser(data.reportUser);
                    string dbId = Pub_Class.ClsPub.sCLOUDAcc; //AotuTest117
                    var isSuccess = JObject.Parse(loginRet)["LoginResultType"].Value<int>();
                    if (isSuccess <= 0)
                    {
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = loginRet;
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                    else
                    {
                        bLogin = true;
                        sRemark = sRemark + " ï¼›èŽ·å–éªŒè¯CLOUD账号密码" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff");
                    }
                    #endregion
                    #region åˆ¤æ–­ç”Ÿäº§è®¢å•状态 æ˜¯å¦ä¸º å®Œå·¥ æˆ–结案
                    string[] planNoSplit = data.planNo.Split('_');
                    string HICMOBillNo = planNoSplit[0];
                    string HICMOSEQ = planNoSplit[1];
                    string HICMOEntryID = planNoSplit[2];
                    string sql_judgeICMOStatus = @"select distinct
                                                   mo.FBILLNO
                                                from AIS20210811135644..T_PRD_MO mo
                                                inner join AIS20210811135644..T_PRD_MOENTRY_A a on mo.FID=a.FID
                                                where a.FSTATUS in (5,6)
                                                and mo.FBILLNO = '" + HICMOBillNo + "' " +
                                                "and a.FENTRYID = " + HICMOEntryID;
                    DataSet Ds2;
                    Ds2 = oCN.RunProcReturn(sql_judgeICMOStatus, "AIS20210811135644..T_PRD_MO");
                    if (Ds2 != null && Ds2.Tables[0].Rows.Count > 0)
                    {
                        sErrMsg = "生产订单【 " + HICMOBillNo + "】业务状态已完工不允许汇报!";
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = sErrMsg;
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                    #endregion
                    #region èŽ·å–é‡‘è¶äº‘ç”Ÿæˆå•æ®json
                    string json = getErpJSON(data);
                    sRemark = sRemark + " ï¼›èŽ·å–CLOUD单据API递入值" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff");
                    #endregion
                    #region ç”Ÿæˆé‡‘蝶云单据
                    if (bLogin)
                    {
                        var result = InvokeHelper.Save("PRD_MORPT", json);
                        sRemark = sRemark + " ï¼›ç”ŸæˆCLOUD单据" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff");
                        //获取金蝶云单据生成返回信息
                        HReturn = result.ToString();
                        if (HReturn.Contains("\"IsSuccess\":false") == true)
                        {
                            sErrMsg = "生成生产汇报单失败!" + HReturn;
                            LogService.Write("生成生产汇报单(源单:生产订单)失败!" + HReturn + json);   //写入txt文本
                            objJsonResult.code = "0";
                            objJsonResult.count = 0;
                            objJsonResult.Message = sErrMsg;  //成功!
                            objJsonResult.data = null;
                            return objJsonResult;
                        }
                        else
                        {
                            sRemark = sRemark + json;
                        }
                    }
                    else
                    {
                        sErrMsg = "生成生产汇报单失败!金蝶云登录失败!";
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = sErrMsg;  //成功!
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                    #endregion
                }
                catch (Exception e)
                {
                    sErrMsg = "生成生产汇报单失败!" + e.Message;
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = sErrMsg;
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                #region å®¡æ ¸å•据
                try
                {
                    //提交、审核金蝶云单据
                    #region ä»Žé…ç½®æ–‡ä»¶èŽ·å– CLOUD网址、账套信息、登录用户、登录密码
                    //登录
                    string HReturn = "";
                    bool bLogin = false;
                    var loginRet = InvokeHelper.LoginUser(data.auditUser);
                    string dbId = Pub_Class.ClsPub.sCLOUDAcc; //AotuTest117
                    var isSuccess = JObject.Parse(loginRet)["LoginResultType"].Value<int>();
                    if (isSuccess <= 0)
                    {
                        objJsonResult.code = "0";
                        objJsonResult.count = 0;
                        objJsonResult.Message = loginRet;
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                    else
                    {
                        bLogin = true;
                        sRemark = sRemark + " ï¼›èŽ·å–éªŒè¯CLOUD账号密码" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff");
                    }
                    #endregion
                    if (bLogin)
                    {
                        ////提交单据
                        string sJson2 = "{\"CreateOrgId\":0,\"Numbers\":[\"" + data.produceReportId + "\"]}";
                        var result2 = InvokeHelper.Submit("PRD_MORPT", sJson2);
                        //审核单据
                        string sJson3 = "{\"CreateOrgId\":0,\"Numbers\":[\"" + data.produceReportId + "\"]}";
                        var result3 = InvokeHelper.Audit("PRD_MORPT", sJson3);
                        HReturn = result2.ToString() + "," + result3.ToString();
                        if (HReturn.Contains("\"IsSuccess\":false") == true)
                        {
                            LogService.Write("审核单据失败" + sRemark);
                            sErrMsg = "生成生产汇报单成功,审核单据失败!" + HReturn;
                            objJsonResult.code = "1";
                            objJsonResult.count = 0;
                            objJsonResult.Message = sErrMsg;
                            objJsonResult.data = null;
                            return objJsonResult;
                        }
                        else
                        {
                            LogService.Write("生成并审核生产汇报单(源单:生产订单)成功!" + sRemark);
                            sErrMsg = "生成并审核生产汇报单成功!单据号为:" + data.produceReportId;
                            objJsonResult.code = "1";
                            objJsonResult.count = 1;
                            objJsonResult.Message = sErrMsg;
                            objJsonResult.data = null;
                            return objJsonResult;
                        }
                    }
                    else
                    {
                        sErrMsg = "审核生产汇报单失败!金蝶云登录失败!";
                        objJsonResult.code = "1";
                        objJsonResult.count = 0;
                        objJsonResult.Message = sErrMsg;
                        objJsonResult.data = null;
                        return objJsonResult;
                    }
                }
                catch (Exception e)
                {
                    sErrMsg = "审核生产汇报单失败!" + e.Message;
                    objJsonResult.code = "1";
                    objJsonResult.count = 0;
                    objJsonResult.Message = sErrMsg;
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                #endregion
            }catch(Exception e0)
            {
                sErrMsg = "生成生产汇报单失败!" + e0.Message;
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = sErrMsg;
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
        #region æ ¹æ®èŽ·å–çš„æŠ¥å·¥ä¿¡æ¯ï¼Œæ‹¼æŽ¥json语句
        public string getErpJSON(ICMOReportListResponse_Data_Data data)
        {
            //try
            //{
                //data.planNo = "MO000269_1_100483";
                //data.reportDate = "2025-04-27 00:00:00";
                //data.standardNum = "1";
                //data.produceReportId = "1234321";
                // èŽ·å–ç”Ÿäº§æ±‡æŠ¥çš„æºå•ä¿¡æ¯
                string[] planNoSplit = data.planNo.Split('_');
                string HICMOBillNo = planNoSplit[0];
                string HICMOSEQ = planNoSplit[1];
                string HICMOEntryID = planNoSplit[2];
                //根据报工信息,获取相关信息
                string sql1 = @"select
                               isnull(org1.hnumber,'') FPRDORGIDNumber
                               ,ISNULL(org1.HItemID,0) FPRDORGID
                               ,isnull(moSub.FPRODUCTTYPE,'1') FPRODUCTTYPE
                               ,ISNULL(pr.HNumber,'') FAUXPROPNumber
                               ,ISNULL(unit.HNumber,'') FUNITNumber
                               ,ISNULL(dept.HNumber,'') FWORKSHOPNumber
                               ,isnull(moSub.FMTONO,'') FMTONO
                               ,isnull(moSubA.FCHECKPRODUCT,'false') FCHECKPRODUCT
                               ,isnull(mo.FISENTRUST,'false') FISENTRUST
                               ,isnull(moSub.FPROJECTNO,'') FPROJECTNO
                               ,isnull(mp.FPERUNITSTANDHOUR,0) FSTDMANHOUR
                               ,isnull(mp.FSTDLABORPREPARETIME,0) FHRPREPARETIME
                               ,isnull(mp.FSTDMACHINEPREPARETIME,0) FMACPREPARETIME
                               ,isnull(mo.FID,0) FSRCINTERID
                               ,isnull(moSub.FSEQ,0) FSRCENTRYSEQ
                               ,isnull(mo.FID,0) FMOID
                               ,isnull(moSub.FENTRYID,0) FMOENTRYID
                               ,isnull(unit1.HNumber,'') FBASEUNITID
                               ,isnull(org1.HNumber,'') FSTOCKINORGID
                               ,isnull(moSubA.FINSTOCKOWNERTYPEID,'') FOWNERTYPEID
                               ,isnull(org2.HNumber,'') FOWNERID
                               ,isnull(moSub.FCOSTRATE,0) FCOSTRATE
                               ,isnull('','') FSTOCKID
                               ,isnull(moSubA.FISBACKFLUSH,'false') FISBACKFLUSH
                               ,isnull(moSub.FENTRYID,0) FMOMAINENTRYID
                               ,isnull(moSubA.FQAIP,'') FQAIP
                               ,isnull(moSubA.FREQSRC,'') FREQSRC
                               ,isnull(moSub.FSALEORDERNO,'') FREQBILLNO
                               ,isnull(moSub.FSALEORDERID,0) FREQBILLID
                               ,isnull(moSub.FSALEORDERENTRYSEQ,0) FREQENTRYSEQ
                               ,isnull(moSub.FSALEORDERENTRYID,0) FREQENTRYID
                               ,isnull(moSubA.FINSTOCKTYPE,'1') FINSTOCKTYPE
                            from AIS20210811135644..T_PRD_MO mo with(nolock)
                            left join AIS20210811135644..T_PRD_MOENTRY moSub with(nolock) on mo.FID=moSub.FID
                            left join AIS20210811135644..T_PRD_MOENTRY_A moSubA with(nolock) on moSubA.FID=moSub.FID and moSubA.FENTRYID=moSub.FENTRYID
                            left join Xt_ORGANIZATIONS org1 with(nolock) on mo.FPRDORGID=org1.HItemID         --生产组织
                            left join xt_ORGANIZATIONS org2 with(nolock) on moSubA.FINSTOCKOWNERID=org2.HItemID      --入库货主
                            left join AIS20210811135644..t_BD_MaterialProduce mp with(nolock) on moSub.FMATERIALID=mp.FMATERIALID   --物料生产信息
                            left join Gy_Unit as unit with(nolock) on moSub.FUNITID = unit.HItemID
                            left join Gy_Unit as unit1 with(nolock) on moSub.FBASEUNITID = unit1.HItemID
                            left join Gy_Property pr on moSub.FAUXPROPID = pr.HItemID
                            left join Gy_Department dept on moSub.FWORKSHOPID = dept.HItemID
                            where
                            mo.FBillNo = '" + HICMOBillNo + "' " +
                                " and moSub.FENTRYID = " + HICMOEntryID;
                DataSet jsonData = oCN.RunProcReturn(sql1, "AIS20210811135644..T_PRD_MO");
                if (jsonData == null || jsonData.Tables[0].Rows.Count == 0)
                {
                    return "";
                }
                string FBillType = "SCHBD01_SYS";                                                                               //单据类型
                string FPRDORGIDNumber = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FPRDORGIDNumber"]);             //生产组织编码
                string FPRDORGID = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FPRDORGID"]);                         //生产组织编码
                string FAUXPROPNumber = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FAUXPROPNumber"]);               //辅助属性
                string FIsNew = "false";                                                                                        //是否新增行
                string FPRODUCTTYPE = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FPRODUCTTYPE"]);                   //产品类型
                string FREPORTTYPE = "";                                                                                        //生产汇报类型
                string FUNITNumber = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FUNITNumber"]);                     //单位编码
                string FWORKSHOPNumber = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FWORKSHOPNumber"]);             //部门
                string FMTONO = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FMTONO"]);                               //计划跟踪号
                string FCHECKPRODUCT = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FCHECKPRODUCT"]);                 //产品检验
                string FISENTRUST = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FISENTRUST"]);                       //组织委托加工
                string FSRCBILLTYPE = "PRD_MO";                                                                                 //源单类型
                string FPROJECTNO = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FPROJECTNO"]);                       //项目编号
                string FSTDMANHOUR = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FSTDMANHOUR"]);                     //单位标准工时
                string FHRPREPARETIME = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FHRPREPARETIME"]);               //人员准备工时
                string FMACPREPARETIME = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FMACPREPARETIME"]);             //机器准备工时
                string FSRCINTERID = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FSRCINTERID"]);                     //源单内码
                string FSRCENTRYSEQ = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FSRCENTRYSEQ"]);                   //源单行号
                string FMOID = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FMOID"]);                                 //生产订单内码
                string FMOENTRYID = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FMOENTRYID"]);                       //生产订单分录号
                string FBASEUNITID = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FBASEUNITID"]);                     //基本单位
                string FSTOCKINORGID = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FSTOCKINORGID"]);                 //入库组织
                string FBOMID = "";                               //BOM版本
                string FOWNERTYPEID = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FOWNERTYPEID"]);                   //货主类型
                string FOWNERID = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FOWNERID"]);                           //货主
                string FSTOCKID = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FSTOCKID"]);                           //仓库
                string FCOSTRATE = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FCOSTRATE"]);                         //成本权重
                string FSNUNITID = "";                         //序列号单位
                string FISBACKFLUSH = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FISBACKFLUSH"]);                   //倒冲领料
                string FMOMAINENTRYID = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FMOMAINENTRYID"]);               //生产订单主产品分录
                string FQAIP = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FQAIP"]);                                 //紧急放行
                string FREQSRC = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FREQSRC"]);                             //需求来源
                string FREQBILLNO = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FREQBILLNO"]);                       //需求单据
                string FREQBILLID = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FREQBILLID"]);                       //需求单据内码
                string FREQENTRYSEQ = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FREQENTRYSEQ"]);                   //需求单据行号
                string FREQENTRYID = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FREQENTRYID"]);                     //需求单据分录内码
                string FINSTOCKTYPE = Pub_Class.ClsPub.isStrNull(jsonData.Tables[0].Rows[0]["FINSTOCKTYPE"]);                   //供下推入库单使用-入库类型
                string FEntity_Link_FFlowId = "f6e6eec3-5267-4f02-8593-b633da508a72";   //业务流程图
                string FEntity_Link_FFlowLineId = "3";                                  //推进路线
                string FEntity_Link_FRuleId = "PRD_MO2MORPT";                           //转换规则
                string FEntity_Link_FSTableName = "T_PRD_MOENTRY";                      //源单表
                string FBFLOWID = "f6e6eec3-5267-4f02-8593-b633da508a72";             //业务流程
                //获取生产汇报类型
                string sql2 = @"select top(1)
                               FNUMBER FREPORTTYPE
                            from AIS20210811135644..T_PRD_REPORTTYPE with(nolock)
                            Where FUSEORGID = " + FPRDORGID +
                                " and FISDEFREPTYPE=1";
                DataSet jsonData2 = oCN.RunProcReturn(sql2, "T_PRD_REPORTTYPE");
                if (jsonData2 != null && jsonData2.Tables[0].Rows.Count > 0)
                {
                    FREPORTTYPE = Pub_Class.ClsPub.isStrNull(jsonData2.Tables[0].Rows[0]["FREPORTTYPE"]);
                }
                //最终语句
                string json = "";
                string sJson_ZYMESFLAG = "";    //生产汇报单同步MES标记
                string sJson_MainCustom = "";   //主表自定义字段
                string sJson_Date = "";         //单据日期
                //sJson_MainCustom = Pub_Class.ClsPub.isStrNull(Ds.Tables[0].Rows[0]["MainCustom"]);
                //单据日期
                sJson_Date = ",\"FDATE\":\"" + data.reportDate + "\"";
                sJson_ZYMESFLAG = "";
                string sJson_Main =
                    "{" +
                        "\"Creator\":\"\"" +
                        ",\"NeedUpDateFields\":[]" +
                        ",\"NeedReturnFields\":[]" +
                        ",\"IsDeleteEntry\":\"True\"" +
                        ",\"SubSystemId\":\"\"" +
                        ",\"IsVerifyBaseDataField\":\"false\"" +
                        ",\"IsEntryBatchFill\":\"false\"" +
                        ",\"ValidateFlag\":\"True\"" +
                        ",\"NumberSearch\":\"True\"" +
                        ",\"InterationFlags\":\"\"" +
                        ",\"Model\": " +
                            "{ " +
                                "\"FBILLNO\":\"" + data.produceReportId + "\"" +
                                //",\"FID\":\"" + oMain.HInterID.ToString() + "\"" +
                                ",\"FBillType\":" +
                                    "{" +
                                        "\"FNumber\":\"" + FBillType + "\"" +
                                    "}" +
                                ",\"FDocumentStatus\":\"\"" +
                                sJson_Date +
                                ",\"FPRDORGID\":" +
                                    "{" +
                                        "\"FNumber\":\"" + FPRDORGIDNumber + "\"" +
                                    "}" +
                                //",\"FWorkshipIdH\":" +
                                //    "{" +
                                //        "\"FNumber\":\"\"" +
                                //    "}" +
                                //",\"FDescription\":\"\"" +
                                sJson_ZYMESFLAG +
                                sJson_MainCustom +
                                ",\"FEntity\": [   ";
                string sJson_Entry = "";
                string sJson_BatchNo = "";
                string sJson_StockPlace = "";
                string sJson_FProduceDate = "";     //生产日期
                string sJson_FExpiryDate = "";      //有效期至
                string sJson_EntryCustom = "";
                string sJson_FAUXPROPID = "";
                string sJson_SubCustom = "";    //子表自定义字段
                //子表自定义字段
                //sJson_SubCustom = Pub_Class.ClsPub.isStrNull(Ds.Tables[1].Rows[i]["SubCustom"]);
                ////是否启用批次管理
                //if (Pub_Class.ClsPub.isStrNull(Ds.Tables[1].Rows[i]["HISBATCHMANAGE"]) == "1")
                //{
                //    sJson_BatchNo = "  \"FLOT\": {\"FNumber\":\"" + Pub_Class.ClsPub.isStrNull(Ds.Tables[1].Rows[i]["FLOT"]) + "\"},    \"FLOT_TEXT\":\"" + Pub_Class.ClsPub.isStrNull(Ds.Tables[1].Rows[i]["FLOT"]) + "\"  , ";
                //}
                //else
                //{
                //    sJson_BatchNo = "";
                //}
                ////是否启用保质期控制
                //if (Pub_Class.ClsPub.isStrNull(Ds.Tables[1].Rows[i]["FISKFPERIOD"]) == "1")
                //{
                //    sJson_FProduceDate = " \"FProduceDate\":\"" + Pub_Class.ClsPub.isStrNull(Ds.Tables[1].Rows[i]["FProduceDate"]) + "\",";
                //    sJson_FExpiryDate = " \"FExpiryDate\":\"" + Pub_Class.ClsPub.isStrNull(Ds.Tables[1].Rows[i]["FExpiryDate"]) + "\",";
                //}
                //else
                //{
                //    sJson_FProduceDate = "";
                //    sJson_FExpiryDate = "";
                //}
                //辅助属性
                sJson_FAUXPROPID = ", \"FAUXPROPID\":" +
                                        "{" +
                                            "\"FAUXPROPID__FF100002\":" +
                                                "{" +
                                                    "\"FNumber\":\"" + FAUXPROPNumber + "\"" +
                                                "}" +
                                        "}";
                ////仓位
                //if (Pub_Class.ClsPub.isStrNull(Ds.Tables[1].Rows[i]["FSTOCKLOCID"]) == "")
                //{
                //    sJson_StockPlace = "";
                //}
                //else
                //{
                //    sJson_StockPlace = Pub_Class.ClsPub.isStrNull(Ds.Tables[1].Rows[i]["FSTOCKLOCID"]) + "\"}},";
                //}
                //自定义字段处理
                sJson_EntryCustom = "";
                sJson_Entry = sJson_Entry +
                    " {" +
                        //"\"FEntryID\":" + Pub_Class.ClsPub.isStrNull(Ds.Tables[1].Rows[i]["HEntryID"]) + "," +
                        " \"FSRCENTRYID\":" + HICMOEntryID + "" +
                        ", \"FIsNew\":" + FIsNew + "" +
                        ", \"FMATERIALID\":" +
                            "{" +
                                "\"FNumber\":\"" + data.partNum + "\"" +
                            "}" +
                        ", \"FPRODUCTTYPE\":\"" + FPRODUCTTYPE + "\"" +
                        ", \"FREPORTTYPE\":" +
                            "{" +
                                "\"FNumber\":\"" + FREPORTTYPE + "\"" +
                            "}" +
                        ", \"FUNITID\":" +
                            "{" +
                                "\"FNumber\":\"" + FUNITNumber + "\"" +
                            "}" +
                        ", \"FWORKSHIPID\":" +
                            "{" +
                                "\"FNumber\":\"" + FWORKSHOPNumber + "\"" +
                            "}" +
                        //", \"FShiftGroupId\":{\"FNumber\":\"\"}" +
                        sJson_BatchNo +
                        //\"FDeptId\":{\"FNumber\":\"\"},
                        //sJson_StockPlace +          //仓位移到下方
                        ",  \"FMTONO\":\"" + FMTONO + "\"" +
                        ", \"FCHECKPRODUCT\":" + FCHECKPRODUCT + "" +
                        ", \"FISENTRUST\":" + FISENTRUST + "" +
                        ", \"FSRCBILLTYPE\":\"" + FSRCBILLTYPE + "\"" +
                        ", \"FMOBILLNO\":\"" + HICMOBillNo + "\"" +
                        //", \"FAUXPROPID\":" +
                        //    "{" +
                        //        "\"FAUXPROPID__FF100002\":" +
                        //            "{" +
                        //                "\"FNumber\":\"" + Pub_Class.ClsPub.isStrNull(Ds.Tables[1].Rows[i]["FAUXPROPID"]) + "\"" +
                        //            "}" +
                        //    "}" +
                        sJson_FAUXPROPID +
                        //", \"FHumanQty\":\"0\"" +
                        ", \"FSRCBILLNO\":\"" + HICMOBillNo + "\"" +
                        //", \"FMachineQty\":\"0\"" +
                        //", \"FMaterialUnitID\":" +
                        //    "{" +
                        //        "\"FNumber\":\"\"" +
                        //    "}" +
                        //", \"FStartTime\":\"1900-01-01\"" +
                        //", \"FEndTime\":\"1900-01-01\"" +
                        //", \"FTimeUnitId\":\"\"" +
                        ", \"FMOENTRYSEQ\":" + HICMOSEQ + "" +
                        //", \"FSTANDHOURUNITID\":\"" + Pub_Class.ClsPub.isStrNull(Ds.Tables[1].Rows[i]["FSTANDHOURUNITID"]) + "\"" +
                        ", \"FPROJECTNO\":\"" + FPROJECTNO + "\"" +
                        ", \"FSTDMANHOUR\":" + FSTDMANHOUR + "" +
                        ", \"FHRPREPARETIME\":" + FHRPREPARETIME + "" +
                        //", \"FHrWorkTime\":\"0\"" +
                        ", \"FMACPREPARETIME\":" + FMACPREPARETIME + "" +
                        //",\"FMacWorkTime\":\"0\"" +
                        //",\"FDescriptionE\":\"\"" +
                        ", \"FSRCINTERID\":" + FSRCINTERID + "" +
                        ", \"FSRCENTRYSEQ\":" + FSRCENTRYSEQ + "" +
                        ", \"FMOID\":" + FMOID + "" +
                        ", \"FMOENTRYID\":" + FMOENTRYID + "" +
                        ", \"FBASEUNITID\":" +
                            "{" +
                                "\"FNumber\":\"" + FBASEUNITID + "\"" +
                            "}" +
                        ", \"FSTOCKINORGID\":" +
                            "{" +
                                "\"FNumber\":\"" + FSTOCKINORGID + "\"" +
                            "}" +
                        ", \"FBOMID\":" +
                            "{" +
                                "\"FNumber\":\"" + FBOMID + "\"" +
                            "}" +
                        ", \"FOWNERTYPEID\":\"" + FOWNERTYPEID + "\"" +
                        ", \"FOWNERID\":" +
                            "{" +
                                "\"FNumber\":\"" + FOWNERID + "\"" +
                            "}" +
                        ", \"FSTOCKID\":" +
                            "{" +
                                "\"FNumber\":\"" + FSTOCKID + "\"" +
                            "}" +
                        ", \"FCOSTRATE\":" + FCOSTRATE + "" +
                        ", \"FSNUNITID\":" +
                            "{" +
                                "\"FNumber\":\"" + FSNUNITID + "\"" +
                            "}" +
                        //", \"FSNQty\":" + Pub_Class.ClsPub.isStrNull(Ds.Tables[1].Rows[i]["FSNQty"]) + "" +
                        sJson_FProduceDate +
                        sJson_FExpiryDate +
                        ", \"FISBACKFLUSH\":" + FISBACKFLUSH + "" +
                        ", \"FMOMAINENTRYID\":" + FMOMAINENTRYID + "" +
                        ", \"FQAIP\":\"" + FQAIP + "\"" +
                        ", \"FREQSRC\":\"" + FREQSRC + "\"" +
                        ", \"FREQBILLNO\":\"" + FREQBILLNO + "\"" +
                        ", \"FREQBILLID\":" + FREQBILLID + "" +
                        ", \"FREQENTRYSEQ\":" + FREQENTRYSEQ + "" +
                        ", \"FREQENTRYID\":" + FREQENTRYID + "" +
                        ", \"FBASEQUAQTY\":" + data.standardNum + "" +
                        ", \"FQUAQTY\":" + data.standardNum + "" +
                        ", \"FBASEFINISHQTY\":" + data.standardNum + "" +
                        ", \"FFINISHQTY\":" + data.standardNum + "" +
                        ", \"FInStockType\":\"" + FINSTOCKTYPE + "\"" +
                        sJson_StockPlace +
                        sJson_EntryCustom +
                        sJson_SubCustom +
                        //",\"FSerialSubEntity\":" +
                        //    "[" +
                        //        "{" +
                        //            "\"FDetailID\":\"0\"" +
                        //            ",\"FQCMaterialId\":" +
                        //                "{" +
                        //                    "\"FNUMBER\":\"\"" +
                        //                "}" +
                        //            ",\"FInspectResult\":\"\"" +
                        //            ",\"FQcAuxPropId\":" +
                        //                "{" +
                        //                    "\"FQCAUXPROPID__FF100002\":" +
                        //                        "{" +
                        //                            "\"FNumber\":\"\"" +
                        //                        "}" +
                        //                "}" +
                        //            ",\"FQCQty\":\"0\"" +
                        //            ",\"FSerialNo\":\"\"" +
                        //            ",\"FSerialId\":" +
                        //                "{" +
                        //                    "\"FNUMBER\":\"\"" +
                        //                "}" +
                        //            ",\"FQCStockInSelQty\":\"0\"" +
                        //            ",\"FSerialNote\":\"\"" +
                        //            ",\"FBaseQCQty\":\"0\"" +
                        //            ",\"FBaseQCStockInSelQty\":\"0\"" +
                        //        "}" +
                        //    "]"
                        ", \"FEntity_Link\": " +
                            "[" +
                                "{" +
                                    " \"FEntity_Link_FFlowId\":\"" + FEntity_Link_FFlowId + "\"" +
                                    ", \"FEntity_Link_FFlowLineId\":\"" + FEntity_Link_FFlowLineId + "\"" +
                                    ", \"FEntity_Link_FRuleId\":\"" + FEntity_Link_FRuleId + "\"" +
                                    ", \"FEntity_Link_FSTableName\":\"" + FEntity_Link_FSTableName + "\"" +
                                    ", \"FEntity_Link_FSBillId\":\"" + FMOID + "\"" +
                                    ", \"FEntity_Link_FSId\":\"" + FMOENTRYID + "\"" +
                                " }" +
                            " ]" +
                        ", \"FBFLOWID\":" +
                            "{" +
                                "\"FID\":\"" + FBFLOWID + "\"" +
                            "}" +
                    "}";
                string sJson_End = "  ]  }}";
                json = sJson_Main + sJson_Entry + sJson_End;
                return json;
            //}catch(Exception e)
            //{
            //    return e.Message;
            //}
        }
        #endregion
        #endregion
    }
    #endregion