using CRM.Core.BLL.Soft; using CRM.Core.DTO.Res; using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Linq; using WX.CRM.Common; using ZXDService.Dao; using ZXDService.Domain; using ZXDService.Dto; namespace ZXDService.Services { public class AssignRulesServices { SOFT_USER_BL _softUser = new SOFT_USER_BL(); public bool Insert(List dto) { var rules = new List(); foreach (var item in dto) { //LogHelper.Info("eid:" + item.EID); var rule = new AssignRules() { eid = item.EID, salegroupid = item.SALEGROUPID, uname = item.UNAME, rate = item.RATE, num = item.NUM, islimit = item.ISLIMIT, limitnum = item.LIMITNUM, isvalid = item.ISVALID, ch = item.CH, levelno = item.LEVELNO, crmdeptid = item.DEPTID ?? 0, deptrate = item.DEPTRATE, inneruserid = item.INNERUSERID, ctime = item.CTIME }; //LogHelper.Info("eid2:" + rule.eid); rules.Add(rule); } if (rules.Any()) { //using (var db = DbStore.GetConnection()) //{ // db.Open(); // var gid = rules.Select(p => p.salegroupid).Distinct().FirstOrDefault(); // //IList predList = new List(); // //predList.Add(Predicates.Field(p => p.salegroupid, Operator.Eq, gid.Value)); // //IPredicateGroup predGroup = Predicates.Group(GroupOperator.And, predList.ToArray()); // ////list = this.GetList(predGroup); // //IList sort = new List(); // //sort.Add(new Sort { PropertyName = "uniquekey", Ascending = true }); // var assignList = db.GetList(Predicates.Field(p => p.salegroupid, Operator.Eq, gid.Value)); // var assigns = new List(); // foreach (var rule in rules) // { // var id = rule.ch + "," + rule.eid + "," + rule.salegroupid; // var assign = assignList.FirstOrDefault(p => p.uniquekey == id); // if(assign == null) // { // var info = new Assign() { uniquekey = id, ch = rule.ch, eid = rule.eid, salegroupid = rule.salegroupid.Value }; // assigns.Add(info); // } // } // var trans = db.BeginTransaction(); // if (gid.HasValue) // db.Delete(Predicates.Field(f => f.salegroupid, Operator.Eq, gid.Value), trans); // db.Insert(rules, trans); // db.Insert(assigns, trans); // trans.Commit(); //} //var gid = rules.Select(p => p.salegroupid).Distinct().FirstOrDefault(); var gids = rules.Select(p => p.salegroupid).Distinct(); //var assignList = new List(); using (var db = new AssignContext()) { //var assignList = db.Assign.Where(p => p.salegroupid == gid.Value); //foreach (var item in gids) //{ // assignList.AddRange(db.Assign.Where(p => p.salegroupid == item.Value).ToList()); //} var assigns = new List(); foreach (var rule in rules) { var id = rule.ch + "," + rule.eid + "," + rule.salegroupid; //var assign = assignList.FirstOrDefault(p => p.uniquekey == id); var assign = db.Assign.FirstOrDefault(p => p.uniquekey == id); if (assign == null) { var info = new Assign() { uniquekey = id, ch = rule.ch, eid = rule.eid, salegroupid = rule.salegroupid.Value }; assigns.Add(info); } } using (var trans = db.Database.BeginTransaction()) { try { foreach (var item in gids) { var removeRules = db.AssignRules.Where(p => p.salegroupid == item.Value); db.AssignRules.RemoveRange(removeRules); } db.AssignRules.AddRange(rules); db.Assign.AddRange(assigns); db.SaveChanges(); trans.Commit(); } catch (Exception ex) { LogHelper.Error(ex); trans.Rollback(); return false; } } } } return true; } public bool Reset(int ch, int sid) { using (var db = new AssignContext()) { var prams = new List { new MySqlParameter("@arg_ch", ch), new MySqlParameter("@arg_sid", sid) }; var ret = db.Database.ExecuteSqlCommand("call assign_resetAllocations(@arg_ch,@arg_sid)", prams.ToArray()); LogHelper.Info("ret:" + ret.ToString()); return ret >= 0; } } //public bool SetQuantity(int ch, int eid) //{ // using (var db = new AssignContext()) // { // var prams = new List // { // new MySqlParameter("@arg_ch", ch), // new MySqlParameter("@arg_eid", eid) // }; // var ret = db.Database.ExecuteSqlCommand("call assign_setquantity(@arg_ch,@arg_eid)", prams.ToArray()); // LogHelper.Info("ret:" + ret.ToString()); // return ret >= 0; // } //} public IEnumerable GetList(int ch) { using (var db = new AssignContext()) { var list = db.Assign.Where(p => p.ch == ch).ToList(); return list.Select(p => new AssignDto(p.eid, p.salegroupid, p.allocations, p.todayallocations, p.quantity, p.tgquantity)); } } } }