using JCSoft.WX.Framework.Api; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Http; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Common.Wechat; using Common; using System.Data; using ZcPeng.PublicLibrary; using CoreEntity.Entity; using Common.Model; using Newtonsoft.Json.Converters; using Newtonsoft.Json; using CoreEntity.DAL; using System.Data.SqlClient; using PublicLibrary.Model; using Microsoft.Extensions.Caching.Memory; using System.Globalization; using SupplierWeb.Codes.mvc; namespace SupplierWeb.Controllers { [Route("web/supplypush")] public class SupplyPushController : BaseController { public SupplyPushController(IMemoryCache cache, IApiClient client) : base(cache, client) { } ////根据采购计划-批量提交供货情况:添加提交状态 时间后 状态设置1 [AuthPermission] [HttpPost, Route("editfeedback")] public JsonResult EditFeedback(string Id, PushFeedback[] pfbs, [FromBody]dynamic data) { string userids; userids = getStaff("userid"); //判断参数是否合法 if (string.IsNullOrEmpty(userids)) { return Json(new { success = 0, msg="timeout 登陆超时", timeout =1 }); } int PushAccountId = Convert.ToInt32(userids); if (data != null) { //Newtonsoft.Json.Linq.JArray Id = data.Id; pfbs = data.pfbs.ToObject(); } string PushRecordId = Id; PushRecord rec = PushRecordDAL.GetRecord(Id); if (rec != null && rec.State == 1) return Json(new { success = 0, msg = "已经提交过!" }); List list = new List(); //int successAll = 1; #region 更新记录状态 string commandTextStateR = "UPDATE " + Config.TablePrefix + "PushRecord " + " SET SubmitTime = @SubmitTime, " + " SubmitPerson = @SubmitPerson, " + " State = 1 " + " WHERE Id = @PushRecordId " + " and PushAccountId = @PushAccountId " + " and (state IS NULL or state = 0)" + " and Id = @Id " ; //string resultStateR; //准备参数 List> parametersStateR = new List>(); parametersStateR.Add(new List() { "SubmitTime", DateTime.Now }); parametersStateR.Add(new List() { "SubmitPerson", PushAccountId }); parametersStateR.Add(new List() { "PushRecordId", PushRecordId }); parametersStateR.Add(new List() { "PushAccountId", PushAccountId }); parametersStateR.Add(new List() { "Id", Id }); List parametersStateR1 = DataAccess.ToParameters(parametersStateR); list.Add(new DataAccessCommand(commandTextStateR, parametersStateR1, CommandType.Text, true)); //int successStateR = DataAccess.ExecuteCommand(commandTextStateR, parametersStateR1, out resultStateR); //if (((string)resultStateR).StartsWith("在执行数据操作时发生错误")) //{ // successAll = 0; //} #endregion string resultState; #region 更新记录状态 foreach (PushFeedback pfb in pfbs) { int state = 1; if(pfb.StoreGapNum == 0) { //string contactid = ""; //if (pfb.ContactId.Split("_").Length > 0) // contactid = pfb.ContactId.Split("_")[0]; //ContactDAL.UpdatePushContactState(pfb.GoodsId, contactid, pfb.SuppliersId.Trim(), "N"); } if (pfb.StoreGapNum < pfb.PurchaseTotalNum) { state = 2; } string commandTextState = "UPDATE " + Config.TablePrefix + "PushFeedBack " + " SET " + " StoreGapNum = @StoreGapNum, " + " Feedback = @Feedback, " + " SubmitTime = @SubmitTime, " + " SubmitPerson = @SubmitPerson, " + " State = " + state +","+ " IsCancel = 0 " + " WHERE PushRecordId = @PushRecordId " + " and Id = @PushFeedbackId "+ " and PushAccountId = @PushAccountId "+ " and (state IS NULL or state = 0 or state in(5,6))" ; //准备参数 List> parametersState = new List>(); parametersState.Add(new List() { "StoreGapNum", pfb.StoreGapNum }); parametersState.Add(new List() { "Feedback", pfb.Feedback }); parametersState.Add(new List() { "SubmitTime", DateTime.Now }); parametersState.Add(new List() { "SubmitPerson", PushAccountId }); parametersState.Add(new List() { "PushRecordId", PushRecordId }); parametersState.Add(new List() { "PushFeedbackId", pfb.Id }); parametersState.Add(new List() { "PushAccountId", pfb.PushAccountId }); List parametersState1 = DataAccess.ToParameters(parametersState); list.Add(new DataAccessCommand(commandTextState, parametersState1, CommandType.Text, true)); //int successState = DataAccess.ExecuteCommand(commandTextState, parametersState1, out resultState); //if (((string)resultState).StartsWith("在执行数据操作时发生错误")) //{ // successAll = 0; //} } #endregion bool successAll = DataAccess.ExecuteBatchCommands(list, out resultState); return Json(new { success = successAll, msg = resultState, }); } ///供应商业务员二次确认:生成采购订单 开发票 ///1 供应商业务员确认(数量提交确认) 2 供应商业务员取消 3 采购员确认(生成计划) ///4 供应商业务员确认(二次确认 开票 生成采购订单) ///如果修改了数据(设置状态为2 按钮显示:修改并提交) 需要重新提交 [AuthPermission] [HttpPost, Route("confirmfeedback/{staffId}/{State:int}")] public JsonResult ConfirmFeedback(string Id, Int32 State, PushFeedbackExt[] pfbs, string staffId, [FromBody]dynamic data) { string userids; string LoginAccountId = userids = getStaff("userid"); //判断参数是否合法 if (string.IsNullOrEmpty(userids)) { return Json(new { success = 0, msg = "登陆超时", timeout = 1 }); } Int32 PushAccountId = Convert.ToInt32(userids); if (data != null) { //Newtonsoft.Json.Linq.JArray Id = data.Id; pfbs = data.pfbs ==null?new PushFeedbackExt[] { } : data.pfbs.ToObject(); } PushRecord rec = PushRecordDAL.GetRecord(Id); if (rec != null && rec.HasOrder == 1) return Json(new { success = 0, msg = "已经全部生成采购订单!" }); //List listAll = PushFeedBackDAL.GetFeedbacks(Id, " and PushAccountId = "+ PushAccountId); List list = PushFeedBackDAL.GetFeedbacks(Id, " and state in (3,2) and PushAccountId = "+ PushAccountId); Dictionary> groups = new Dictionary>(); foreach (PushFeedbackExt fb in list) { //初始化requestDate foreach(PushFeedbackExt fb0 in pfbs) { if (fb0.Id.Equals(fb.Id)) { //fb.StoreGapNum = fb0.StoreGapNum; //fb.Feedback = fb0.Feedback; fb.ReceiptMd = fb0.ReceiptMd; fb.RequestDate = fb0.RequestDate; } } //第一次初始化对方业务员(不是销售代表)id if (string.IsNullOrEmpty(fb.OppContId)) { var c = ContactDAL.getOppContactor(fb.BusinessId); fb.OppContId = c!=null?c.ContactId:""; } //if (fb.StoreGapNum > 0) { ContactDoc cd = ContactDAL.getContactor(fb.ContactId); string SuppliersId = fb.SuppliersId; if (cd != null) SuppliersId = cd.BusinessId; fb.SuppliersId = SuppliersId; fb.BusinessId = SuppliersId; var accountSuppliers = fb.PushAccountId + "_" + fb.SuppliersId; if (groups.ContainsKey(accountSuppliers)) { List to; groups.TryGetValue(accountSuppliers, out to); to.Add(fb); groups.Remove(accountSuppliers); groups.Add(accountSuppliers, to); } else { List to = new List(); to.Add(fb); groups.Add(accountSuppliers, to); } //} } //List result = new List(); List listcmd = new List(); foreach (string groupkey in groups.Keys) { IDictionary dic = new Dictionary(); List to; groups.TryGetValue(groupkey, out to); PushFeedbackExt fb0 = to.ToArray()[0];//根据第一条明细找到 当前业务员,供应商的采购计划 bool hasPlan = false; foreach (PushFeedbackExt feedback in to) { if (feedback.StoreGapNum > 0) hasPlan = true; } PurPlanMT PlanMT = null; //string StaffDocId = PlanMT.SaleManId; //待更新状态 Int32 OrderBillNo = 0; Int32 OrderBillCodeNo = 0; if (State == 4 )//生成采购订单 { //查询 plan #region 获取 plan if (!hasPlan) { continue; } var planlist = PurPlanDAL.GetPlanMT(Id, fb0.Id.ToString(), PushAccountId, fb0.SuppliersId).ToArray(); PlanMT = planlist[0]; //string reqdate = PlanMT.EndDate; decimal PrepayAmt = PlanMT.PrepayAmt; string IsPrepay = PlanMT.IsPrepay; #endregion #region 更新 plan 增加要求日期 发货方式 string commandTextRecord = "UPDATE PurPlanMT " + " SET " + " ReceiptMd = @ReceiptMd, " + " EndDate = @EndDate " + " WHERE PushRecordId= @RecordId" + " and SuppliersId= @SuppliersId" + " and BillState= 0" + " and PurObj = @PurObj "; //string resultPlan; //准备参数 List> parametersRecord = new List>(); parametersRecord.Add(new List() { "ReceiptMd", fb0.ReceiptMd }); parametersRecord.Add(new List() { "EndDate", fb0.RequestDate.ToString("yyyy-MM-dd") }); parametersRecord.Add(new List() { "RecordId", fb0.PushRecordId }); parametersRecord.Add(new List() { "SuppliersId", fb0.SuppliersId }); parametersRecord.Add(new List() { "PurObj", PushAccountId }); List parametersRecord1 = DataAccess.ToParameters(parametersRecord); listcmd.Add(new DataAccessCommand(commandTextRecord, parametersRecord1)); //int successPlan = DataAccess.ExecuteCommand(commandTextRecord, parametersRecord1, out resultPlan); //result.Add(successPlan); //result.Add(resultPlan); #endregion dic = PurOrderDAL.AddOrder(PushAccountId.ToString(), PlanMT.BillNo.ToString() , fb0.EntId, fb0.ReceiptMd, PlanMT.CentPayMd , PlanMT.OrgId, PlanMT.DeptId , "", fb0.Remark , fb0.GoodsId, fb0.SuppliersId , fb0.BusinessId, fb0.BusinessCode , PlanMT.SaleManId , fb0.RequestDate.ToString("yyyy-MM-dd") , fb0.ContactId , out OrderBillNo , out OrderBillCodeNo , PrepayAmt , IsPrepay , fb0.OppContId , listcmd); //result.Add(dic); if (OrderBillNo == 0|| OrderBillCodeNo == 0) { return Json(new { success = 0, result = (OrderBillNo == 0)?"获取billno自增失败": "获取OrderBillCodeNo自增失败", //successTemp = successTemp }); } //Object successRecord; //dic.TryGetValue("successRecord", out successRecord); //if ((int)successRecord == 0) successTemp = 0; } else if(State == 2 ) { if(PurPlanDAL.GetPlanMT(Id,"", PushAccountId, fb0.SuppliersId).Count > 0) { var deleteSuccess = PurPlanDAL.UpdatePlanDelete(fb0.SuppliersId, Id, PushAccountId, listcmd); } //if ((int)deleteSuccess == 0) successTemp = 0; } int index = 1; //string fieldTime = string.Empty; //string fieldPerson = string.Empty; //string fieldFilter = string.Empty; foreach (PushFeedbackExt feedback in to) { if (State == 2)//修改数据 { //fieldIsComplete = ",IsComplete = 0 "; //state = 2; //fieldFilter = " AND ((State = 0 OR State IS NULL) OR State in(5,6,3)) " + // " AND PushAccountId=" + PushAccountId; #region 更新记录状态 //string resultState; foreach (PushFeedbackExt pfb in pfbs) { if (pfb.Id.Equals(feedback.Id)) { //如果推送数量是0, 推送状态保持为推送 选下一个人 string contactid = pfb.ContactId; if (pfb.StoreGapNum == 0) { //ContactDAL.UpdatePushContactState(pfb.GoodsId, contactid, pfb.SuppliersId.Trim(), "Y",listcmd);//生成计划时设置推送状态 Y 这里不需要 } else {//不为0 推送状态设N 生成订单算在途 ContactDAL.UpdatePushContactState(pfb.GoodsId, contactid, pfb.SuppliersId.Trim(), "N", listcmd); } int state_pfb = 1; if (pfb.StoreGapNum < pfb.PurchaseTotalNum) { state_pfb = 2; } if(pfb.StoreGapNum == 0 && feedback.StoreGapNum == 0)//本来没有货不用改 { } else { string commandTextState = "UPDATE " + Config.TablePrefix + "PushFeedBack " + " SET " + " IsComplete = 0, " + " StoreGapNum = @StoreGapNum, " + " Feedback = @Feedback, " + " SubmitTime = @SubmitTime, " + " SubmitPerson = @SubmitPerson, " + " State = " + state_pfb + " WHERE PushRecordId = @PushRecordId " + " and Id = @PushFeedbackId " + " and PushAccountId = @PushAccountId " + " and (state in(3,2))" ; //准备参数 List> parametersState = new List>(); parametersState.Add(new List() { "StoreGapNum", pfb.StoreGapNum }); parametersState.Add(new List() { "Feedback", pfb.Feedback }); parametersState.Add(new List() { "SubmitTime", DateTime.Now }); parametersState.Add(new List() { "SubmitPerson", PushAccountId }); parametersState.Add(new List() { "PushRecordId", pfb.PushRecordId }); parametersState.Add(new List() { "PushFeedbackId", pfb.Id }); parametersState.Add(new List() { "PushAccountId", pfb.PushAccountId }); List parametersState1 = DataAccess.ToParameters(parametersState); listcmd.Add(new DataAccessCommand(commandTextState, parametersState1, CommandType.Text, true)); //int successState = DataAccess.ExecuteCommand(commandTextState, parametersState1, out resultState); //if (((string)resultState).StartsWith("在执行数据操作时发生错误")) //{ // successAll = 0; //} } } } #endregion } //#endregion //else //if (State == 1)//提交供货数量信息 //{ // fieldTime = "SubmitTime"; // fieldPerson = "SubmitPerson"; // state = 1; // fieldFilter = " AND (State = 0 OR State IS NULL OR State in(5,6) )"; //} else if (State == 4)//生成采购订单 { string contactid = feedback.ContactId.Trim(); //生成订单计算在途了推送状态全部设置为N ContactDAL.UpdatePushContactState(feedback.GoodsId, contactid, feedback.SuppliersId.Trim(), "N",listcmd); #region if (feedback.State == 3 ) { PurPlanDT plandt = PurPlanDAL.GetPlanDT(PlanMT.BillNo, feedback.Id.ToString()).ToArray()[0]; //Object successo; //dic.TryGetValue("successRecord", out successo); //if ((int)successo > 0) //{ IDictionary dicODAdd = PurOrderDAL.AddOrderDT(OrderBillNo, index, PlanMT.BillNo, plandt.BillSn, PlanMT.BillCode, feedback.GoodsId, feedback.GoodsSpec, feedback.StoreGapNum, feedback.ActPrice, feedback.PurPrice, feedback.Remark, PlanMT.EntId, PlanMT.OrgId, feedback.BusinessId, feedback.BusinessCode, feedback.SuppliersId, feedback.PurchaseTotalNum, plandt.SafeDays , PlanMT.SaleManId , listcmd); //result.Add(dicODAdd); //Object successRecord; //dicODAdd.TryGetValue("successRecord", out successRecord); //if ((int)successRecord > 0) //{ //增加更新hasOrder状态 和feedback记录的状态state int successOState = PurOrderDAL.UpdateOrderState(feedback.Id.ToString(), Id,PushAccountId,listcmd); //result.Add(successOState); } } #endregion index += 1; } } if (State == 4) { var tostate = 4; #region 更新 string commandText = "UPDATE " + Config.TablePrefix + "PushRecord " + " SET " + "ConfirmOrderTime = @ConfirmOrderTime, " + " ConfirmOrderPerson = @ConfirmOrderPerson, " + " HasOrder = 1, " + " State = @state " + " WHERE id= @Id " + " AND State = 3 " + " AND PushAccountId=" + PushAccountId; ; //string resultUp; //准备参数 List> parameters = new List>(); parameters.Add(new List() { "ConfirmOrderTime", DateTime.Now }); parameters.Add(new List() { "ConfirmOrderPerson", PushAccountId }); parameters.Add(new List() { "state", tostate }); parameters.Add(new List() { "Id", Id }); List parameters1 = DataAccess.ToParameters(parameters); listcmd.Add(new DataAccessCommand(commandText, parameters1)); //int success = DataAccess.ExecuteCommand(commandText, parameters1, out resultUp); //result.Add(success); //result.Add(resultUp); #endregion } if (State == 2) { var tostate = 2; #region 更新记录 string commandTextFeed = "UPDATE " + Config.TablePrefix + "PushRecord " + " SET " + "IsComplete = 0, " + " State = @state" + " WHERE Id= @Id " + " AND ((State = 0 OR State IS NULL) OR State in(5,6,3,2)) " + " AND PushAccountId=" + PushAccountId; //string resultFeed; //准备参数 List> parametersFeed = new List>(); parametersFeed.Add(new List() { "state", tostate }); parametersFeed.Add(new List() { "Id", Id }); List parametersFeed1 = DataAccess.ToParameters(parametersFeed); listcmd.Add(new DataAccessCommand(commandTextFeed, parametersFeed1)); //int successFeed = DataAccess.ExecuteCommand(commandTextFeed, parametersFeed1, out resultFeed); //result.Add(successFeed); //result.Add(resultFeed); #endregion } string resultstr; bool success = DataAccess.ExecuteBatchCommands(listcmd,out resultstr); return Json(new { success = success, result = resultstr, //successTemp = successTemp }); } } }