using Common.Model; using Common.Wechat; using CoreEntity.BAL; using CoreEntity.Entity; using PublicLibrary.Common; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Text; using ZcPeng.PublicLibrary; using ZcPeng.weixin.PublicAccount; namespace CoreEntity.DAL { public class PushRecordDAL { public const string orgid = "O24LK4F259B"; public static IList GetPushLimit(string filterstr = "") { #region 获取推送时间 DataTable dt = new DataTable(); string result; string connectstr = "Data Source =192.168.50.30; Initial Catalog = LJHYBZK; Persist Security Info = True; User ID = sa; Password = xq!@#2014;Pooling=true;MAX Pool Size=512;Min Pool Size=50;Connection Lifetime=30"; List parameters1 = new List(); bool success = DataAccess.GetValues(connectstr, "select * from " + Config.TablePrefix + "PushStorLimit where 1=1 " + filterstr, ref dt, parameters1.ToArray(), out result); // 把DataTable转换为IList IList psls = new List(); if (dt!=null && dt.Rows.Count > 0) { // 把DataTable转换为IList psls = ModelConvertHelper.ConvertToModel(dt); } return psls; #endregion } public static Dictionary AddPushRecord( string PushCode, Int32 PushAccountId, string ContactId, string Remark , string ConfirmPerson , string SaleManId) { Dictionary resultdic = new Dictionary(6); #region 添加推送记录 string commandTextRecord = "INSERT INTO " + Config.TablePrefix + "PushRecord (" + "PushCode," + "Id," + "PushTime," + "PushAccountId," + "ContactId," + "PushFeedBackTime,IsComplete,CompleteTime,HasOrder,OrderTime," + "ConfirmPuchaseTime,ConfirmPuchaser,ConfirmOrderTime,ConfirmOrderPerson,IsCancel,CancelTime,Remark,CreationPerson" + ",SaleManId)" + " VALUES (" + "@PushCode," + "@Id," + "@PushTime," + "@PushAccountId," + "@ContactId," + "@PushFeedBackTime,@IsComplete,@CompleteTime,@HasOrder,@OrderTime," + "@ConfirmPuchaseTime,@ConfirmPuchaser,@ConfirmOrderTime,@ConfirmOrderPerson,@IsCancel,@CancelTime,@Remark,@CreationPerson" + ",@SaleManId)"; string resultRecord; //准备参数 Guid PushRecordId = Guid.NewGuid(); List> parametersRecord = new List>(); parametersRecord.Add(new List(2) { "PushCode", PushCode }); parametersRecord.Add(new List(2) { "Id", PushRecordId }); parametersRecord.Add(new List(2) { "PushTime", DateTime.Now }); parametersRecord.Add(new List(2) { "PushAccountId", PushAccountId }); parametersRecord.Add(new List(2) { "ContactId", ContactId }); parametersRecord.Add(new List(2) { "PushFeedBackTime", null }); parametersRecord.Add(new List(2) { "IsComplete", (Int32)0 }); parametersRecord.Add(new List(2) { "CompleteTime", null }); parametersRecord.Add(new List(2) { "HasOrder", 0 }); parametersRecord.Add(new List(2) { "OrderTime", null }); parametersRecord.Add(new List(2) { "ConfirmPuchaseTime", null }); parametersRecord.Add(new List(2) { "ConfirmPuchaser", null }); parametersRecord.Add(new List(2) { "ConfirmOrderTime", null }); parametersRecord.Add(new List(2) { "ConfirmOrderPerson", null }); parametersRecord.Add(new List(2) { "IsCancel", 0 }); parametersRecord.Add(new List(2) { "CancelTime", null }); parametersRecord.Add(new List(2) { "Remark", Remark }); //parametersRecord.Add(new List() { "EntId", EntId }); parametersRecord.Add(new List(2) { "CreationPerson", ConfirmPerson }); parametersRecord.Add(new List(2) { "SaleManId", SaleManId }); List parametersRecord1 = DataAccess.ToParameters(parametersRecord); int successRecord = DataAccess.ExecuteCommand(commandTextRecord, parametersRecord1, out resultRecord); resultdic.Add("successRecord", successRecord); resultdic.Add("resultRecord", resultRecord); resultdic.Add("PushRecordId", PushRecordId); #endregion return resultdic; } public static IDictionary AddOrUpdatePushFeedBack( string PushCode , string PushRecordId , string FeedbackId, Int32 PushAccountId, string ContactId, string GoodsId, string GoodsCode , string GoodsName, decimal StoreGapNum , string GoodsSpec, string Manufacturer , string BusinessId, string BusinessCode, string BusinessName , string SuppliersId, string BrandName, string BrandId , string EntId, string Remark, string ConfirmPerson, Decimal PurPrice, Decimal ActPrice, Decimal PurchaseTotalNum ,string SaleManId) { IDictionary resultdic = new Dictionary(4); Guid PushFeedbackId = Guid.NewGuid(); int Status = 0; if ((PushRecordId != null && PushRecordId != "")) { bool needinsert = false; if ((FeedbackId != null && FeedbackId != "")) { List pls = PushFeedBackDAL.GetFeedbacks(PushRecordId, " and Id='" + FeedbackId + "'"); PushFeedback pfb = pls.ToArray()[0]; int newPushAccountId = PushAccountId; if (pfb.PushAccountId != Convert.ToInt32(newPushAccountId) || pfb.SuppliersId != SuppliersId) { if (pfb.State == 0|| pfb.State == 6 || pfb.State == 5)//初始化供应商信息 { //添加新明细 Status = 6; //不需要删除旧的 打开仍然可以填写 IsCancel标记为1 //PushFeedBackDAL.DeleteFeedback(FeedbackId); PushFeedBackDAL.MarkCancelFeedback(FeedbackId); //获取推送上下限 IList pushLimits = PushRecordDAL.GetPushLimit(" and goodsId='" + GoodsId + "'"); // 获取待推联系人 绑定账户 不需要绑定微信公众号 不绑定微信公众号不能推送信息 string filterstr = //" and UserId IS NOT NULL and UserId !=''" + //" and FocusMicNo IS NOT NULL and FocusMicNo !='' " + " and UserId = '" + PushAccountId + "'"+ " and ContactId = '" + ContactId + "'" + " and SuppliersId = '" + SuppliersId + "'"; Dictionary gapnum; List GetPushContacts = ContactBAL.GetPushContactWithGoods(filterstr, ",t1.ContactId,t1.SuppliersId", pushLimits, out gapnum, out _); PushContactWithGoods GetPushContact = GetPushContacts.ToArray()[0]; BusinessId = GetPushContact.BusinessId; BusinessCode = GetPushContact.BusinessCode; BusinessName = GetPushContact.BusinessName; SuppliersId = GetPushContact.SuppliersId; //如果同一批次已经有这个联系人的推送记录 则加入到对方的记录 否则: //新建新的推送记录-pushrecord PushRecord prec= GetRecordByPushCode(PushCode, PushAccountId); if (prec != null) PushRecordId = prec.Id.ToString(); else { Dictionary pdic = AddPushRecord(PushCode, PushAccountId, ContactId, "", ConfirmPerson,SaleManId); Object recordId; pdic.TryGetValue("PushRecordId", out recordId); PushRecordId = ((Guid)recordId).ToString(); } } else if (pfb.State == 2) { Status = 5; //获取推送上下限 IList pushLimits = PushRecordDAL.GetPushLimit(" and goodsId='" + GoodsId + "'"); // 获取待推联系人 绑定账户 和微信 string filterstr = //" and UserId IS NOT NULL and UserId !=''" + //" and FocusMicNo IS NOT NULL and FocusMicNo !='' " + " and UserId = '" + PushAccountId + "'" + " and ContactId = '" + ContactId + "'" + " and SuppliersId = '" + SuppliersId + "'"; Dictionary gapnum; List GetPushContacts = ContactBAL.GetPushContactWithGoods(filterstr, ",t1.ContactId,t1.SuppliersId", pushLimits, out gapnum, out _); PushContactWithGoods GetPushContact = GetPushContacts.ToArray()[0]; BusinessId = GetPushContact.BusinessId; BusinessCode = GetPushContact.BusinessCode; BusinessName = GetPushContact.BusinessName; SuppliersId = GetPushContact.SuppliersId; //如果统一批次已经有这个联系人的推送记录 则加入到对方的记录 否则: //新建新的推送记录-pushrecord PushRecord prec = GetRecordByPushCode(PushCode, PushAccountId); if (prec != null) PushRecordId = prec.Id.ToString(); else { Dictionary pdic = AddPushRecord(PushCode, PushAccountId, ContactId, "", ConfirmPerson, SaleManId); Object recordId; pdic.TryGetValue("PushRecordId", out recordId); PushRecordId = ((Guid)recordId).ToString(); } } needinsert = true; } } if ((FeedbackId == null || FeedbackId == "")||needinsert) { //添加推送明细 #region 添加推送明细 string commandText = "INSERT INTO " + Config.TablePrefix + "PushFeedback (Id,PushRecordId," + "PushAccountId," + "ContactId," + "GoodsId,GoodsCode,GoodsName,StoreGapNum," + "GoodsSpec,Manufacturer," + "BusinessId,BusinessCode,BusinessName" + ",SuppliersId" + ",BrandName,BrandId" + ",EntId,Remark" + ",CertiNo," + "PurPrice," + "ActPrice," + "PurchaseTotalNum" + ",State" + ",PushCode"+ ",CreationPerson" + ",SaleManId)" + " VALUES (@Id,@PushRecordId," + "@PushAccountId," + "@ContactId," + "@GoodsId,@GoodsCode,@GoodsName,@StoreGapNum," + "@GoodsSpec,@Manufacturer," + "@BusinessId,@BusinessCode,@BusinessName" + ",@SuppliersId" + ",@BrandName,@BrandId" + ",@EntId,@Remark" + ",@CertiNo" + ",@PurPrice" + ",@ActPrice" + ",@PurchaseTotalNum" + ",@State" + ",@PushCode" + ",@CreationPerson" + ",@SaleManId)"; string result; //准备参数 List> parameters = new List>(); parameters.Add(new List() { "Id", PushFeedbackId }); parameters.Add(new List() { "PushRecordId", PushRecordId }); parameters.Add(new List() { "PushAccountId", PushAccountId }); parameters.Add(new List() { "ContactId", ContactId }); parameters.Add(new List() { "GoodsId", GoodsId }); parameters.Add(new List() { "GoodsCode", GoodsCode }); parameters.Add(new List() { "GoodsName", GoodsName }); parameters.Add(new List() { "StoreGapNum", 0 }); parameters.Add(new List() { "GoodsSpec", GoodsSpec }); parameters.Add(new List() { "Manufacturer", Manufacturer }); parameters.Add(new List() { "BusinessId", BusinessId }); parameters.Add(new List() { "BusinessCode", BusinessCode }); parameters.Add(new List() { "BusinessName", BusinessName }); parameters.Add(new List() { "SuppliersId", SuppliersId }); parameters.Add(new List() { "BrandName", BrandName }); parameters.Add(new List() { "BrandId", BrandId }); parameters.Add(new List() { "EntId", EntId }); parameters.Add(new List() { "Remark", Remark }); parameters.Add(new List() { "CertiNo", "" }); parameters.Add(new List() { "PurPrice", PurPrice }); parameters.Add(new List() { "ActPrice", ActPrice }); parameters.Add(new List() { "PurchaseTotalNum", PurchaseTotalNum }); parameters.Add(new List() { "State", Status }); parameters.Add(new List() { "PushCode", PushCode }); parameters.Add(new List() { "CreationPerson", ConfirmPerson }); parameters.Add(new List() { "SaleManId", SaleManId }); List parameters1 = DataAccess.ToParameters(parameters); int success = DataAccess.ExecuteCommand(commandText, parameters1, out result); resultdic.Add("successRecord", success); resultdic.Add("resultRecord", result); #endregion } //else//重新推送 修改 //{ // //--确认订单:采购员已确认 0 刚生成推送记录 1 业务员确认(数量提交确认) 2 供应商业务员取消 // //3 采购员确认(生成计划) // //--4 供应商业务员确认(二次确认 开票 生成采购订单) 5 重新推送 // #region 更新明细 5 量不足重选推送 // string commandTextFeed = "UPDATE " + Config.TablePrefix + "PushFeedback " + // " SET " + // "PushRecordId = PushRecordId1, " + // " State = 5 " + // " FROM (SELECT " + // "@PushRecordId as PushRecordId1" + // " ) A" + // " WHERE Id= @FeedbackId " + // "AND (State in(2,6)) "; // string resultState; // //准备参数 // List> parametersFeed = new List>(); // parametersFeed.Add(new List() { "PushRecordId", PushRecordId }); // parametersFeed.Add(new List() { "FeedbackId", FeedbackId }); // List parametersFeed1 = DataAccess.ToParameters(parametersFeed); // int successState = DataAccess.ExecuteCommand(commandTextFeed, parametersFeed1, out resultState); // #endregion // resultdic.Add("successRecord", successState); // resultdic.Add("resultRecord", resultState); // //old PushFeedbackId // PushFeedbackId = Guid.Parse(FeedbackId); // Status = 5; //} #region 添加推送确认记录 string commandTextRecordRelate = "INSERT INTO " + Config.TablePrefix + "PushConfirmRecord (Id,PushRecordId,PushFeedbackId,ConfirmTime,ConfirmPerson,Status)" + " VALUES (@Id,@PushRecordId,@PushFeedbackId,@ConfirmTime,@ConfirmPerson,@Status)"; string resultRecordRelate; //准备参数 List> parametersRecordRelate = new List>(); parametersRecordRelate.Add(new List() { "Id", Guid.NewGuid() }); parametersRecordRelate.Add(new List() { "PushRecordId", PushRecordId }); parametersRecordRelate.Add(new List() { "PushFeedbackId", PushFeedbackId }); parametersRecordRelate.Add(new List() { "ConfirmTime", DateTime.Now }); parametersRecordRelate.Add(new List() { "ConfirmPerson", ConfirmPerson }); parametersRecordRelate.Add(new List() { "Status", Status }); List parametersRecordRelate1 = DataAccess.ToParameters(parametersRecordRelate); int successRecordRelate = DataAccess.ExecuteCommand(commandTextRecordRelate, parametersRecordRelate1, out resultRecordRelate); resultdic.Add("successRecordRelate", successRecordRelate); resultdic.Add("resultRecordRelate", resultRecordRelate); #endregion } return resultdic; } /// /// 根据上下限 查询待推送联系人 /// /// 是否是低于下限的产品的联系人 /// public static IList GetPushContact(IList storLimits, bool notexist = true) { string not = ""; if (notexist) { not = "not"; } List superior_list = new List(0); foreach (PushStorLimit limit in storLimits) { //Role role; //if (roleMap.TryGetValue(permsr.RoleId, out role)) //{ // listRoles.Add(role); //} superior_list.Add(limit.GoodsId); } //perms.RoleList = listRoles; string limitss = string.Join(",", superior_list.ToArray()); #region 获取推送时间 DataTable dt = new DataTable(); string result; List parameters1 = new List(); string command = "SELECT * " + "FROM(SELECT ROW_NUMBER() OVER(PARTITION BY t1.GoodsId ORDER BY t1.LastPrice ASC) AS RNUM," + " *" + " FROM " + Config.TablePrefix + "PushContact t1 " + " WHERE " + not + "exists (" + //" select 1 from " + Config.TablePrefix + "PushStorLimit A " + //" where A.GoodsId = t1.GoodsId)" + " WHERE t1.GoodsId IN ('" + limitss + " ')" + ") AS T " + " WHERE T.RNUM = 1 " + " "; bool success = DataAccess.GetValues(command, ref dt, parameters1.ToArray(), out result); // 把DataTable转换为IList IList psls = new List(); if (dt!=null && dt.Rows.Count > 0) { // 把DataTable转换为IList psls = ModelConvertHelper.ConvertToModel(dt); } return psls; #endregion } private static List