You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DS7/DSWeb/Areas/MvcShipping/DAL/MsOpTask/MsOpTaskDAL.cs

1045 lines
49 KiB
C#

using System;
using System.Data;
using System.Collections.Generic;
using System.Text;
using DSWeb.MvcShipping.Models.MsOpTask;
using Microsoft.Practices.EnterpriseLibrary.Data;
using DSWeb.EntityDA;
using HcUtility.Comm;
using DSWeb.MvcShipping.Models.MsUserAuthority;
using DSWeb.MvcShipping.DAL.MsChFeeDAL;
using DSWeb.Areas.CommMng.Models;
using DSWeb.Areas.CommMng.DAL;
using DSWeb.Common.DB;
using System.Data.Entity.Migrations;
using DSWeb.TruckMng.Helper;
using static DSWeb.Areas.Dispatch.Controllers.InterfaceController;
using System.Linq;
namespace DSWeb.Areas.MvcShipping.DAL
{
public class MsOpTaskDAL
{
#region Inquery DataList
static public List<OpTask> GetDataList(int start, int limit, string strCondition, string userid, string usercode, string companyid, string sort = null)
{
//var rangestr = BasicDataRefDAL.GetVisableRange("任务管理", userid, "b.CORPID", new string[] { "b.OP", "b.CUSTSERVICE" } , "b.SALEDEPT");
var rangstr = GetRangDAStr("index", userid, usercode, companyid);
if (!string.IsNullOrEmpty(rangstr))
{
if (!string.IsNullOrEmpty(strCondition))
{
strCondition = strCondition + " and " + rangstr;
}
else
{
strCondition = rangstr;
}
}
var strSql = new StringBuilder();
strSql.Append(@"SELECT * from (SELECT row_number() over (");
var sortstring = DatasetSort.Getsortstring(sort);
if (!string.IsNullOrEmpty(sortstring))
{
sortstring = sortstring.Replace("CREATETIME", "t.CREATETIME");
sortstring = sortstring.Replace("OP", "t.OP");
strSql.Append(" order by " + sortstring);
}
else
{
strSql.Append(" order by TASKNO DESC ");
}
strSql.Append(@") as num , ");
strSql.Append("t.GID,t.TASKNO,t.PTASKNO,t.TASKTYPE,t.TASKSOURCE,t.TASKSTATUS,t.TASKTITLE,t.TASKDESCRIP,t.CREATEUSER,t.CORPID,t.CREATETIME,t.TASKBEGINDATE");
strSql.Append(",t.COMPLETETYPE,t.COMPLETETIME,t.KPI,ISNULL(b.MBLNO,t.MBLNO) MBLNO,t.FILENO,t.MAILNO,t.FILEPATH,t.ISPUBLIC,t.OP,t.BSNO,t.ISCOMPLETE,t.REMARK,b.CUSTOMERNAME,b.ETD,b.CARRIER,b.CUSTNO ");
strSql.Append(" from op_task t left join v_op_bs b on (b.BSNO=t.BSNO) ");
if (!string.IsNullOrEmpty(strCondition))
{
strSql.Append(" where t.TASKSTATUS!='待挂单' and " + strCondition);
}
if (!string.IsNullOrEmpty(rangstr))
{
strSql.Append(" and " + rangstr);
}
strSql.Append(@")as t ");
strSql.Append(string.Format("where t.num>{0} and t.num<={1} order by t.num ", start, start + limit)); //
return SetData(strSql);
}
public static int getTotalCount(string strCondition, string userid, string usercode, string companyid)
{
var rangstr = GetRangDAStr("index", userid, usercode, companyid);
if (!string.IsNullOrEmpty(rangstr))
{
if (!string.IsNullOrEmpty(strCondition))
{
strCondition = strCondition + " and " + rangstr;
}
else
{
strCondition = rangstr;
}
}
StringBuilder strSql = new StringBuilder();
strSql.Append("select count(*) ");
strSql.Append(" from op_task t left join v_op_bs b on (b.BSNO=t.BSNO) ");
if (!string.IsNullOrEmpty(strCondition))
{
strSql.Append(" where t.TASKSTATUS!='待挂单' and " + strCondition);
}
int cnt = 0;
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
{
while (reader.Read())
{
cnt = Convert.ToInt32(reader[0]);
}
}
return cnt;
}
static public OpTask GetData(string condition)
{
var strSql = new StringBuilder();
strSql.Append("SELECT ");
strSql.Append("t.GID,t.TASKNO,t.PTASKNO,t.TASKTYPE,t.TASKSOURCE,t.TASKSTATUS,t.TASKTITLE,t.TASKDESCRIP,t.CREATEUSER,t.CORPID,t.CREATETIME,t.TASKBEGINDATE");
strSql.Append(",t.COMPLETETYPE,t.COMPLETETIME,t.KPI,ISNULL(b.MBLNO,t.MBLNO) MBLNO,t.FILENO,t.MAILNO,t.FILEPATH,t.ISPUBLIC,t.OP,t.BSNO,t.ISCOMPLETE,t.REMARK,b.CUSTOMERNAME,b.ETD,b.CARRIER,b.CUSTNO ");
strSql.Append(" from op_task t left join v_op_bs b on (b.BSNO=t.BSNO) ");
if (!string.IsNullOrEmpty(condition))
{
strSql.Append(" where " + condition);
}
var list = SetData(strSql);
if (list.Count > 0)
return list[0];
return new OpTask();
}
private static List<OpTask> SetData(StringBuilder strSql)
{
var headList = new List<OpTask>();
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
{
while (reader.Read())
{
OpTask data = new OpTask();
#region Set DB data to Object
data.GID = Convert.ToString(reader["GID"]);
data.TASKNO = Convert.ToString(reader["TASKNO"]);
data.PTASKNO = Convert.ToString(reader["PTASKNO"]);
data.TASKTYPE = Convert.ToString(reader["TASKTYPE"]);
data.TASKSOURCE = Convert.ToString(reader["TASKSOURCE"]);
data.TASKSTATUS = Convert.ToString(reader["TASKSTATUS"]);
data.TASKTITLE = Convert.ToString(reader["TASKTITLE"]);
data.TASKDESCRIP = Convert.ToString(reader["TASKDESCRIP"]);
data.CREATEUSER = Convert.ToString(reader["CREATEUSER"]);
data.CORPID = Convert.ToString(reader["CORPID"]);
if (reader["CREATETIME"] != DBNull.Value)
data.CREATETIME = Convert.ToDateTime(reader["CREATETIME"]).ToString("yyyy-MM-dd HH:mm:ss");//截港日期
if (reader["TASKBEGINDATE"] != DBNull.Value)
data.TASKBEGINDATE = Convert.ToDateTime(reader["TASKBEGINDATE"]).ToString("yyyy-MM-dd HH:mm:ss");//截港日期
if (reader["COMPLETETIME"] != DBNull.Value)
data.COMPLETETIME = Convert.ToDateTime(reader["COMPLETETIME"]).ToString("yyyy-MM-dd HH:mm:ss");//截港日期
data.COMPLETETYPE = Convert.ToString(reader["COMPLETETYPE"]);
data.KPI = Convert.ToString(reader["KPI"]);
data.MBLNO = Convert.ToString(reader["MBLNO"]);
data.FILENO = Convert.ToString(reader["FILENO"]);
data.MAILNO = Convert.ToString(reader["MAILNO"]);
data.FILEPATH = Convert.ToString(reader["FILEPATH"]);
data.ISPUBLIC = Convert.ToString(reader["ISPUBLIC"]);
data.OP = Convert.ToString(reader["OP"]);
data.BSNO = Convert.ToString(reader["BSNO"]);
data.ISCOMPLETE = Convert.ToString(reader["ISCOMPLETE"]);
data.REMARK = Convert.ToString(reader["REMARK"]);
if (reader["ETD"] != DBNull.Value)
data.ETD = Convert.ToDateTime(reader["ETD"]).ToString("yyyy-MM-dd");//到港日期
data.CUSTOMERNAME = Convert.ToString(reader["CUSTOMERNAME"]);
data.CARRIER = Convert.ToString(reader["CARRIER"]);
data.CUSTNO = Convert.ToString(reader["CUSTNO"]);
#endregion
headList.Add(data);
}
reader.Close();
}
return headList;
}
#endregion
static public List<UserTreeRefModel> GetTaskTreeRefList(string PARENTID, string strCondition, string userid, string usercode, string companyid)
{
var rangstr = GetRangDAStr("index", userid, usercode, companyid);
if (!string.IsNullOrEmpty(rangstr))
{
if (!string.IsNullOrEmpty(strCondition))
{
strCondition = strCondition + " and " + rangstr;
}
else
{
strCondition = rangstr;
}
}
var strSql = new StringBuilder();
strSql.Append("SELECT ");
strSql.Append(" GID,NAME,DESCRIPTION,PARENTID,TYPE,TASTCOUNT from (SELECT GID,NAME,DESCRIPTION,PARENTID,TYPE,sum(TASTCOUNT) TASTCOUNT ");
strSql.Append(" from ( select DISTINCT convert(varchar(20),isnull(ISCOMPLETE,0)) GID,(CASE WHEN ISCOMPLETE=1 THEN '已完成' ELSE '未完成' END) NAME,(CASE WHEN ISCOMPLETE=1 THEN '已完成' ELSE '未完成' END) DESCRIPTION ,'-1' PARENTID,'0' TYPE,COUNT(*) TASTCOUNT from op_task t left join v_op_bs b on (b.BSNO=t.BSNO) ");
if (!string.IsNullOrEmpty(strCondition))
{
strSql.Append(" where TASKSTATUS!='待挂单' and " + strCondition);
}
strSql.Append(" GROUP BY t.ISCOMPLETE) as z group by GID,NAME,DESCRIPTION,PARENTID,TYPE ");
strSql.Append(" union select DISTINCT TASKTYPE+''+convert(varchar(20),isnull(ISCOMPLETE,0)) GID, TASKTYPE NAME, TASKTYPE DESCRIPTION,isnull(ISCOMPLETE,0) PARENTID, '1' TYPE, COUNT(*) TASTCOUNT from op_task t left join v_op_bs b on (b.BSNO=t.BSNO) ");
if (!string.IsNullOrEmpty(strCondition))
{
strSql.Append(" where TASKSTATUS!='待挂单' and " + strCondition);
}
strSql.Append(" GROUP BY TASKTYPE, ISNULL(ISCOMPLETE,0)) as v ");
strSql.Append(" where parentid='" + PARENTID + "' ");
return SetUserTreeRefData(strSql);
}
private static List<UserTreeRefModel> SetUserTreeRefData(StringBuilder strSql)
{
var headList = new List<UserTreeRefModel>();
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
{
while (reader.Read())
{
UserTreeRefModel data = new UserTreeRefModel();
#region Set DB data to Object
data.id = Convert.ToString(reader["GID"]);
data.NAME = Convert.ToString(reader["NAME"]);
data.DESCRIPTION = Convert.ToString(reader["DESCRIPTION"]);
data.PARENTID = Convert.ToString(reader["PARENTID"]);
data.TYPE = Convert.ToString(reader["TYPE"]);
if (reader["TASTCOUNT"] != DBNull.Value)
data.TASTCOUNT = Convert.ToInt32(reader["TASTCOUNT"]);
data.DESCRIPTION = data.DESCRIPTION + "(" + data.TASTCOUNT + ")";
if (data.TYPE == "1")
{
data.leaf = true;
data.expanded = true;
}
else
{
data.leaf = false;
data.expanded = true;
};
#endregion
headList.Add(data);
}
reader.Close();
}
return headList;
}
#region 保存,删除
public static DBResult DeleteTask(List<OpTask> bodyList)
{
var result = new DBResult();
Database db = DatabaseFactory.CreateDatabase();
using (var conn = db.CreateConnection())
{
conn.Open();
var tran = conn.BeginTransaction();
try
{
var cmdInsert =
db.GetSqlStringCommand(
@"delete from op_task where GID=@GID ");
if (bodyList != null)
{
foreach (var enumValue in bodyList)
{
cmdInsert.Parameters.Clear();
db.AddInParameter(cmdInsert, "@GID", DbType.String, enumValue.GID);
db.ExecuteNonQuery(cmdInsert, tran);
}
}
tran.Commit();
}
catch (Exception)
{
tran.Rollback();
result.Success = false;
result.Message = "删除出现错误,请重试或联系系统管理员";
return result;
}
}
result.Success = true;
result.Message = "删除成功" + result.Message;
return result;
}
#endregion
public static DBResult UpTransStatus(List<OpTask> bodyList, string transstatus, string op)
{
var result = new DBResult();
Database db = DatabaseFactory.CreateDatabase();
using (var conn = db.CreateConnection())
{
conn.Open();
var tran = conn.BeginTransaction();
try
{
if (bodyList != null)
{
var cmdInsertFee =
db.GetSqlStringCommand(
@"delete from ch_fee where BSNO=@BSNO AND CARGO_GID=@CARGO_GID ");
foreach (var enumValue in bodyList)
{
if (((enumValue.TASKTYPE == "待派车") || (enumValue.TASKTYPE == "待派车(重新提交)") || (enumValue.TASKTYPE == "派车中") || (enumValue.TASKTYPE == "已派车") || (enumValue.TASKTYPE == "派车已发单")) && (transstatus == "取消任务"))
{
var cmdupdate = db.GetSqlStringCommand("update op_task set TASKTYPE='驳回派车',OP='',ISPUBLIC=1,ISCOMPLETE=0,COMPLETETIME=null where GID=@GID");
cmdupdate.Parameters.Clear();
db.AddInParameter(cmdupdate, "@GID", DbType.String, enumValue.GID);
db.ExecuteNonQuery(cmdupdate, tran);
var cmdinsertState = db.GetSqlStringCommand("update op_letter_truck set TRUCKSTATUS='待派车',ISFEE='0' where LE_ID=@LE_ID");
cmdinsertState.Parameters.Clear();
db.AddInParameter(cmdinsertState, "@LE_ID", DbType.String, enumValue.TASKNO);
db.ExecuteNonQuery(cmdinsertState, tran);
cmdInsertFee.Parameters.Clear();
db.AddInParameter(cmdInsertFee, "@BSNO", DbType.String, enumValue.BSNO);
db.AddInParameter(cmdInsertFee, "@CARGO_GID", DbType.String, enumValue.TASKNO);
db.ExecuteNonQuery(cmdInsertFee, tran);
}
else
{
var cmdupdate = db.GetSqlStringCommand("update op_task set TASKSTATUS=@TASKSTATUS where GID=@GID");
if (transstatus == "取消任务") cmdupdate = db.GetSqlStringCommand("update op_task set TASKSTATUS=@TASKSTATUS,ISCOMPLETE=1,COMPLETETYPE='人工',COMPLETETIME=GETDATE(),OP='" + op + "' where GID=@GID");
cmdupdate.Parameters.Clear();
db.AddInParameter(cmdupdate, "@GID", DbType.String, enumValue.GID);
db.AddInParameter(cmdupdate, "@TASKSTATUS", DbType.String, transstatus);
db.ExecuteNonQuery(cmdupdate, tran);
var cmdinsertState = db.GetSqlStringCommand("insert into op_task_state (GID,TASKNO,TASKSTATUS,OP,OPTIME) values (newid(),@TASKNO,@TASKSTATUS,@OP,GETDATE())");
cmdinsertState.Parameters.Clear();
db.AddInParameter(cmdinsertState, "@TASKNO", DbType.String, enumValue.TASKNO);
db.AddInParameter(cmdinsertState, "@TASKSTATUS", DbType.String, transstatus);
db.AddInParameter(cmdinsertState, "@OP", DbType.String, op);
db.ExecuteNonQuery(cmdinsertState, tran);
}
}
}
tran.Commit();
result.Success = true;
result.Message = "更新完成!";
}
catch (Exception e)
{
tran.Rollback();
result.Success = false;
result.Message = "更新出现错误,请重试或联系系统管理员" + e.Message;
return result;
}
}
return result;
}
public static DBResult ImpInvoice(OpTask headData, string op, string userid, string companyid)
{
var result = new DBResult();
Database db = DatabaseFactory.CreateDatabase();
T_ALL_DA T_ALL_DA = new EntityDA.T_ALL_DA();
var edifeelist = MsChFeeDAL.GetEdiDataList(" reportid='" + headData.TASKNO + "'");
if (edifeelist.Count == 0) {
result.Success = false;
result.Message = result.Message + " 提单号:" + headData.MBLNO + " 没有需要引入的费用!";
return result;
}
var BSNO = T_ALL_DA.GetStrSQL("BSNO", "select BSNO from V_OP_BS where FEESTATUS=0 AND BSNO='" + headData.BSNO + "'");
if (BSNO == "")
{
result.Success = false;
result.Message = result.Message + " 提单号:" + headData.MBLNO + " 无法导入,请确认提单号正确并未费用封账!";
return result;
}
var FEECOUNT = T_ALL_DA.GetStrSQL("FEECOUNT", "select COUNT(*) FEECOUNT from CH_FEE where F_NO='" + edifeelist[0].InvoiceNum + "' and isnull(SETTLEMENT,0)<>0 and isnull(INVOICE,0)<>0 and isnull(ORDERAMOUNT,0)<>0 and isnull(ORDERINVOICE,0)<>0 ");
if (FEECOUNT != "0")
{
result.Success = false;
result.Message = result.Message + " 提单号:" + headData.MBLNO + " 已经导入,不能重复导入,请手动处理!";
return result;
}
if (edifeelist[0].INPUTMODE != "更正发票") {
var FEECOUNT2 = T_ALL_DA.GetStrSQL("FEECOUNT2", "select COUNT(*) FEECOUNT2 from CH_FEE where F_NO='" + edifeelist[0].InvoiceNum + "' ");
if (FEECOUNT2 != "0")
{
result.Success = false;
result.Message = result.Message + " 提单号:" + headData.MBLNO + " 已经导入,不能重复导入,请手动处理!";
return result;
}
}
var feecurrlist = MsChFeeDAL.GetFeeDateCurrList("op_Seae", headData.BSNO, userid, companyid);
using (var conn = db.CreateConnection())
{
conn.Open();
var tran = conn.BeginTransaction();
try
{
var cmddelete = db.GetSqlStringCommand("delete from ch_fee where F_NO=@F_NO and BSNO=@BSNO");
cmddelete.Parameters.Clear();
db.AddInParameter(cmddelete, "@F_NO", DbType.String, edifeelist[0].InvoiceNum);
db.AddInParameter(cmddelete, "@BSNO", DbType.String, headData.BSNO);
db.ExecuteNonQuery(cmddelete, tran);
var cmdInsert =
db.GetSqlStringCommand(
@"INSERT INTO ch_fee(GID, BSNO, FEETYPE, FEENAME, FEEDESCRIPTION, CUSTOMERTYPE, CUSTOMERNAME, UNIT, UNITPRICE, QUANTITY, AMOUNT, CURRENCY,
EXCHANGERATE, REASON, REMARK, COMMISSIONRATE,ENTEROPERATOR, ENTERDATE,ISOPEN, ISADVANCEDPAY, SORT, FEESTATUS, FEEFRT,
TAXRATE,NOTAXAMOUNT,ACCTAXRATE,LINENUM,TAXUNITPRICE,MODIFIEDUSER,MODIFIEDTIME,WMSOUTBSNO,PREAMOUNT,INPUTMODE,F_NO)
VALUES
(@gid,@bsno,@fee_type,@fee_name,@fee_description,@customer_type,@customer_name,@unit,@unit_price,@quantity,@amount,@currency,
@exchange_rate,@reason,@remark,@comm_rate,@enter_operator,@enter_date,@is_open,@is_advance_pay,@sort,@fee_status,@fee_frt,
@taxrate,@notaxamount,@acctaxrate,@LINENUM,@taxunit_price,@MODIFIEDUSER,@MODIFIEDTIME,@WMSOUTBSNO,@PREAMOUNT,@INPUTMODE,@F_NO) ");
foreach (var enumValue in edifeelist)
{
var exchangerate = enumValue.ExChangerate;
if (enumValue.Currency != "RMB" && exchangerate == 1) {
foreach (var enumcurr in feecurrlist)
{
if (enumcurr.CURR == enumValue.Currency)
exchangerate = enumcurr.CRDEFRATE;
}
}
cmdInsert.Parameters.Clear();
db.AddInParameter(cmdInsert, "@gid", DbType.String, Guid.NewGuid().ToString());
db.AddInParameter(cmdInsert, "@bsno", DbType.String, headData.BSNO);
db.AddInParameter(cmdInsert, "@fee_type", DbType.Int16, 2);
db.AddInParameter(cmdInsert, "@fee_name", DbType.String, enumValue.FeeName);
db.AddInParameter(cmdInsert, "@customer_type", DbType.String, enumValue.CustomerType);
db.AddInParameter(cmdInsert, "@customer_name", DbType.String, enumValue.CustomerName);
db.AddInParameter(cmdInsert, "@unit", DbType.String, enumValue.Unit);
db.AddInParameter(cmdInsert, "@unit_price", DbType.Decimal, enumValue.UnitPrice);
db.AddInParameter(cmdInsert, "@fee_description", DbType.String, enumValue.FeeDescription);
db.AddInParameter(cmdInsert, "@quantity", DbType.Decimal, 1);
db.AddInParameter(cmdInsert, "@amount", DbType.Decimal, enumValue.Amount);
db.AddInParameter(cmdInsert, "@currency", DbType.String, enumValue.Currency);
db.AddInParameter(cmdInsert, "@exchange_rate", DbType.Decimal, exchangerate);
db.AddInParameter(cmdInsert, "@reason", DbType.String, "");
db.AddInParameter(cmdInsert, "@remark", DbType.String, enumValue.Remark);
db.AddInParameter(cmdInsert, "@comm_rate", DbType.Decimal, 0);
db.AddInParameter(cmdInsert, "@enter_operator", DbType.String, userid);
db.AddInParameter(cmdInsert, "@enter_date", DbType.String, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
db.AddInParameter(cmdInsert, "@is_open", DbType.String, "0");
db.AddInParameter(cmdInsert, "@is_advance_pay", DbType.String, "0");
db.AddInParameter(cmdInsert, "@sort", DbType.Int16, enumValue.Sort);
db.AddInParameter(cmdInsert, "@fee_status", DbType.Int16, 1);
db.AddInParameter(cmdInsert, "@fee_frt", DbType.String, "");
db.AddInParameter(cmdInsert, "@taxrate", DbType.Decimal, 0);
db.AddInParameter(cmdInsert, "@notaxamount", DbType.Decimal, enumValue.NoTaxAmount);
db.AddInParameter(cmdInsert, "@acctaxrate", DbType.Decimal, 0);
db.AddInParameter(cmdInsert, "@LINENUM", DbType.Int16, enumValue.Sort);
db.AddInParameter(cmdInsert, "@taxunit_price", DbType.Decimal, enumValue.Amount);
db.AddInParameter(cmdInsert, "@MODIFIEDUSER", DbType.String, userid);
db.AddInParameter(cmdInsert, "@MODIFIEDTIME", DbType.String, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
db.AddInParameter(cmdInsert, "@WMSOUTBSNO", DbType.String, "");
db.AddInParameter(cmdInsert, "@PREAMOUNT", DbType.Decimal, 0);
db.AddInParameter(cmdInsert, "@INPUTMODE", DbType.String, "EDI引入");
db.AddInParameter(cmdInsert, "@F_NO", DbType.String, enumValue.InvoiceNum);
db.ExecuteNonQuery(cmdInsert, tran);
}
var cmdupdate = db.GetSqlStringCommand("update op_task set TASKSTATUS=@TASKSTATUS,ISCOMPLETE=1,COMPLETETYPE='人工',COMPLETETIME=GETDATE(),OP='" + op + "' where GID=@GID");
cmdupdate.Parameters.Clear();
db.AddInParameter(cmdupdate, "@GID", DbType.String, headData.GID);
db.AddInParameter(cmdupdate, "@TASKSTATUS", DbType.String, "已引入");
db.ExecuteNonQuery(cmdupdate, tran);
var cmdinsertState = db.GetSqlStringCommand("insert into op_task_state (GID,TASKNO,TASKSTATUS,OP,OPTIME) values (newid(),@TASKNO,@TASKSTATUS,@OP,GETDATE())");
cmdinsertState.Parameters.Clear();
db.AddInParameter(cmdinsertState, "@TASKNO", DbType.String, headData.TASKNO);
db.AddInParameter(cmdinsertState, "@TASKSTATUS", DbType.String, "已引入");
db.AddInParameter(cmdinsertState, "@OP", DbType.String, op);
db.ExecuteNonQuery(cmdinsertState, tran);
tran.Commit();
result.Success = true;
result.Message = "更新完成!";
}
catch (Exception e)
{
tran.Rollback();
result.Success = false;
result.Message = "更新出现错误,请重试或联系系统管理员" + e.Message;
return result;
}
}
return result;
}
static public string GETFEENAME(string FEECODE)
{
var strSql = new StringBuilder();
strSql.Append("select top 1 [FEENAME] from code_fee_edi where [FEEENAME]='" + FEECODE + "'");
var FEENAME = "";
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
{
while (reader.Read())
{
FEENAME = Convert.ToString(reader["FEENAME"]);
}
reader.Close();
}
if (string.IsNullOrEmpty(FEENAME))
{
FEENAME = FEECODE;
}
return FEENAME;
}
static public string GetCustEDICode(string EDICODE)
{
string CUST = "";
var strSql = new StringBuilder();
strSql.Append("select CUST from code_cust_edi where EDICODE='" + EDICODE + "'");
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
{
while (reader.Read())
{
CUST = Convert.ToString(reader["CUST"]).Trim();
}
reader.Close();
}
if (CUST.Trim() == "")
{
var strSql2 = new StringBuilder();
strSql2.Append("select SHORTNAME from info_client WHERE EDICODE='" + EDICODE + "'");
db = DatabaseFactory.CreateDatabase();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql2.ToString()))
{
while (reader.Read())
{
CUST = Convert.ToString(reader["SHORTNAME"]).Trim();
}
reader.Close();
}
}
return CUST;
}
public static DBResult ImpOrderFee(OpTask headData, string op, string userid, string companyid)
{
var result = new DBResult();
Database db = DatabaseFactory.CreateDatabase();
T_ALL_DA T_ALL_DA = new EntityDA.T_ALL_DA();
var edifeelist = MsChFeeDAL.GetOrderDataList(" BSNO='" + headData.TASKNO + "'");
if (edifeelist.Count == 0)
{
result.Success = false;
result.Message = result.Message + " 提单号:" + headData.MBLNO + " 没有需要引入的费用!";
return result;
}
var BSNO = headData.BSNO;
if (!String.IsNullOrEmpty(headData.BSNO))
{
BSNO = T_ALL_DA.GetStrSQL("BSNO", "select BSNO from V_OP_BS where FEESTATUS=0 AND BSNO='" + headData.BSNO + "'");
if (BSNO == "")
{
BSNO = T_ALL_DA.GetStrSQL("BSNO", "select BSNO from V_OP_BILL where FEESTATUS=0 AND PARENTID='" + headData.BSNO + "'");
if (BSNO == "")
{
result.Success = false;
result.Message = result.Message + " 提单号:" + headData.MBLNO + " 无法导入,请确认提单号正确并未费用封账!";
return result;
}
}
}
else {
if (!String.IsNullOrEmpty(headData.MBLNO))
{
BSNO = T_ALL_DA.GetStrSQL("BSNO", "select BSNO from V_OP_BS where FEESTATUS=0 AND MBLNO='" + headData.MBLNO + "'");
if (BSNO == "")
{
BSNO = T_ALL_DA.GetStrSQL("BSNO", "select TOP 1 BSNO from V_OP_BILL where FEESTATUS=0 AND MBLNO='" + headData.MBLNO + "' ORDER BY CREATETIME ");
if (BSNO == "")
{
result.Success = false;
result.Message = result.Message + " 提单号:" + headData.MBLNO + " 无法导入,请确认提单号正确并未费用封账!";
return result;
}
}
}
}
//var FEECOUNT = T_ALL_DA.GetStrSQL("FEECOUNT", "select COUNT(*) FEECOUNT from CH_FEE where F_NO='" + edifeelist[0].InvoiceNum + "' and isnull(SETTLEMENT,0)<>0 and isnull(INVOICE,0)<>0 and isnull(ORDERAMOUNT,0)<>0 and isnull(ORDERINVOICE,0)<>0 ");
//if (FEECOUNT != "0")
//{
// result.Success = false;
// result.Message = result.Message + " 提单号:" + headData.MBLNO + " 已经导入,不能重复导入,请手动处理!";
// return result;
//}
var feecurrlist = MsChFeeDAL.GetFeeDateCurrList("op_Seae", headData.BSNO, userid, companyid);
using (var conn = db.CreateConnection())
{
conn.Open();
var tran = conn.BeginTransaction();
try
{
var cmdInsert =
db.GetSqlStringCommand(
@"INSERT INTO ch_fee(GID, BSNO, FEETYPE, FEENAME, FEEDESCRIPTION, CUSTOMERTYPE, CUSTOMERNAME, UNIT, UNITPRICE, QUANTITY, AMOUNT, CURRENCY,
EXCHANGERATE, REASON, REMARK, COMMISSIONRATE,ENTEROPERATOR, ENTERDATE,ISOPEN, ISADVANCEDPAY, SORT, FEESTATUS, FEEFRT,
TAXRATE,NOTAXAMOUNT,ACCTAXRATE,LINENUM,TAXUNITPRICE,MODIFIEDUSER,MODIFIEDTIME,WMSOUTBSNO,PREAMOUNT,INPUTMODE,F_NO)
VALUES
(@gid,@bsno,@fee_type,@fee_name,@fee_description,@customer_type,@customer_name,@unit,@unit_price,@quantity,@amount,@currency,
@exchange_rate,@reason,@remark,@comm_rate,@enter_operator,@enter_date,@is_open,@is_advance_pay,@sort,@fee_status,@fee_frt,
@taxrate,@notaxamount,@acctaxrate,@LINENUM,@taxunit_price,@MODIFIEDUSER,@MODIFIEDTIME,@WMSOUTBSNO,@PREAMOUNT,@INPUTMODE,@F_NO) ");
foreach (var enumValue in edifeelist)
{
var exchangerate = enumValue.ExChangerate;
if (enumValue.Currency != "RMB" && exchangerate == 1)
{
foreach (var enumcurr in feecurrlist)
{
if (enumcurr.CURR == enumValue.Currency)
exchangerate = enumcurr.CRDEFRATE;
}
}
cmdInsert.Parameters.Clear();
db.AddInParameter(cmdInsert, "@gid", DbType.String, Guid.NewGuid().ToString());
db.AddInParameter(cmdInsert, "@bsno", DbType.String, BSNO);
db.AddInParameter(cmdInsert, "@fee_type", DbType.Int16, 2);
db.AddInParameter(cmdInsert, "@fee_name", DbType.String, GETFEENAME(enumValue.FeeDescription));
db.AddInParameter(cmdInsert, "@customer_type", DbType.String, enumValue.CustomerType);
db.AddInParameter(cmdInsert, "@customer_name", DbType.String, GetCustEDICode(enumValue.CustomerName));
db.AddInParameter(cmdInsert, "@unit", DbType.String, enumValue.Unit);
db.AddInParameter(cmdInsert, "@unit_price", DbType.Decimal, enumValue.UnitPrice);
db.AddInParameter(cmdInsert, "@fee_description", DbType.String, enumValue.FeeDescription);
db.AddInParameter(cmdInsert, "@quantity", DbType.Decimal, 1);
db.AddInParameter(cmdInsert, "@amount", DbType.Decimal, enumValue.Amount);
db.AddInParameter(cmdInsert, "@currency", DbType.String, enumValue.Currency);
db.AddInParameter(cmdInsert, "@exchange_rate", DbType.Decimal, exchangerate);
db.AddInParameter(cmdInsert, "@reason", DbType.String, "");
db.AddInParameter(cmdInsert, "@remark", DbType.String, enumValue.Remark);
db.AddInParameter(cmdInsert, "@comm_rate", DbType.Decimal, 0);
db.AddInParameter(cmdInsert, "@enter_operator", DbType.String, userid);
db.AddInParameter(cmdInsert, "@enter_date", DbType.String, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
db.AddInParameter(cmdInsert, "@is_open", DbType.String, "0");
db.AddInParameter(cmdInsert, "@is_advance_pay", DbType.String, "0");
db.AddInParameter(cmdInsert, "@sort", DbType.Int16, enumValue.Sort);
db.AddInParameter(cmdInsert, "@fee_status", DbType.Int16, 1);
db.AddInParameter(cmdInsert, "@fee_frt", DbType.String, "");
db.AddInParameter(cmdInsert, "@taxrate", DbType.Decimal, 0);
db.AddInParameter(cmdInsert, "@notaxamount", DbType.Decimal, enumValue.NoTaxAmount);
db.AddInParameter(cmdInsert, "@acctaxrate", DbType.Decimal, 0);
db.AddInParameter(cmdInsert, "@LINENUM", DbType.Int16, enumValue.Sort);
db.AddInParameter(cmdInsert, "@taxunit_price", DbType.Decimal, enumValue.Amount);
db.AddInParameter(cmdInsert, "@MODIFIEDUSER", DbType.String, userid);
db.AddInParameter(cmdInsert, "@MODIFIEDTIME", DbType.String, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
db.AddInParameter(cmdInsert, "@WMSOUTBSNO", DbType.String, headData.TASKNO);
db.AddInParameter(cmdInsert, "@PREAMOUNT", DbType.Decimal, 0);
db.AddInParameter(cmdInsert, "@INPUTMODE", DbType.String, "EDI引入");
db.AddInParameter(cmdInsert, "@F_NO", DbType.String, enumValue.InvoiceNum);
db.ExecuteNonQuery(cmdInsert, tran);
}
var cmdupdate = db.GetSqlStringCommand("update op_task set TASKSTATUS=@TASKSTATUS,ISCOMPLETE=1,COMPLETETYPE='人工',COMPLETETIME=GETDATE(),OP='" + op + "',BSNO='" + BSNO + "' where GID=@GID");
cmdupdate.Parameters.Clear();
db.AddInParameter(cmdupdate, "@GID", DbType.String, headData.GID);
db.AddInParameter(cmdupdate, "@TASKSTATUS", DbType.String, "已引入");
db.ExecuteNonQuery(cmdupdate, tran);
var cmdinsertState = db.GetSqlStringCommand("insert into op_task_state (GID,TASKNO,TASKSTATUS,OP,OPTIME) values (newid(),@TASKNO,@TASKSTATUS,@OP,GETDATE())");
cmdinsertState.Parameters.Clear();
db.AddInParameter(cmdinsertState, "@TASKNO", DbType.String, headData.TASKNO);
db.AddInParameter(cmdinsertState, "@TASKSTATUS", DbType.String, "已引入");
db.AddInParameter(cmdinsertState, "@OP", DbType.String, op);
db.ExecuteNonQuery(cmdinsertState, tran);
tran.Commit();
result.Success = true;
result.Message = "更新完成!";
}
catch (Exception e)
{
tran.Rollback();
result.Success = false;
result.Message = "更新出现错误,请重试或联系系统管理员" + e.Message;
return result;
}
}
return result;
}
public static DBResult GetBcRemark(OpTask headData)
{
var result = new DBResult();
var strSql = new StringBuilder();
strSql.Append("SELECT top 1 m.F_Remark,m.F_HYH,(select top 1 F_EXT_IsMatchBusiRemark from op_seae_edi_rp_iftmbc where F_Base_ReportID='" + headData.FILENO + "' ) F_EXT_IsMatchBusiRemark,");
strSql.Append(" (select top 1 CONTRACTNO from op_seae where BSNO='" + headData.BSNO + "') CONTRACTNO FROM op_seae_edi_mail_bcinfo m where F_Base_MailID='" + headData.MAILNO + "'");
var yhstr = "";
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
{
while (reader.Read())
{
if (Convert.ToString(reader["F_Remark"]).Trim() != "")
result.Message = result.Message + Convert.ToString(reader["F_Remark"]);
if (Convert.ToString(reader["F_HYH"]).Trim() != Convert.ToString(reader["CONTRACTNO"]).Trim())
yhstr = "约号(合同号)与业务系统运费协议号不一致:" + Convert.ToString(reader["F_HYH"]).Trim() + "--" + Convert.ToString(reader["CONTRACTNO"]).Trim();
if (Convert.ToString(reader["F_EXT_IsMatchBusiRemark"]).Trim() != "" && Convert.ToString(reader["F_EXT_IsMatchBusiRemark"]) != "匹配BC报文无异常")
{
if (yhstr != "") result.Message = result.Message + " " + yhstr;
result.Message = result.Message + " " + Convert.ToString(reader["F_EXT_IsMatchBusiRemark"]);
}
else {
if (yhstr != "") result.Message = result.Message + " " + yhstr;
result.Message = result.Message;
}
}
reader.Close();
}
result.Success = true;
return result;
}
static public List<OpTaskFieldValue> GetTaskFieldValueDataList(string strCondition)
{
var strSql = new StringBuilder();
strSql.Append("SELECT ");
strSql.Append("*");
strSql.Append(" from op_task_fieldvalue ");
if (!string.IsNullOrEmpty(strCondition))
{
strSql.Append(" where " + strCondition);
}
strSql.Append(" order by OPDATE ");
return SetTaskFieldValueData(strSql);
}
private static List<OpTaskFieldValue> SetTaskFieldValueData(StringBuilder strSql)
{
var headList = new List<OpTaskFieldValue>();
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
{
while (reader.Read())
{
OpTaskFieldValue data = new OpTaskFieldValue();
#region Set DB data to Object
data.GID = Convert.ToString(reader["plfield_id"]);
data.TASKNO = Convert.ToString(reader["TASKNO"]);
data.FEILDNAME = Convert.ToString(reader["FEILDNAME"]);
data.FEILDVALUE = Convert.ToString(reader["FEILDVALUE"]);
if (reader["OPDATE"] != DBNull.Value)
data.OPDATE = Convert.ToDateTime(reader["OPDATE"]).ToString("yyyy-MM-dd HH:mm:ss");
#endregion
headList.Add(data);
}
reader.Close();
}
return headList;
}
#region Rang权限范围
public static string GetRangDAStr(string tb, string userid, string username, string companyid)
{
string str = "";
var strSql = new StringBuilder();
strSql.Append("SELECT");
strSql.Append(" VISIBLERANGE,OPERATERANGE");
strSql.Append(" from VW_User_Authority");
strSql.Append(" where [NAME]='modOpTask' and USERID='" + userid + "' and ISDELETE=0");
string visiblerange = "4";
string operaterange = "4";
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader reader = db.ExecuteReader(CommandType.Text, strSql.ToString()))
{
while (reader.Read())
{
visiblerange = Convert.ToString(reader["VISIBLERANGE"]);
operaterange = Convert.ToString(reader["OPERATERANGE"]);
break;
}
reader.Close();
}
if (visiblerange == "4")
{
str = " (t.OP='" + username + "' or t.ISPUBLIC=1 or t.CREATEUSER='" + username + "') ";
}
else if (visiblerange == "3")
{
str = " (t.OP='" + username + "' or t.ISPUBLIC=1 or t.CREATEUSER='" + username + "') ";
}
else if (visiblerange == "2")
{
var rangeDa = new RangeDA();
var deptname = rangeDa.GetDEPTNAME(userid);
str = " (t.ISPUBLIC=1 or t.OP in (select showname from [user] where GID in (select USERID from user_company where COMPANYID='" + companyid + "') and GID in (select userid from user_baseinfo where DEPTNAME='" + deptname + "')) or t.CREATEUSER='" + username + "') ";
}
else if (visiblerange == "1")
{
str = " (t.ISPUBLIC=1 or t.OP in (select showname from [user] where GID in (select USERID from user_company where COMPANYID='" + companyid + "')) or t.CREATEUSER='" + username + "') ";
}
else if (visiblerange == "0")
{
str = " 1=1 ";
}
return str;
}
#endregion
#region 增加一条任务
public static op_task_md GetNewTask() {
var result = new op_task_md();
result.GID = Guid.NewGuid().ToString();
result.TASKNO = Guid.NewGuid().ToString();
result.TASKSTATUS = "未开始";
result.CREATEUSER = "ADMIN";
result.CREATETIME = DateTime.Now;
result.TASKBEGINDATE = DateTime.Now;
result.COMPLETETYPE = "手动";
result.ISPUBLIC = true;
return result;
}
#endregion
#region 关贸云业务和费用
public static DBResult (string strJson)
{
var result = new DBResult();
result.OK();
try {
var cdc = new CommonDataContext();
var newtask = GetNewTask();
var head = JsonConvert.Deserialize<GuanMaoYun_Head>(strJson);
var bsno = cdc.op_task.Where(x => x.BSNO == head.BUSINESS_ORDER_INFO.WORK_NO).ToList();
if (bsno != null && bsno.Count > 0) {
newtask = bsno[0];
}
newtask.TASKTYPE = "报关导入";
newtask.TASKSOURCE = "关贸云";
newtask.TASKTITLE = head.DECL_HEAD.CUSTOMS_NO;
newtask.MBLNO = head.DECL_HEAD.BILL_NO;
newtask.BSNO = head.BUSINESS_ORDER_INFO.WORK_NO;//记录关贸云业务的唯一编号
newtask.TASKNO = newtask.BSNO;
cdc.op_task.AddOrUpdate(newtask);
cdc.SaveChanges();
var HeadDic = new Dictionary<string, string>();
HeadDic.Add("JSONSTR", strJson);
BasicDataRefDAL.SaveLogicInfo(newtask.TASKNO, "关贸云报关", HeadDic);
} catch (Exception ex)
{
result.SetErrorInfo(ex.Message);
}
return result;
}
public static DBResult (string strJson)
{
var result = new DBResult();
result.OK();
try {
//如当前有该业务 则update 否则新增
var newtask = GetNewTask();
var headinfo = JsonConvert.Deserialize<GuanMaoYun_Fee>(strJson);
var cdc = new CommonDataContext();
var tasklist = cdc.op_task.Where(x => x.BSNO == headinfo.JOB_ID).ToList();
if (tasklist == null || tasklist.Count == 0)
{
result.SetErrorInfo("还未导入业务信息");
return result;
}
else {
newtask = tasklist[0];
}
var HeadDic = new Dictionary<string, string>();
HeadDic.Add("JSONSTR", strJson);
BasicDataRefDAL.SaveLogicInfo(newtask.TASKNO, "关贸云费用", HeadDic);
}
catch (Exception ex)
{
result.SetErrorInfo(ex.Message);
}
return result;
}
public static DBResult (string TASKNO,string OP)
{
var result = new DBResult();
try
{
//提取两个op_logicinfo中的json
var logic = BasicDataRefDAL.GetLogicInfo(TASKNO, "关贸云报关");
var json = logic["JSONSTR"];
var logic = BasicDataRefDAL.GetLogicInfo(TASKNO, "关贸云费用");
var json = logic["JSONSTR"];
var headinfo = JsonConvert.Deserialize<GuanMaoYun_Head>(json);
var j1= PublicAPIDAL.GuanMaoYun_Head_Save(headinfo, OP);
if (!j1.Success)
{
result.SetErrorInfo(j1.Message);
return result;
}
var feehead = JsonConvert.Deserialize<GuanMaoYun_Fee>(json);
var j2 = PublicAPIDAL.GuanMaoYun_Fee_Save(feehead);
if (!j2.Success) {
result.SetErrorInfo(j2.Message);
return result;
}
result.OK("导入完成");
}
catch (Exception e)
{
result.SetErrorInfo(e.Message);
}
return result;
}
#endregion
#region 参照部分
#endregion
}
}