using System; using System.Data; using System.Linq; using System.Web.Mvc; using WX.CRM.BLL.Base; using WX.CRM.Common; using WX.CRM.IBLL.Util; using WX.CRM.IBLL.Wx; using WX.CRM.Model.Entity; using WX.CRM.WebHelper; namespace WX.CRM.WEB.Controllers.WeiXin { public class CommissionRuleController : BaseController { private readonly IWX_COMMISSIONRULE _wxCommissionrule; private readonly IWX_SZZYORDER _wxSzzyorder; private readonly ICACHE_Q _cache; private SEQUENCES_BL _sequencesBl = new SEQUENCES_BL(); ValidationErrors errors = new ValidationErrors(); public CommissionRuleController(IWX_COMMISSIONRULE wxCommissionrule, IWX_SZZYORDER wxSzzyorder, ICACHE_Q cache) { _wxCommissionrule = wxCommissionrule; _wxSzzyorder = wxSzzyorder; _cache = cache; } [HttpGet] [AuthorizeToolBar(InitRights.CONST_证星订单分成, InitToolBar.CONST_Add)] public ActionResult Edit() { decimal orderId = 0; decimal.TryParse(Request["orderid"], out orderId); var wxSzzyOrder = _wxSzzyorder.Get(p => p.ORDERID == orderId); if (wxSzzyOrder == null) { return JsonHandler.ManageMessage("参数错误,请确认!", false); } var model = new WX_COMMISSIONRULE_VIEW(); if (orderId > 0) { model.WxSzzyOrder = wxSzzyOrder; var wxCommissionRule = _wxCommissionrule.GetList(p => p.ORDERID == orderId).OrderBy(p => p.PKID); #region 加载分成显示 var i = 0; foreach (var wxCommissionrule in wxCommissionRule) { switch (i) { case 0: model.item0.EID = InnerUserHelper.Instance.GetEidByUserId(wxCommissionrule.SALEUSERID); model.item0.COMMISSIONRATIO = wxCommissionrule.COMMISSIONRATIO; model.item0.ISMAIN = wxCommissionrule.ISMAIN; break; case 1: model.item1.EID = InnerUserHelper.Instance.GetEidByUserId(wxCommissionrule.SALEUSERID); model.item1.COMMISSIONRATIO = wxCommissionrule.COMMISSIONRATIO; model.item1.ISMAIN = wxCommissionrule.ISMAIN; break; case 2: model.item2.EID = InnerUserHelper.Instance.GetEidByUserId(wxCommissionrule.SALEUSERID); model.item2.COMMISSIONRATIO = wxCommissionrule.COMMISSIONRATIO; model.item2.ISMAIN = wxCommissionrule.ISMAIN; break; case 3: model.item3.EID = InnerUserHelper.Instance.GetEidByUserId(wxCommissionrule.SALEUSERID); model.item3.COMMISSIONRATIO = wxCommissionrule.COMMISSIONRATIO; model.item3.ISMAIN = wxCommissionrule.ISMAIN; break; case 4: model.item4.EID = InnerUserHelper.Instance.GetEidByUserId(wxCommissionrule.SALEUSERID); model.item4.COMMISSIONRATIO = wxCommissionrule.COMMISSIONRATIO; model.item4.ISMAIN = wxCommissionrule.ISMAIN; break; case 5: model.item5.EID = InnerUserHelper.Instance.GetEidByUserId(wxCommissionrule.SALEUSERID); model.item5.COMMISSIONRATIO = wxCommissionrule.COMMISSIONRATIO; model.item5.ISMAIN = wxCommissionrule.ISMAIN; break; case 6: model.item6.EID = InnerUserHelper.Instance.GetEidByUserId(wxCommissionrule.SALEUSERID); model.item6.COMMISSIONRATIO = wxCommissionrule.COMMISSIONRATIO; model.item6.ISMAIN = wxCommissionrule.ISMAIN; break; } i++; } #endregion } return View(model); } [HttpPost] [AuthorizeToolBar(InitRights.CONST_证星订单分成, InitToolBar.CONST_Add)] public JsonResult Edit(WX_COMMISSIONRULE_VIEW info) { try { string v_str = string.Empty; if (!ValidationRatio(info, out v_str)) { errors.Add(v_str); return JsonHandler.ManageMessage(errors, false); } //if (CheckHasGrouper(info)) //{ // return JsonHandler.ManageMessage("分成人中不能包含主管,请确认!", false); //} decimal orderId = info.WxSzzyOrder.ORDERID; var orderModel = _wxSzzyorder.Get(p => p.ORDERID == orderId); if (orderModel == null) { return JsonHandler.ManageMessage("未查找到订单,请确认!", false); } //if (orderModel.ISFINANCEPAY.HasValue && orderModel.ISFINANCEPAY.Value == 1) //{ // return JsonHandler.ManageMessage("已经月结,不能执行该操作!", false); //} string roleCodes = DataCacheHelper.GetCache().Get_RoleCodes(userRoleId); if (!(roleCodes.Contains("[CW]") || roleCodes.Contains("[ZJZL]") || roleCodes.Contains("[SDZJ]"))) { if (!CheckDate(orderModel)) { return JsonHandler.ManageMessage("只能当天申请分成,请确认!", false); } } var isExists = _wxCommissionrule.Exists(p => p.ORDERID == orderId); if (!isExists) { CreateWxCommissionRuleList(info); } else { _wxCommissionrule.Delete(p => p.ORDERID == orderId); CreateWxCommissionRuleList(info); } #region 最后检查订单入库是否正确 var ruleList = _wxCommissionrule.GetList(p => p.ORDERID == orderId); decimal sumCommissionRatio = 0; foreach (var item in ruleList) { sumCommissionRatio += item.COMMISSIONRATIO; } if (sumCommissionRatio != 100) { return JsonHandler.ManageMessage("分成比例入库有误,请重新操作!", true); } #endregion return JsonHandler.ManageMessage("操作成功!", true); } catch (Exception ex) { LogHelper.Error("CommissionRuleController/Edit:" + ex.Message); return JsonHandler.ManageMessage(ex.Message, false); } } private void CreateWxCommissionRuleList(WX_COMMISSIONRULE_VIEW info) { string txt = string.Empty; if (info.item0.EID > 0) { CreateWxCommissionRule(info.WxSzzyOrder.ORDERID, info.WxSzzyOrder.SZZYORDERID, info.item0); txt += string.Format("{0}:{1}%", info.item0.EID, info.item0.COMMISSIONRATIO); } if (info.item1.EID > 0) { CreateWxCommissionRule(info.WxSzzyOrder.ORDERID, info.WxSzzyOrder.SZZYORDERID, info.item1); if (txt.Length > 0) txt += " "; txt += string.Format("{0}:{1}%", info.item1.EID, info.item1.COMMISSIONRATIO); } if (info.item2.EID > 0) { CreateWxCommissionRule(info.WxSzzyOrder.ORDERID, info.WxSzzyOrder.SZZYORDERID, info.item2); if (txt.Length > 0) txt += " "; txt += string.Format("{0}:{1}%", info.item2.EID, info.item2.COMMISSIONRATIO); } if (info.item3.EID > 0) { CreateWxCommissionRule(info.WxSzzyOrder.ORDERID, info.WxSzzyOrder.SZZYORDERID, info.item3); if (txt.Length > 0) txt += " "; txt += string.Format("{0}:{1}%", info.item3.EID, info.item3.COMMISSIONRATIO); } if (info.item4.EID > 0) { CreateWxCommissionRule(info.WxSzzyOrder.ORDERID, info.WxSzzyOrder.SZZYORDERID, info.item4); if (txt.Length > 0) txt += " "; txt += string.Format("{0}:{1}%", info.item4.EID, info.item4.COMMISSIONRATIO); } if (info.item5.EID > 0) { CreateWxCommissionRule(info.WxSzzyOrder.ORDERID, info.WxSzzyOrder.SZZYORDERID, info.item5); if (txt.Length > 0) txt += " "; txt += string.Format("{0}:{1}%", info.item5.EID, info.item5.COMMISSIONRATIO); } if (info.item6.EID > 0) { CreateWxCommissionRule(info.WxSzzyOrder.ORDERID, info.WxSzzyOrder.SZZYORDERID, info.item6); if (txt.Length > 0) txt += " "; txt += string.Format("{0}:{1}%", info.item6.EID, info.item6.COMMISSIONRATIO); } _wxSzzyorder.UpdateFCTXT(info.WxSzzyOrder.ORDERID, txt);//修改分成文本 } private int CreateWxCommissionRule(decimal orderId, decimal? szzyOrderId, WX_COMMISSIONRULE_ITEM item) { var wxCommissionRuleModel = new WX_COMMISSIONRULE() { PKID = _sequencesBl.Seq_base_get(), ORDERID = orderId, SZZYORDERID = szzyOrderId, SALEUSERID = InnerUserHelper.Instance.GetUserIdByEid(item.EID), COMMISSIONRATIO = item.COMMISSIONRATIO.Value, ISMAIN = item.ISMAIN, CREATEUSERID = UserId, CREATETIME = DateTime.Now }; return _wxCommissionrule.Add(wxCommissionRuleModel); } public string GetUserByEid(int EID) { var userName = InnerUserHelper.Instance.GetUsername(InnerUserHelper.Instance.GetUserIdByEid(EID)); if (string.IsNullOrEmpty(userName)) return string.Empty; //var isGrouper = _cache.GetGroupleaders().Any(p => p.EID == EID); //if (isGrouper) //{ // return userName + "," + "1"; //} return userName + "," + "0"; } #region 验证分成比例合计 private bool ValidationRatio(WX_COMMISSIONRULE_VIEW model, out string errorstr) { errorstr = ""; decimal sum = 0; if (model.item0.EID > 0) sum += model.item0.COMMISSIONRATIO.GetValueOrDefault(0); if (model.item1.EID > 0) sum += model.item1.COMMISSIONRATIO.GetValueOrDefault(0); if (model.item2.EID > 0) sum += model.item2.COMMISSIONRATIO.GetValueOrDefault(0); if (model.item3.EID > 0) sum += model.item3.COMMISSIONRATIO.GetValueOrDefault(0); if (model.item4.EID > 0) sum += model.item4.COMMISSIONRATIO.GetValueOrDefault(0); if (model.item5.EID > 0) sum += model.item5.COMMISSIONRATIO.GetValueOrDefault(0); if (model.item6.EID > 0) sum += model.item6.COMMISSIONRATIO.GetValueOrDefault(0); if (sum == 100) return true; errorstr = "分成合计不等于100%!"; return false; } #endregion private bool CheckHasGrouper(WX_COMMISSIONRULE_VIEW model) { var groupers = _cache.GetGroupleaders(); int sum = 0; if (model.item0.EID > 0) sum += groupers.Count(p => p.EID == model.item0.EID); if (model.item1.EID > 0) sum += groupers.Count(p => p.EID == model.item1.EID); if (model.item2.EID > 0) sum += groupers.Count(p => p.EID == model.item2.EID); if (model.item3.EID > 0) sum += groupers.Count(p => p.EID == model.item3.EID); if (model.item4.EID > 0) sum += groupers.Count(p => p.EID == model.item4.EID); if (model.item5.EID > 0) sum += groupers.Count(p => p.EID == model.item5.EID); if (model.item6.EID > 0) sum += groupers.Count(p => p.EID == model.item6.EID); if (sum > 0) return true; return false; } private bool CheckDate(WX_SZZYORDER order) { //未开通订单都能修改,不影响业绩,已开通的必须开通当天填写分成 if (order.ISOPEN == 0) return true; var today = DateTime.Parse(DateTime.Now.Date.ToString()); var tomorrow = DateTime.Parse(DateTime.Now.Date.AddDays(1).ToString()); return order.OTIME > today && order.OTIME < tomorrow; } } }