using NFine.Data.Extensions;
using System;
using System.Data;
using NFine.Code;
using NFine.Repository;
using NFine.Domain._03_Entity.SRM;
using System.Data.SqlClient;
using System.Text;

namespace NFine.Application.WMS
{
    public class UpdateBinCodeApp : RepositoryFactory<ICSVendor>
    {
        public string SetData_PR(String savePath, string Year)
        {
            //数据获取
            try
            {

                string WorkPoint = NFine.Code.OperatorProvider.Provider.GetCurrent().Location;
                string MUSER = NFine.Code.OperatorProvider.Provider.GetCurrent().UserCode;
                string MUSERNAME = NFine.Code.OperatorProvider.Provider.GetCurrent().UserName;
                SqlConnection conn = SqlHelper.GetDataCenterConn();
                DataTable data = FileToExcel.ExcelToTable(savePath);
                string sql1 = "";

                if (data != null && data.Rows.Count > 0)
                {
                    foreach (DataRow dr in data.Rows)
                    {
                        string lotno = dr["物料条码"].ToString().ToUpper();
                        string binCode = dr["库位"].ToString().ToUpper();
                        //查询条码是否存在,并且获取条码初始仓库
                        string sql = $@"SELECT WarehouseCode,	LocationCode,LotNo FROM ICSWareHouseLotInfo WHERE LotNo='{lotno}' AND WorkPoint='{WorkPoint}' ";
                        DataTable dataset = Repository().FindDataSetBySql(sql).Tables[0];
                        if (dataset.Rows.Count == 0)
                        {
                            return "条码" + lotno + "不存在";
                        }
                        else
                        {
                            //查询修改的库位
                            string binSql = $@"SELECT WarehouseCode,LocationCode FROM ICSLocation a
LEFT JOIN ICSWarehouse b ON a.WHID=b.ID AND a.WorkPoint=b.WorkPoint
WHERE a.LocationCode='{binCode}' AND a.WorkPoint='{WorkPoint}' ";
                            DataTable binDt = Repository().FindDataSetBySql(binSql).Tables[0];
                            if (binDt.Rows.Count == 0)
                            {
                                return "库位" + binCode + "不存在";
                            }
                            else
                            {
                                string newWHCode = binDt.Rows[0]["WarehouseCode"].ToString().ToUpper();
                                if (newWHCode != dataset.Rows[0]["WarehouseCode"].ToString().ToUpper())
                                {
                                    return "条码" + lotno + "原仓库" + dataset.Rows[0]["WarehouseCode"].ToString().ToUpper() + "和修改后仓库" + newWHCode + "不一致";
                                }
                                else
                                {
                                    ///添加日志
                                    sql1 += @"
                        INSERT INTO ICSWareHouseLotInfoLog(ID,Identification,TransCode,TransSequence,LotNo,InvCode,
                        FromWarehouseCode,FromLocationCode,ToWarehouseCode,ToLocationCode,Quantity,
                        Memo,Lock,TransType,BusinessCode,ERPUpload,ERPID,
                        ERPDetailID,ERPCode,ERPSequence,MUSER,MUSERName,
                        MTIME,WorkPoint,EATTRIBUTE1)
                        SELECT NEWID(),'{3}','{4}','{5}',a.LotNo ,a.InvCode ,
                        c.WarehouseCode,c.LocationCode,'{8}','{9}',c.Quantity,
                        '','0','{6}','{7}','0','',
                        '','','',f.F_Account ,f.F_RealName ,
                        SYSDATETIME() ,a.WorkPoint ,''
                        FROM ICSInventoryLot a
                        INNER JOIN ICSWareHouseLotInfo c ON a.LotNo=c.LotNo AND a.WorkPoint=c.WorkPoint
                        INNER JOIN Sys_SRM_User f ON f.F_Account='{2}' AND a.WorkPoint=f.F_Location
                        WHERE a.LotNo='{0}' AND a.WorkPoint='{1}'
                        ";
                                    ///修改库位
                                    sql1 += @" UPDATE ICSWareHouseLotInfo SET WarehouseCode='{8}',LocationCode='{9}' WHERE LotNo='{0}' AND WorkPoint='{1}' ";


                                    sql1 = string.Format(sql1, lotno, WorkPoint, MUSER, Guid.NewGuid().ToString(), "", "", "7", "29", newWHCode, binCode);

                                }
                            }
                        }
                    }

                    if (!string.IsNullOrWhiteSpace(sql1))
                    {
                        StringBuilder sqlb = new StringBuilder(sql1);
                        Repository().ExecuteBySql(sqlb);
                    }
                }
                else
                {
                    return "无有效的导入数据。";

                }
                return "true";

            }
            catch (Exception ex)
            {
                return ex.Message;

            }

        }

        public string GetNewid()
        {
            string sql = "select newid() AS ID";
            return Repository().FindTableBySql(sql, null).Rows[0]["ID"].ToString();

        }



    }
}