Browse Source

Merge branch 'master' of bwpgit:BWPB3/B3QingDaoWanFu

master
wushukun 7 years ago
parent
commit
dffa51c813
12 changed files with 867 additions and 77 deletions
  1. +13
    -0
      B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj
  2. +184
    -0
      B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs
  3. +32
    -0
      B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/SaleOutStoreList_Ext.cs
  4. +384
    -0
      B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs
  5. +74
    -66
      B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/CarLoadingBySendLinePage.cs
  6. +18
    -7
      B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/SaleOutstoreInfo.cs
  7. +2
    -0
      B3QingDaoWanFu.Web/PluginClass.cs
  8. +1
    -0
      B3QingDaoWanFu/B3QingDaoWanFu.csproj
  9. +3
    -3
      B3QingDaoWanFu/Tasks/SyncSaleOutStoreInfoToMES.cs
  10. +146
    -0
      B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs
  11. +8
    -1
      B3QingDaoWanFu/Utils/WanFuOnlineConfig.cs
  12. +2
    -0
      WebFolder/config/plugins/B3QingDaoWanFu.plugin

+ 13
- 0
B3QingDaoWanFu.Web/B3QingDaoWanFu.Web.csproj View File

@ -84,6 +84,10 @@
<HintPath>..\..\..\tsref\Debug\B3Sale.Web.dll</HintPath> <HintPath>..\..\..\tsref\Debug\B3Sale.Web.dll</HintPath>
<Private>False</Private> <Private>False</Private>
</Reference> </Reference>
<Reference Include="B3SaleInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3a973053c7ebf11c, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\tsref\Debug\B3SaleInterface.dll</HintPath>
</Reference>
<Reference Include="B3UnitedInfos, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a04fa581c0f74d43, processorArchitecture=MSIL"> <Reference Include="B3UnitedInfos, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a04fa581c0f74d43, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>D:\BwpB3Project\tsref\Debug\B3UnitedInfos.dll</HintPath> <HintPath>D:\BwpB3Project\tsref\Debug\B3UnitedInfos.dll</HintPath>
@ -183,9 +187,15 @@
<Compile Include="Pages\B3QingDaoWanFu\ExportUI\GoodsExportToMES.cs"> <Compile Include="Pages\B3QingDaoWanFu\ExportUI\GoodsExportToMES.cs">
<SubType>ASPXCodeBehind</SubType> <SubType>ASPXCodeBehind</SubType>
</Compile> </Compile>
<Compile Include="Pages\B3QingDaoWanFu\Overlays\OrderEdit_Ext.cs">
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="Pages\B3QingDaoWanFu\Overlays\PayList_Ext.cs"> <Compile Include="Pages\B3QingDaoWanFu\Overlays\PayList_Ext.cs">
<SubType>ASPXCodeBehind</SubType> <SubType>ASPXCodeBehind</SubType>
</Compile> </Compile>
<Compile Include="Pages\B3QingDaoWanFu\Overlays\SaleOutStoreList_Ext.cs">
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="Pages\B3QingDaoWanFu\Reports\PayAnalyse.cs"> <Compile Include="Pages\B3QingDaoWanFu\Reports\PayAnalyse.cs">
<SubType>ASPXCodeBehind</SubType> <SubType>ASPXCodeBehind</SubType>
</Compile> </Compile>
@ -201,6 +211,9 @@
<Compile Include="Pages\B3QingDaoWanFu\Overlays\WeightBillEdit_Ext.cs"> <Compile Include="Pages\B3QingDaoWanFu\Overlays\WeightBillEdit_Ext.cs">
<SubType>ASPXCodeBehind</SubType> <SubType>ASPXCodeBehind</SubType>
</Compile> </Compile>
<Compile Include="Pages\B3QingDaoWanFu\Reports\SaleSummaryReport_\SaleSummaryReport.cs">
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="Pages\B3QingDaoWanFu\TrustPay_\TrustPayList.cs"> <Compile Include="Pages\B3QingDaoWanFu\TrustPay_\TrustPayList.cs">
<SubType>ASPXCodeBehind</SubType> <SubType>ASPXCodeBehind</SubType>
</Compile> </Compile>


+ 184
- 0
B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/OrderEdit_Ext.cs View File

@ -0,0 +1,184 @@
using BWP.B3Frameworks.BO.NamedValueTemplate;
using BWP.B3Frameworks.Utils;
using BWP.B3Sale.BL;
using BWP.B3Sale.BO;
using BWP.Web.Actions;
using BWP.Web.Pages.B3Sale.Bills.Order_;
using Forks.EnterpriseServices.BusinessInterfaces;
using Forks.EnterpriseServices.DomainObjects2;
using Forks.EnterpriseServices.DomainObjects2.DQuery;
using Forks.EnterpriseServices.SqlDoms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TSingSoft.WebControls2;
using TSingSoft.WebPluginFramework;
namespace BWP.Web.Pages.B3QingDaoWanFu.Overlays
{
class OrderEdit_Ext : OrderEdit
{
protected override void AddActions(TSingSoft.WebControls2.ButtonGroup buttonGroup)
{
base.AddActions(buttonGroup);
if (!IsNew)
buttonGroup.Actions.Add(new SimpleServerAction("订单合并", () => CanSave, CombineOrder)
{
OnClientClick = "if(typeof(CheckDmoChanged) == 'function' && CheckDmoChanged()){ alert('您所要合并的单据还没有保存,请先保存单据后再操作'); return false;}"
});
}
void CombineOrder()
{
if (Dmo.LoadTime == null)
throw new Exception("订单发货时间不能为空");
if (Dmo.Customer_ID == null)
throw new Exception("购货客户不能为空");
using (var context = new TransactionContext())
{
EnsuState(context.Session);
var existInfo = GetExistOrderAndSaleOutStore(context.Session);
if (existInfo == null)
{
AspUtil.Alert(this, "无订单可合并!");
}
else
{
var ok = CombineOrder(context.Session, existInfo.Item1, existInfo.Item2.HasValue);
if (!ok)
return;
if (existInfo.Item2.HasValue)
CombineSaleOutStore(context.Session, existInfo.Item2.Value);
context.Commit();
NDmoSave(existInfo.Item1);
}
}
}
void EnsuState(IDmoSession session)
{
var rowVersion = InnerBLUtil.GetDmoPropertyByID<int>(session, typeof(Order), "RowVersion", Dmo.ID);
if (rowVersion != Dmo.RowVersion)
throw new Exception("当前单据已被更改,请重新打开");
}
Tuple<long, long?> GetExistOrderAndSaleOutStore(IDmoSession session)
{
var main = new JoinAlias("mOrder", typeof(Order));
var saleOut = new JoinAlias(typeof(SaleOutStore));
var query = new DQueryDom(main);
query.From.AddJoin(JoinType.Left, new DQDmoSource(saleOut), DQCondition.EQ(main, "ID", saleOut, "Order_ID"));
query.Columns.Add(DQSelectColumn.Field("ID"));
query.Columns.Add(DQSelectColumn.Field("ID", saleOut));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Customer_ID", Dmo.Customer_ID), DQCondition.EQ(DQExpression.Snippet("CAST([mOrder].[LoadTime] AS DATE)"), DQExpression.Value(Dmo.LoadTime.Value.Date)), DQCondition.InEQ("BillState", .)));
query.Where.Conditions.Add(DQCondition.Or(DQCondition.IsNull(DQExpression.Field(saleOut, "BillState")), DQCondition.EQ(saleOut, "BillState", .)));
if (!IsNew)
query.Where.Conditions.Add(DQCondition.InEQ("ID", Dmo.ID));
return query.EExecuteScalar<long, long?>(session);
}
bool CombineOrder(IDmoSession session, long id, bool existSaleOut)
{
var bl = BIFactory.Create<IOrderBL>(session);
var comb = bl.Load(id);
if (comb.Details.Any(x => Dmo.Details.Any(y => x.SaleGoods_ID == y.SaleGoods_ID && x.Price != y.Price)))
return false;
foreach (var detail in Dmo.Details)
{
var first = comb.Details.FirstOrDefault(x => x.SaleGoods_ID == detail.SaleGoods_ID);
if (first == null)
{
first = new Order_Detail();
DmoUtil.CopyDmoFields(detail, first, "ID", "Order_ID");
comb.Details.Add(first);
}
else
{
first.SecondNumber = (first.SecondNumber ?? 0).Value + (detail.SecondNumber ?? 0).Value;
first.UnitNum = (first.UnitNum ?? 0).Value + (detail.UnitNum ?? 0).Value;
first.Number = (first.Number ?? 0).Value + (detail.Number ?? 0).Value;
first.Money = (first.Money ?? 0).Value + (detail.Money ?? 0).Value;
}
if (existSaleOut)
{
first.AlreadyOutStoreUnitNum = (first.AlreadyOutStoreUnitNum ?? 0).Value + (detail.UnitNum ?? 0).Value;
first.AlreadyOutStoreNum = (first.AlreadyOutStoreNum ?? 0).Value + (detail.Number ?? 0).Value;
first.AlreadyOutStoreSecondNumber = (first.AlreadyOutStoreSecondNumber ?? 0).Value + (detail.SecondNumber ?? 0).Value;
}
}
if (existSaleOut)
{
comb.AlreadyOutStoreUnitNum = comb.Details.Sum(x => (x.AlreadyOutStoreUnitNum ?? 0).Value);
comb.AlreadyOutStoreNum = comb.Details.Sum(x => (x.AlreadyOutStoreNum ?? 0).Value);
comb.AlreadyOutStoreSecondNumber = comb.Details.Sum(x => (x.AlreadyOutStoreSecondNumber ?? 0).Value);
}
Dmo.OldOrderID = id;
UpdateOldOrderID(session);
SaleForecastBL.CreateOrderContext = null;
bl.Nullify(Dmo);
bl.Update(comb);
return true;
}
void UpdateOldOrderID(IDmoSession session)
{
var update = new DQUpdateDom(typeof(Order));
update.Columns.Add(new DQUpdateColumn("OldOrderID", Dmo.OldOrderID));
update.Where.Conditions.Add(DQCondition.EQ("ID", Dmo.ID));
session.ExecuteNonQuery(update);
}
void CombineSaleOutStore(IDmoSession session, long id)
{
var bl = BIFactory.Create<ISaleOutStoreBL>(session);
var saleOut = bl.Load(id);
foreach (var orderDetail in Dmo.Details)
{
var first = saleOut.Details.FirstOrDefault(x => x.SaleGoods_ID == orderDetail.SaleGoods_ID);
if (first == null)
{
first = new SaleOutStore_Detail();
DmoUtil.CopyDmoFields(orderDetail, first, "ID");
first.Order_DetailID = orderDetail.ID;
first.Order_Detail_Number = orderDetail.Number;
first.Order_Detail_SecondNumber = orderDetail.SecondNumber;
first.Order_Detail_UnitNum = orderDetail.UnitNum;
first.HiddenUnitNum = orderDetail.UnitNum;
first.HiddenNumber = orderDetail.Number;
first.HiddenSecondNumber = orderDetail.SecondNumber;
first.IsOutsourcing = orderDetail.IsOutsourcing;
saleOut.Details.Add(first);
}
else
{
first.SecondNumber = (first.SecondNumber ?? 0).Value + (orderDetail.SecondNumber ?? 0).Value;
first.UnitNum = (first.UnitNum ?? 0).Value + (orderDetail.UnitNum ?? 0).Value;
first.Number = (first.Number ?? 0).Value + (orderDetail.Number ?? 0).Value;
first.Money = (first.Money ?? 0).Value + (orderDetail.Money ?? 0).Value;
}
}
bl.Update(saleOut);
}
void NDmoSave(long id)
{
var blMessage = BIFactory.GetLastMessage();
var url = Request.RawUrl;
if (IsNew)
{
url = AspUtil.RemoveUrlParam(url, "ReferToID");
url = AspUtil.AddParamToUrl(url, "ID", id.ToString());
}
var message = "合并成功!";
if (!string.IsNullOrEmpty(blMessage))
{
message += "\r\n" + blMessage;
}
AspUtil.RedirectAndAlert(this, url, message);
}
}
}

+ 32
- 0
B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Overlays/SaleOutStoreList_Ext.cs View File

@ -0,0 +1,32 @@
using BWP.B3Sale.BO;
using BWP.Web.Pages.B3Sale.Bills.SaleOutStore_;
using Forks.EnterpriseServices.DomainObjects2;
using Forks.EnterpriseServices.DomainObjects2.DQuery;
using Forks.EnterpriseServices.SqlDoms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BWP.Web.Pages.B3QingDaoWanFu.Overlays
{
class SaleOutStoreList_Ext : SaleOutStoreList
{
protected override DQueryDom GetQueryDom()
{
var query = base.GetQueryDom();
query.OrderBy.Expressions.Clear();
//if (query.OrderBy.Expressions.Count == 0)
//{
var root = query.From.RootSource.Alias;
var lineDetail = new JoinAlias("lineDetail", typeof(DeliverGoodsLine_Detail));
query.From.AddJoin(JoinType.Left, new DQDmoSource(lineDetail), DQCondition.And(DQCondition.EQ(root, "DeliverGoodsLine_ID", lineDetail, "DeliverGoodsLine_ID"), DQCondition.EQ(root, "Customer_ID", lineDetail, "Customer_ID")));
query.OrderBy.Expressions.Add(DQOrderByExpression.Create(root, "SequenceNumber"));
query.OrderBy.Expressions.Add(DQOrderByExpression.Create(lineDetail, "SequenceNumber"));
//}
return query;
}
}
}

+ 384
- 0
B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.cs View File

@ -0,0 +1,384 @@
using BWP.B3Frameworks;
using BWP.B3Frameworks.BO;
using BWP.B3Frameworks.BO.MoneyTemplate;
using BWP.B3Frameworks.BO.NamedValueTemplate;
using BWP.B3Sale.BO;
using BWP.Web.Utils;
using Forks.EnterpriseServices.DomainObjects2;
using Forks.EnterpriseServices.DomainObjects2.DQuery;
using Forks.EnterpriseServices.SqlDoms;
using Forks.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI;
using TSingSoft.WebControls2;
using TSingSoft.WebPluginFramework;
namespace BWP.Web.Pages.B3QingDaoWanFu.Reports.SaleSummaryReport_
{
class SaleSummaryReport : ClickQueryReportPage
{
protected override string AccessRoleName
{
get { return "B3QingDaoWanFu.报表.销售统计表"; }
}
protected override string Caption
{
get { return "销售统计表"; }
}
protected override void InitDFGrid(DFGrid mDfGrid)
{
base.InitDFGrid(mDfGrid);
mDfGrid.AllowRowGroup = true;
mDfGrid.AllowColGroup = true;
mDfGrid.AllowSorting = true;
mDfGrid.HeaderPagerLock = true;
}
DateTime SelectDate
{
get
{
if (ViewState["SelectDate"] == null)
ViewState["SelectDate"] = DateTime.Today;
return (DateTime)ViewState["SelectDate"];
}
set { ViewState["SelectDate"] = value; }
}
static FilterTree monthTree, dayTree;
protected override void CreateQueryPanel(VLayoutPanel vPanel)
{
var tablePanel = vPanel.Add(new TableLayoutPanel(1, 4), new VLayoutOption(System.Web.UI.WebControls.HorizontalAlign.Justify));
tablePanel.Add(0, 1, 0, 1, CreateMonth());
tablePanel.Add(0, 1, 1, 2, CreateDay());
tablePanel.Add(0, 1, 2, 3, CreateFirstDept());
tablePanel.Add(0, 1, 3, 4, CreateSecondDept());
}
private Control CreateMonth()
{
monthTree = new FilterTree() { DisableCancelSelectButton = true };
monthTree.HorizontalRepeatColumns = 10;
this.Load += delegate
{
if (!IsPostBack)
{
monthTree.DataSource.Childs.Clear();
var selected = false;
for (var i = 0; i < 6; i++)
{
var date = DateTime.Today.AddMonths(i - 5);
var v = date.ToString("yyyy-MM");
var node = new FilterTreeNode(v, v, date);
if (!selected && date.Year == SelectDate.Year && date.Month == SelectDate.Month)
{
node.Selected = true;
selected = true;
}
monthTree.DataSource.Childs.Add(node);
}
}
};
monthTree.Select += (sender, e) =>
{
var dt = (DateTime)monthTree.GetSelecteItem().Tag;
SelectDate = new DateTime(dt.Year, dt.Month, Math.Min(SelectDate.Day, DateTime.DaysInMonth(dt.Year, dt.Month)));
BuildDayTree();
};
monthTree.FilterAction = (query, node) => { };
mTreeContainer.Add("monthTree", monthTree);
return monthTree;
}
private Control CreateDay()
{
dayTree = new FilterTree() { DisableCancelSelectButton = true };
dayTree.HorizontalRepeatColumns = 31;
this.Load += delegate
{
if (!IsPostBack)
BuildDayTree();
};
dayTree.Select += (sender, e) =>
{
SelectDate = new DateTime(SelectDate.Year, SelectDate.Month, int.Parse(dayTree.GetSelecteItem().Value));
};
dayTree.FilterAction = (query, node) => { };
mTreeContainer.Add("dayTree", dayTree);
return dayTree;
}
void BuildDayTree()
{
dayTree.DataSource.Childs.Clear();
var total = DateTime.DaysInMonth(SelectDate.Year, SelectDate.Month);
bool selected = false;
for (var i = 1; i <= total; i++)
{
var node = new FilterTreeNode(i.ToString(), i.ToString());
if (!selected && SelectDate.Day == i)
{
node.Selected = true;
selected = true;
}
dayTree.DataSource.Childs.Add(node);
}
}
List<Tuple<long, string, int>> FirstDepts
{
get
{
if (ViewState["FirstDepts"] == null)
ViewState["FirstDepts"] = GetFirstDepts();
return (List<Tuple<long, string, int>>)ViewState["FirstDepts"];
}
set { ViewState["FirstDepts"] = value; }
}
List<Tuple<long, string, int>> GetFirstDepts()
{
var dept = SaleDepartmentInfo;
var query = new DQueryDom(new JoinAlias(typeof(Department)));
query.Columns.Add(DQSelectColumn.Field("ID"));
query.Columns.Add(DQSelectColumn.Field("Name"));
query.Columns.Add(DQSelectColumn.Field("Depth"));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("Stopped", false), DQCondition.EQ("Depth", dept.Item2 + 1)));
query.Where.Conditions.Add(DQCondition.EQ(string.Format("TreeDeep{0}ID", dept.Item2), dept.Item1));
query.OrderBy.Expressions.Add(DQOrderByExpression.Create("ID"));
return query.EExecuteList<long, string, int>();
}
Tuple<long, int> SaleDepartmentInfo
{
get
{
if (ViewState["SaleDepartmentInfo"] == null)
{
var dept = WebBLUtil.GetSingleDmo<Department>("Name", "销售部", "ID", "Depth");
if (dept == null)
throw new Exception("没有名称为销售部的部门");
ViewState["SaleDepartmentInfo"] = new Tuple<long, int>(dept.ID, dept.Depth);
}
return (Tuple<long, int>)ViewState["SaleDepartmentInfo"];
}
}
List<Tuple<long, string, int>> SecondDepts
{
get
{
if (ViewState["SecondDepts"] == null)
ViewState["SecondDepts"] = GetSecondDepts();
return (List<Tuple<long, string, int>>)ViewState["SecondDepts"];
}
set { ViewState["SecondDepts"] = value; }
}
List<Tuple<long, string, int>> GetSecondDepts()
{
var selectedItem = firstFilterTree.GetSelecteItem();
if (!selectedItem.Selected || string.IsNullOrEmpty(selectedItem.Value))
return new List<Tuple<long, string, int>>();
var info = selectedItem.Tag as Tuple<long, string, int>;
var query = new DQueryDom(new JoinAlias(typeof(Department)));
query.Columns.Add(DQSelectColumn.Field("ID"));
query.Columns.Add(DQSelectColumn.Field("Name"));
query.Columns.Add(DQSelectColumn.Field("Depth"));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.EQ("Stopped", false), DQCondition.EQ("Depth", info.Item3 + 1)));
query.Where.Conditions.Add(DQCondition.EQ(string.Format("TreeDeep{0}ID", info.Item3), info.Item1));
query.OrderBy.Expressions.Add(DQOrderByExpression.Create("ID"));
return query.EExecuteList<long, string, int>();
}
static FilterTree firstFilterTree;
private Control CreateFirstDept()
{
firstFilterTree = new FilterTree() { AllLinkOnFirst = true };
firstFilterTree.HorizontalRepeatColumns = 10;
this.Load += delegate
{
if (!IsPostBack)
{
firstFilterTree.DataSource.Childs.Clear();
foreach (var item in FirstDepts)
{
var node = new FilterTreeNode(item.Item2, item.Item1.ToString());
node.Tag = item;
firstFilterTree.DataSource.Childs.Add(node);
}
}
};
mTreeContainer.Add("First", firstFilterTree);
firstFilterTree.Select += (sender, e) =>
{
SecondDepts = GetSecondDepts();
BuildSecond();
};
firstFilterTree.FilterAction = (query, node) =>
{
if (!string.IsNullOrEmpty(node.Value))
{
var info = node.Tag as Tuple<long, string, int>;
query.Where.Conditions.Add(DQCondition.EQ(JoinAlias.Create("dept"), string.Format("TreeDeep{0}ID", info.Item3), info.Item1));
}
};
return firstFilterTree;
}
void BuildSecond()
{
secondFilterTree.DataSource.Childs.Clear();
foreach (var item in SecondDepts)
{
var node = new FilterTreeNode(item.Item2, item.Item1.ToString());
node.Tag = item;
secondFilterTree.DataSource.Childs.Add(node);
}
}
static FilterTree secondFilterTree;
private Control CreateSecondDept()
{
secondFilterTree = new FilterTree() { AllLinkOnFirst = true };
secondFilterTree.HorizontalRepeatColumns = 10;
this.Load += delegate
{
if (!IsPostBack)
BuildSecond();
};
mTreeContainer.Add("Second", secondFilterTree);
secondFilterTree.FilterAction = (query, node) =>
{
if (!string.IsNullOrEmpty(node.Value))
{
var info = node.Tag as Tuple<long, string, int>;
query.Where.Conditions.Add(DQCondition.EQ(JoinAlias.Create("dept"), string.Format("TreeDeep{0}ID", info.Item3), info.Item1));
}
};
return secondFilterTree;
}
readonly string[] goodsBrand = new string[] { "条类", "分割品", "副产品", "冻品" };
protected override DQueryDom GetQueryDom()
{
var saleDepth = SaleDepartmentInfo.Item2;
var main = new JoinAlias(typeof(TempClass));
var dept = new JoinAlias("dept", typeof(Department));
var _3Dept = new JoinAlias("_3Dept", typeof(Department));
var customer = new JoinAlias(typeof(Customer));
var goods = new JoinAlias(typeof(SaleGoods));
var query = new DQueryDom(main);
TempClass.Register(query, SelectDate);
query.From.AddJoin(JoinType.Left, new DQDmoSource(dept), DQCondition.EQ(main, "Department_ID", dept, "ID"));
query.From.AddJoin(JoinType.Left, new DQDmoSource(_3Dept), DQCondition.EQ(DQExpression.LogicCase(DQCondition.GreaterThanOrEqual(dept, "Depth", saleDepth + 3), DQExpression.Field(dept, string.Format("TreeDeep{0}ID", SaleDepartmentInfo.Item2 + 3)), DQCondition.EQ(dept, "Depth", saleDepth + 2), DQExpression.Field(dept, string.Format("TreeDeep{0}ID", SaleDepartmentInfo.Item2 + 2)), DQExpression.Field(dept, string.Format("TreeDeep{0}ID", SaleDepartmentInfo.Item2 + 1))), DQExpression.Field(_3Dept, "ID")));
query.From.AddJoin(JoinType.Left, new DQDmoSource(customer), DQCondition.EQ(main, "Customer_ID", customer, "ID"));
query.From.AddJoin(JoinType.Left, new DQDmoSource(goods), DQCondition.EQ(main, "Goods_ID", goods, "ID"));
query.Columns.Add(DQSelectColumn.Field("Name", _3Dept, "销售部门"));
query.GroupBy.Expressions.Add(DQExpression.Field(_3Dept, "Name"));
query.Columns.Add(DQSelectColumn.Field("ExtensionsCatalog1_Name", customer, "客户分类"));
query.GroupBy.Expressions.Add(DQExpression.Field(customer, "ExtensionsCatalog1_Name"));
query.GroupBy.Expressions.Add(DQExpression.Field(_3Dept, "ID"));
query.OrderBy.Expressions.Add(DQOrderByExpression.Create(_3Dept, "ID"));
foreach (var item in goodsBrand)
{
if (item == "条类")
{
query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 2)), DQExpression.Field("SecondNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType<Money<>?>(), item + "|上周日均头数"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 1)), DQExpression.Field("SecondNumber"), DQExpression.NULL)).ECastType<Money<decimal>?>(), item + "|头数"));
}
query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 2)), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType<Money<>?>(), item + "|上周日均重量"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", item), DQCondition.EQ("Type", 1)), DQExpression.Field("MainNumber"), DQExpression.NULL)).ECastType<Money<decimal>?>(), item + "|重量"));
}
query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ("Type", 2), DQCondition.InEQ(goods, "Brand", "熟食")), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType<Money<>?>(), "上周日均重量"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ("Type", 1), DQCondition.InEQ(goods, "Brand", "熟食")), DQExpression.Field("MainNumber"), DQExpression.NULL)).ECastType<Money<decimal>?>(), "当日重量合计"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Divide(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", "熟食"), DQCondition.EQ("Type", 2)), DQExpression.Field("MainNumber"), DQExpression.NULL)), DQExpression.Value(7)).ECastType<Money<>?>(), "熟食|上周日均重量"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.EQ(goods, "Brand", "熟食"), DQCondition.EQ("Type", 1)), DQExpression.Field("MainNumber"), DQExpression.NULL)).ECastType<Money<decimal>?>(), "熟食|重量"));
var idx = 0;
foreach (var col in query.Columns)
{
ColumnNames.Add(col.Name);
if (idx > 1)
{
SumColumnNames.Add(col.Name);
GroupSumColumnNamnes.Add(col.Name);
}
idx++;
}
return query;
}
class TempClass
{
public long? Department_ID { get; set; }
public long? Customer_ID { get; set; }
public long? Goods_ID { get; set; }
public int Type { get; set; }
public Money<decimal>? MainNumber { get; set; }
public Money<decimal>? SecondNumber { get; set; }
public static void Register(DQueryDom root, DateTime date)
{
var q1 = GetSaleOutStore(true, date);
q1.UnionNext.Select = GetSaleOutStore(false, date);
root.RegisterQueryTable(typeof(TempClass), new string[] { "Department_ID", "Customer_ID", "Goods_ID", "Type", "MainNumber", "SecondNumber" }, q1);
}
static DQueryDom GetSaleOutStore(bool today, DateTime date)
{
var main = new JoinAlias(today + "M", typeof(SaleOutStore));
var detail = new JoinAlias(today + "D", typeof(SaleOutStore_Detail));
//var dept = new JoinAlias("dept", typeof(Department));
var query = new DQueryDom(main);
query.From.AddJoin(JoinType.Inner, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "SaleOutStore_ID"));
// query.From.AddJoin(JoinType.Left, new DQDmoSource(dept), DQCondition.EQ(main, "Department_ID", dept, "ID"));
query.Columns.Add(DQSelectColumn.Field("Department_ID", main));
query.Columns.Add(DQSelectColumn.Field("Customer_ID", main));
query.Columns.Add(DQSelectColumn.Field("SaleGoods_ID", detail));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(today ? 1 : 2), "Type"));
query.Columns.Add(DQSelectColumn.Field("UnitNum", detail));
query.Columns.Add(DQSelectColumn.Field("SecondNumber", detail));
var timeRange = GetDateRange(today, date);
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Domain_ID", DomainContext.Current.ID), DQCondition.GreaterThanOrEqual("BillState", .), DQCondition.Between("LoadTime", timeRange.Item1, timeRange.Item2)));
return query;
}
static Tuple<DateTime, DateTime> GetDateRange(bool today, DateTime date)
{
if (today)
return new Tuple<DateTime, DateTime>(date, date + new TimeSpan(23, 59, 59));
var d = (int)date.DayOfWeek;
if (date.DayOfWeek == DayOfWeek.Sunday)
d = 7;
var beforeWeek = date.AddDays(-d);
return new Tuple<DateTime, DateTime>(beforeWeek.AddDays(-6), beforeWeek);
}
}
}
}

+ 74
- 66
B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/CarLoadingBySendLinePage.cs View File

@ -26,7 +26,7 @@ using TSingSoft.WebPluginFramework.Controls;
namespace BWP.Web.Pages.B3QingDaoWanFu.Tools namespace BWP.Web.Pages.B3QingDaoWanFu.Tools
{ {
class CarLoadingBySendLinePage:AppBasePage
class CarLoadingBySendLinePage : AppBasePage
{ {
private readonly DFInfo _dFInfo = DFInfo.Get(typeof(SaleOutStore)); private readonly DFInfo _dFInfo = DFInfo.Get(typeof(SaleOutStore));
@ -58,7 +58,9 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Tools
var btnSearch = new TSButton("开始查询", (sender, e) => var btnSearch = new TSButton("开始查询", (sender, e) =>
{ {
_slGrid.Query = GetSendLineQuery(_slQueryContainer.Build(), _slChbHidden.Checked);
var min = (DateTime?)_slQueryContainer.GetInput("MinLoadTime");
var max = (DateTime?)_slQueryContainer.GetInput("MaxLoadTime");
_slGrid.Query = GetSendLineQuery(_slQueryContainer.Build(), _slChbHidden.Checked, min, max);
_slGrid.DataBind(); _slGrid.DataBind();
}); });
@ -99,8 +101,8 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Tools
private void CreateSendLineGridColumns() private void CreateSendLineGridColumns()
{ {
_slGrid.Columns.Add(new DFBrowseGridColumn("路线")); _slGrid.Columns.Add(new DFBrowseGridColumn("路线"));
_slGrid.Columns.Add(new DFBrowseGridColumn("辅数量"));
// _slGrid.Columns.Add(new DFBrowseGridColumn("AllUnitNum"));
_slGrid.Columns.Add(new DFBrowseGridColumn("SecondNumber", "辅数量"));
// _slGrid.Columns.Add(new DFBrowseGridColumn("AllUnitNum"));
var allUnitNumcol = new DFBrowseGridCustomExtColumn((row, cell, rowIndex) => var allUnitNumcol = new DFBrowseGridCustomExtColumn((row, cell, rowIndex) =>
{ {
var allUnitNum = _slGrid.CurrentData.Data.Rows[rowIndex]["AllUnitNum"]; var allUnitNum = _slGrid.CurrentData.Data.Rows[rowIndex]["AllUnitNum"];
@ -139,11 +141,10 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Tools
}; };
cell.Controls.Add(link); cell.Controls.Add(link);
cell.Align = "right"; cell.Align = "right";
})
{ HeaderText = "报价数量" };
}) { HeaderText = "报价数量" };
_slGrid.Columns.EAdd(allUnitNumcol); _slGrid.Columns.EAdd(allUnitNumcol);
_slGrid.Columns.Add(new DFBrowseGridColumn("已派车数量"));
_slGrid.Columns.Add(new DFBrowseGridColumn("AlreadyNumber", "已派车数量"));
var thisTimeLoadNum = new DFBrowseGridCustomExtColumn((row, cell, rowIndex) => var thisTimeLoadNum = new DFBrowseGridCustomExtColumn((row, cell, rowIndex) =>
{ {
var x = new Label(); var x = new Label();
@ -152,8 +153,7 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Tools
x.Text = num.ToString(); x.Text = num.ToString();
cell.Controls.Add(x); cell.Controls.Add(x);
cell.Align = "right"; cell.Align = "right";
})
{ HeaderText = "本次派车数量" };
}) { HeaderText = "本次派车数量" };
_slGrid.Columns.Add(thisTimeLoadNum); _slGrid.Columns.Add(thisTimeLoadNum);
var staffColumn = new DFEditGridColumn<DFChoiceBox>("业务员ID"); var staffColumn = new DFEditGridColumn<DFChoiceBox>("业务员ID");
staffColumn.InitEditControl += (sender, e) => staffColumn.InitEditControl += (sender, e) =>
@ -233,8 +233,8 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Tools
_slGrid.DataBind(); _slGrid.DataBind();
AspUtil.Alert(this, msg); AspUtil.Alert(this, msg);
// _carLoadingGrid.DataBind();
// _carLoadingGrid.DataBind();
} }
else else
{ {
@ -247,76 +247,84 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Tools
} }
private class AreadyLoadBill
{
public long SaleOutStore_ID { get; set; }
}
public static DQueryDom GetSendLineQuery(DQueryDom dom, bool hidden)
public static DQueryDom GetSendLineQuery(DQueryDom dom, bool hidden, DateTime? min, DateTime? max)
{ {
var areadyLoadBill = new JoinAlias("AreadyLoadBill", typeof(AreadyLoadBill));
var main = new JoinAlias(typeof(temp2));
var query = new DQueryDom(main);
OrganizationUtil.RegisterOrganizationQueryTable(query);
AreadyLoadBill.Register(query, min, max);
temp2.Register(query, dom, hidden);
var sendLine = new JoinAlias("SendLine", typeof(DeliverGoodsLine)); var sendLine = new JoinAlias("SendLine", typeof(DeliverGoodsLine));
var sendLineDetail = new JoinAlias(typeof(DeliverGoodsLine_Detail));
dom.From.AddJoin(JoinType.Left, new DQDmoSource(sendLineDetail), DQCondition.EQ(sendLineDetail, "Customer_ID", dom.From.RootSource.Alias, "Customer_ID"));
dom.From.AddJoin(JoinType.Left, new DQDmoSource(sendLine), DQCondition.EQ(sendLineDetail, "DeliverGoodsLine_ID", sendLine, "ID"));
dom.RegisterQueryTable(typeof(AreadyLoadBill), new List<string> { "SaleOutStore_ID" }, GetTemDom());
dom.From.AddJoin(JoinType.Left, new DQDmoSource(areadyLoadBill), DQCondition.EQ(areadyLoadBill, "SaleOutStore_ID", dom.From.RootSource.Alias, "ID"));
dom.Columns.Clear();
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "ID"), "路线ID"));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Name"), "路线"));
dom.GroupBy.Expressions.Add(DQExpression.Field(sendLine, "ID"));
dom.GroupBy.Expressions.Add(DQExpression.Field(sendLine, "Name"));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("AllUnitNum")), "AllUnitNum"));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("SecondNumber")), "辅数量"));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.GreaterThan(DQExpression.Field(areadyLoadBill, "SaleOutStore_ID"), DQExpression.Snippet<long>("0")), DQExpression.Field("AllUnitNum"), DQExpression.NULL)), "已派车数量"));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<Money<decimal>?>("null"), "本次派车数量"));
// dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<long?>("null"), "业务员ID"));
// dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<string>("''"), "业务员"));
query.From.AddJoin(JoinType.Left, new DQDmoSource(sendLine), DQCondition.EQ(main, "DeliverGoodsLine_ID", sendLine, "ID"));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Employee_ID"), "业务员ID"));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Employee_Name"), "业务员"));
dom.GroupBy.Expressions.Add(DQExpression.Field(sendLine, "Employee_ID"));
dom.GroupBy.Expressions.Add(DQExpression.Field(sendLine, "Employee_Name"));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Employee_ID"), "送货人员ID"));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Employee_Name"), "送货人员"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "ID"), "路线ID"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Name"), "路线"));
query.Columns.Add(DQSelectColumn.Field("AllUnitNum", main));
query.Columns.Add(DQSelectColumn.Field("SecondNumber", main));
query.Columns.Add(DQSelectColumn.Field("AlreadyNumber", main));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<Money<decimal>?>("null"), "本次派车数量"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Employee_ID"), "业务员ID"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Employee_Name"), "业务员"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Employee_ID"), "送货人员ID"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Employee_Name"), "送货人员"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Car_ID"), "车辆ID"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Car_Name"), "车辆"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<string>("''"), "Remark"));
return query;
}
// dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<long?>("null"), "送货人员ID"));
// dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<string>("''"), "送货人员"));
class temp2
{
public long? DeliverGoodsLine_ID { get; set; }
public Money<decimal>? AllUnitNum { get; set; }
public Money<decimal>? SecondNumber { get; set; }
public Money<decimal>? AlreadyNumber { get; set; }
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine,"Car_ID"), "车辆ID"));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Field(sendLine, "Car_Name"), "车辆"));
dom.GroupBy.Expressions.Add(DQExpression.Field(sendLine, "Car_ID"));
dom.GroupBy.Expressions.Add(DQExpression.Field(sendLine, "Car_Name"));
// dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<long?>("null"), "车辆ID"));
// dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<string>("''"), "车辆"));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Snippet<string>("''"), "Remark"));
dom.Where.Conditions.Add(DQCondition.EQ("BillState", .));
dom.Where.Conditions.Add(DQCondition.EQ("TakeGoods_Type", .));
dom.Where.Conditions.Add(DQCondition.GreaterThan(DQExpression.IfNull(DQExpression.Field(sendLine, "ID"), DQExpression.Snippet<long>("0")), DQExpression.Snippet<long>("0")));
dom.Where.Conditions.Add(DQCondition.Or(
DQCondition.InEQ(DQExpression.Field("AllUnitNum"), DQExpression.Snippet<Money<decimal>?>("0")),
DQCondition.InEQ(DQExpression.Field("SecondNumber"), DQExpression.Snippet<Money<decimal>?>("0"))));
if (hidden)
public static void Register(DQueryDom root, DQueryDom dom, bool hidden)
{ {
dom.Having.Conditions.Add(DQCondition.InEQ(DQExpression.Count(DQExpression.Field("ID")), DQExpression.Count(DQExpression.Field(areadyLoadBill, "SaleOutStore_ID"))));
}
var areadyLoadBill = new JoinAlias("AreadyLoadBill", typeof(AreadyLoadBill));
dom.From.AddJoin(JoinType.Left, new DQDmoSource(areadyLoadBill), DQCondition.EQ(areadyLoadBill, "SaleOutStore_ID", dom.From.RootSource.Alias, "ID"));
OrganizationUtil.AddOrganizationLimit(dom,typeof(SaleOutStore));
return dom;
dom.Columns.Clear();
dom.Columns.Add(DQSelectColumn.Field("DeliverGoodsLine_ID"));
dom.GroupBy.Expressions.Add(DQExpression.Field("DeliverGoodsLine_ID"));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("AllUnitNum")), "AllUnitNum"));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("SecondNumber")), "辅数量"));
dom.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.IsNull(DQExpression.Field(areadyLoadBill, "SaleOutStore_ID")), DQExpression.NULL, DQExpression.Field("AllUnitNum"))), "已派车数量"));
dom.Where.Conditions.Add(DQCondition.EQ("BillState", .));
dom.Where.Conditions.Add(DQCondition.EQ("TakeGoods_Type", .));
dom.Where.Conditions.Add(DQCondition.IsNotNull(DQExpression.Field("DeliverGoodsLine_ID")));
dom.Where.Conditions.Add(DQCondition.Or(
DQCondition.InEQ(DQExpression.IfNull(DQExpression.Field("AllUnitNum"), DQExpression.Value(0)), DQExpression.Value(0)),
DQCondition.InEQ(DQExpression.IfNull(DQExpression.Field("SecondNumber"), DQExpression.Value(0)), DQExpression.Value(0))));
if (hidden)
{
dom.Where.Conditions.Add(DQCondition.IsNull(DQExpression.Field(areadyLoadBill, "SaleOutStore_ID")));
}
OrganizationUtil.AddOrganizationLimit(dom, typeof(SaleOutStore));
root.RegisterQueryTable(typeof(temp2), new string[] { "DeliverGoodsLine_ID", "AllUnitNum", "SecondNumber", "AlreadyNumber" }, dom);
}
} }
}
private static DQueryDom GetTemDom()
public class AreadyLoadBill
{
public long SaleOutStore_ID { get; set; }
public static void Register(DQueryDom root, DateTime? min, DateTime? max)
{ {
var carLoadingBillDetail = new JoinAlias(typeof(CarLoading_BillDetail)); var carLoadingBillDetail = new JoinAlias(typeof(CarLoading_BillDetail));
var temDom = new DQueryDom(carLoadingBillDetail); var temDom = new DQueryDom(carLoadingBillDetail);
temDom.Columns.Add(DQSelectColumn.Field("BillID", "SaleOutStore_ID"));
temDom.Columns.Add(DQSelectColumn.Field("BillID", carLoadingBillDetail, "SaleOutStore_ID"));
temDom.GroupBy.Expressions.Add(DQExpression.Field(carLoadingBillDetail, "BillID"));
if (min.HasValue)
temDom.Where.Conditions.Add(DQCondition.GreaterThanOrEqual("LoadTime", min));
if (max.HasValue)
temDom.Where.Conditions.Add(DQCondition.LessThanOrEqual("LoadTime", max));
temDom.Where.Conditions.Add(DQCondition.EQ(carLoadingBillDetail, "BillTypeID", DmoTypeIDAttribute.GetID(typeof(SaleOutStore)))); temDom.Where.Conditions.Add(DQCondition.EQ(carLoadingBillDetail, "BillTypeID", DmoTypeIDAttribute.GetID(typeof(SaleOutStore))));
temDom.GroupBy.Expressions.Add(DQExpression.Field("BillID"));
return temDom;
root.RegisterQueryTable(typeof(AreadyLoadBill), new string[] { "SaleOutStore_ID" }, temDom);
} }
} }
} }

+ 18
- 7
B3QingDaoWanFu.Web/Pages/B3QingDaoWanFu/Tools/SaleOutstoreInfo.cs View File

@ -14,6 +14,8 @@ using Forks.EnterpriseServices.SqlDoms;
using Forks.Utils; using Forks.Utils;
using TSingSoft.WebControls2; using TSingSoft.WebControls2;
using TSingSoft.WebPluginFramework.Controls; using TSingSoft.WebPluginFramework.Controls;
using BWP.B3Frameworks.BO.NamedValueTemplate;
using BWP.B3Sale.Utils;
namespace BWP.Web.Pages.B3QingDaoWanFu.Tools namespace BWP.Web.Pages.B3QingDaoWanFu.Tools
{ {
@ -142,22 +144,31 @@ namespace BWP.Web.Pages.B3QingDaoWanFu.Tools
} }
DQueryDom GetQuery() DQueryDom GetQuery()
{ {
var dom = new DQueryDom(new JoinAlias(typeof(SaleOutStore)));
dom = CarLoadingBySendLinePage.GetSendLineQuery(dom, false);
dom.Columns.Clear();
dom.GroupBy.Expressions.Clear();
dom.Having.Conditions.Clear();
var main = new JoinAlias(typeof(SaleOutStore));
var dom = new DQueryDom(main);
var detail = new JoinAlias(typeof(AreadyLoadBill));
AreadyLoadBill.Register(dom, MinTime, MaxTime);
dom.From.AddJoin(JoinType.Left, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "SaleOutStore_ID"));
if (MinTime != null) if (MinTime != null)
dom.Where.Conditions.Add(DQCondition.GreaterThanOrEqual("LoadTime", MinTime)); dom.Where.Conditions.Add(DQCondition.GreaterThanOrEqual("LoadTime", MinTime));
if (MaxTime != null) if (MaxTime != null)
dom.Where.Conditions.Add(DQCondition.LessThanOrEqual("LoadTime", MaxTime)); dom.Where.Conditions.Add(DQCondition.LessThanOrEqual("LoadTime", MaxTime));
dom.Where.Conditions.Add(DQExpression.Snippet("[SendLine].[ID]=" + SendLineID));
dom.Where.Conditions.Add(DQExpression.Snippet("ISNULL([AreadyLoadBill].[SaleOutStore_ID], 0)=0"));
dom.Where.Conditions.Add(DQCondition.EQ("DeliverGoodsLine_ID", SendLineID));
dom.Where.Conditions.Add(DQCondition.IsNull(DQExpression.Field(detail, "SaleOutStore_ID")));
dom.Columns.Add(DQSelectColumn.Field("ID")); dom.Columns.Add(DQSelectColumn.Field("ID"));
dom.Columns.Add(DQSelectColumn.Field("LoadTime")); dom.Columns.Add(DQSelectColumn.Field("LoadTime"));
dom.Columns.Add(DQSelectColumn.Field("Customer_Name")); dom.Columns.Add(DQSelectColumn.Field("Customer_Name"));
dom.Columns.Add(DQSelectColumn.Field("AllUnitNum")); dom.Columns.Add(DQSelectColumn.Field("AllUnitNum"));
dom.Columns.Add(DQSelectColumn.Field("SecondNumber")); dom.Columns.Add(DQSelectColumn.Field("SecondNumber"));
dom.Where.Conditions.Add(DQCondition.EQ("BillState", .));
dom.Where.Conditions.Add(DQCondition.EQ("TakeGoods_Type", .));
dom.Where.Conditions.Add(DQCondition.IsNotNull(DQExpression.Field("DeliverGoodsLine_ID")));
dom.Where.Conditions.Add(DQCondition.Or(
DQCondition.InEQ(DQExpression.IfNull(DQExpression.Field("AllUnitNum"), DQExpression.Value(0)), DQExpression.Value(0)),
DQCondition.InEQ(DQExpression.IfNull(DQExpression.Field("SecondNumber"), DQExpression.Value(0)), DQExpression.Value(0))));
OrganizationUtil.AddOrganizationLimit(dom, typeof(SaleOutStore));
return dom; return dom;
} }
} }


+ 2
- 0
B3QingDaoWanFu.Web/PluginClass.cs View File

@ -30,6 +30,8 @@ namespace BWP.B3QingDaoWanFu
WpfPageFactory.RegisterPageOverlay(typeof(WeighBillEdit).FullName, typeof(WeightBillEdit_Ext).FullName); WpfPageFactory.RegisterPageOverlay(typeof(WeighBillEdit).FullName, typeof(WeightBillEdit_Ext).FullName);
WpfPageFactory.RegisterPageOverlay(typeof(WeighBillList).FullName, typeof(WeighBillList_Ext).FullName); WpfPageFactory.RegisterPageOverlay(typeof(WeighBillList).FullName, typeof(WeighBillList_Ext).FullName);
WpfPageFactory.RegisterPageOverlay(typeof(BWP.Web.Pages.B3ButcherManage.Bills.Pay_.SelectStatPayDialog).FullName, typeof(SelectStatPayDialog_Ext).FullName); WpfPageFactory.RegisterPageOverlay(typeof(BWP.Web.Pages.B3ButcherManage.Bills.Pay_.SelectStatPayDialog).FullName, typeof(SelectStatPayDialog_Ext).FullName);
WpfPageFactory.RegisterPageOverlay(typeof(BWP.Web.Pages.B3Sale.Bills.SaleOutStore_.SaleOutStoreList).FullName, typeof(SaleOutStoreList_Ext).FullName);
WpfPageFactory.RegisterPageOverlay(typeof(BWP.Web.Pages.B3Sale.Bills.Order_.OrderEdit).FullName, typeof(OrderEdit_Ext).FullName);
GlobalFlags.On(B3ButcherManageConsts.GlobalFlags.StatPayAddRewardWithButcherUseWeight); GlobalFlags.On(B3ButcherManageConsts.GlobalFlags.StatPayAddRewardWithButcherUseWeight);
GlobalFlags.On(B3SaleConsts.Flags.MarketingActivityEnableAdjustPrice); GlobalFlags.On(B3SaleConsts.Flags.MarketingActivityEnableAdjustPrice);
GlobalFlags.On(B3SaleConsts.Flags.SendOutStoreNoAvailableStorage); GlobalFlags.On(B3SaleConsts.Flags.SendOutStoreNoAvailableStorage);


+ 1
- 0
B3QingDaoWanFu/B3QingDaoWanFu.csproj View File

@ -177,6 +177,7 @@
<Compile Include="Tasks\SyncSaleOutStoreInfoToMES.cs" /> <Compile Include="Tasks\SyncSaleOutStoreInfoToMES.cs" />
<Compile Include="TypeIOCs\GoodsBLTypeIoc.cs" /> <Compile Include="TypeIOCs\GoodsBLTypeIoc.cs" />
<Compile Include="TypeIOCs\PayBLTypeIoc.cs" /> <Compile Include="TypeIOCs\PayBLTypeIoc.cs" />
<Compile Include="TypeIOCs\SaleOrderBLTypeIoc.cs" />
<Compile Include="TypeIOCs\SaleOutStoreBLTypeIoc.cs" /> <Compile Include="TypeIOCs\SaleOutStoreBLTypeIoc.cs" />
<Compile Include="TypeIOCs\ScanInfoTypeIOC.cs" /> <Compile Include="TypeIOCs\ScanInfoTypeIOC.cs" />
<Compile Include="TypeIOCs\StatPayBLTypeIoc.cs" /> <Compile Include="TypeIOCs\StatPayBLTypeIoc.cs" />


+ 3
- 3
B3QingDaoWanFu/Tasks/SyncSaleOutStoreInfoToMES.cs View File

@ -98,9 +98,9 @@ namespace BWP.B3QingDaoWanFu.Tasks
query.Columns.Add(DQSelectColumn.Field("Flag", scan)); query.Columns.Add(DQSelectColumn.Field("Flag", scan));
query.Where.Conditions.Add(DQCondition.And(DQCondition.GreaterThanOrEqual("BillState", .), DQCondition.IsNull(DQExpression.Field(relate, "SaleOutStore_ID")), DQCondition.IsNotNull(DQExpression.Field(scan, "ID")))); query.Where.Conditions.Add(DQCondition.And(DQCondition.GreaterThanOrEqual("BillState", .), DQCondition.IsNull(DQExpression.Field(relate, "SaleOutStore_ID")), DQCondition.IsNotNull(DQExpression.Field(scan, "ID"))));
query.Where.Conditions.Add(DQCondition.And(DQCondition.Or(DQCondition.EQ(scan, "Flag", -1), DQCondition.GreaterThan(scan, "Weight", 0)), DQCondition.GreaterThan(scan, "Number", 0)));
query.Where.Conditions.Add(DQCondition.InEQ(scan, "Flag", 2));
query.OrderBy.Expressions.Add(DQOrderByExpression.Create(main, "ID"));
query.Where.Conditions.Add(DQCondition.Or(DQCondition.EQ(scan, "Flag", 0), DQCondition.EQ(scan, "Flag", 1)));
query.OrderBy.Expressions.Add(DQOrderByExpression.Create(scan, "ID"));
using (var session = Dmo.NewSession()) using (var session = Dmo.NewSession())
{ {
var carcassList = new List<CarcassSaleOutStoreObj>(); var carcassList = new List<CarcassSaleOutStoreObj>();


+ 146
- 0
B3QingDaoWanFu/TypeIOCs/SaleOrderBLTypeIoc.cs View File

@ -0,0 +1,146 @@
using BWP.B3Frameworks;
using BWP.B3Frameworks.BO.NamedValueTemplate;
using BWP.B3Frameworks.Utils;
using BWP.B3QingDaoWanFu.Utils;
using BWP.B3Sale.BL;
using BWP.B3Sale.BO;
using Forks.EnterpriseServices.BusinessInterfaces;
using Forks.EnterpriseServices.DomainObjects2;
using Forks.EnterpriseServices.DomainObjects2.DQuery;
using Forks.EnterpriseServices.SqlDoms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TSingSoft.WebPluginFramework;
namespace BWP.B3QingDaoWanFu.TypeIOCs
{
[TypeIOC(typeof(OrderBL), typeof(OrderBL.BaseBLIOCs.AfterInsert))]
public class SaleOrderAfterInsert : OrderBL.BaseBLIOCs.AfterInsert
{
IOrderBL orderBL = null;
public void Invoke(IDmoContext context, Order dmo)
{
if (dmo.SaleForecast_ID == null)
return;
if (new WanFuOnlineConfig().AutoCombineOrder.Value == false)
return;
if (dmo.LoadTime == null)
throw new Exception("订单发货时间为空");
orderBL = BIFactory.Create<IOrderBL>(context);
var existInfo = GetExistOrderAndSaleOutStore(context.Session, dmo);
if (existInfo == null)
{
orderBL.Check(dmo);
return;
}
var ok = CombineOrder(context.Session, dmo, existInfo.Item1, existInfo.Item2.HasValue);
if (!ok)
return;
if (existInfo.Item2.HasValue)
CombineSaleOutStore(context.Session, dmo, existInfo.Item2.Value);
}
Tuple<long, long?> GetExistOrderAndSaleOutStore(IDmoSession session, Order order)
{
var main = new JoinAlias("mOrder", typeof(Order));
var saleOut = new JoinAlias(typeof(SaleOutStore));
var query = new DQueryDom(main);
query.From.AddJoin(JoinType.Left, new DQDmoSource(saleOut), DQCondition.EQ(main, "ID", saleOut, "Order_ID"));
query.Columns.Add(DQSelectColumn.Field("ID"));
query.Columns.Add(DQSelectColumn.Field("ID", saleOut));
query.Where.Conditions.Add(DQCondition.And(DQCondition.InEQ("ID", order.ID), DQCondition.EQ("Customer_ID", order.Customer_ID), DQCondition.EQ(DQExpression.Snippet("CAST([mOrder].[LoadTime] AS DATE)"), DQExpression.Value(order.LoadTime.Value.Date)), DQCondition.InEQ("BillState", .)));
query.Where.Conditions.Add(DQCondition.Or(DQCondition.IsNull(DQExpression.Field(saleOut, "BillState")), DQCondition.EQ(saleOut, "BillState", .)));
return query.EExecuteScalar<long, long?>(session);
}
bool CombineOrder(IDmoSession session, Order order, long id, bool existSaleOut)
{
var comb = orderBL.Load(id);
if (comb.Details.Any(x => order.Details.Any(y => x.SaleGoods_ID == y.SaleGoods_ID && x.Price != y.Price)))
return false;
foreach (var detail in order.Details)
{
var first = comb.Details.FirstOrDefault(x => x.SaleGoods_ID == detail.SaleGoods_ID);
if (first == null)
{
first = new Order_Detail();
DmoUtil.CopyDmoFields(detail, first, "ID", "Order_ID");
comb.Details.Add(first);
}
else
{
first.SecondNumber = (first.SecondNumber ?? 0).Value + (detail.SecondNumber ?? 0).Value;
first.UnitNum = (first.UnitNum ?? 0).Value + (detail.UnitNum ?? 0).Value;
first.Number = (first.Number ?? 0).Value + (detail.Number ?? 0).Value;
first.Money = (first.Money ?? 0).Value + (detail.Money ?? 0).Value;
}
if (existSaleOut)
{
first.AlreadyOutStoreUnitNum = (first.AlreadyOutStoreUnitNum ?? 0).Value + (detail.UnitNum ?? 0).Value;
first.AlreadyOutStoreNum = (first.AlreadyOutStoreNum ?? 0).Value + (detail.Number ?? 0).Value;
first.AlreadyOutStoreSecondNumber = (first.AlreadyOutStoreSecondNumber ?? 0).Value + (detail.SecondNumber ?? 0).Value;
}
}
if (existSaleOut)
{
comb.AlreadyOutStoreUnitNum = comb.Details.Sum(x => (x.AlreadyOutStoreUnitNum ?? 0).Value);
comb.AlreadyOutStoreNum = comb.Details.Sum(x => (x.AlreadyOutStoreNum ?? 0).Value);
comb.AlreadyOutStoreSecondNumber = comb.Details.Sum(x => (x.AlreadyOutStoreSecondNumber ?? 0).Value);
}
order.OldOrderID = id;
UpdateOldOrderID(session, order);
SaleForecastBL.CreateOrderContext = null;
orderBL.Nullify(order);
orderBL.Update(comb);
if (comb.BillState == .)
orderBL.Check(comb);
order.ID = id;
return true;
}
void UpdateOldOrderID(IDmoSession session, Order order)
{
var update = new DQUpdateDom(typeof(Order));
update.Columns.Add(new DQUpdateColumn("OldOrderID", order.OldOrderID));
update.Where.Conditions.Add(DQCondition.EQ("ID", order.ID));
session.ExecuteNonQuery(update);
}
void CombineSaleOutStore(IDmoSession session, Order order, long id)
{
var bl = BIFactory.Create<ISaleOutStoreBL>(session);
var saleOut = bl.Load(id);
foreach (var orderDetail in order.Details)
{
var first = saleOut.Details.FirstOrDefault(x => x.SaleGoods_ID == orderDetail.SaleGoods_ID);
if (first == null)
{
var outStoreDetail = new SaleOutStore_Detail();
DmoUtil.CopyDmoFields(orderDetail, outStoreDetail, "ID");
outStoreDetail.Order_DetailID = orderDetail.ID;
outStoreDetail.Order_Detail_Number = orderDetail.Number;
outStoreDetail.Order_Detail_SecondNumber = orderDetail.SecondNumber;
outStoreDetail.Order_Detail_UnitNum = orderDetail.UnitNum;
outStoreDetail.HiddenUnitNum = orderDetail.UnitNum;
outStoreDetail.HiddenNumber = orderDetail.Number;
outStoreDetail.HiddenSecondNumber = orderDetail.SecondNumber;
outStoreDetail.IsOutsourcing = orderDetail.IsOutsourcing;
saleOut.Details.Add(outStoreDetail);
}
else
{
first.SecondNumber = (first.SecondNumber ?? 0).Value + (orderDetail.SecondNumber ?? 0).Value;
first.UnitNum = (first.UnitNum ?? 0).Value + (orderDetail.UnitNum ?? 0).Value;
first.Number = (first.Number ?? 0).Value + (orderDetail.Number ?? 0).Value;
}
}
bl.Update(saleOut);
}
}
}

+ 8
- 1
B3QingDaoWanFu/Utils/WanFuOnlineConfig.cs View File

@ -74,6 +74,13 @@ namespace BWP.B3QingDaoWanFu.Utils
public IntConfigRef DomainUserForTrustPay { public IntConfigRef DomainUserForTrustPay {
get { return _domainUserForTrustPay; } get { return _domainUserForTrustPay; }
set { _domainUserForTrustPay = value; } set { _domainUserForTrustPay = value; }
}
}
private BoolConfigRef _mAutoCombineOrder = new BoolConfigRef(false);
[LogicName("自动合并订单")]
[ConfigurationItemGroup("青岛万福")]
[ConfigurationItemDescription("新建订单时(包括审核销售预报生成和手机app生成的)自动合并,如果合并到的订单有已审核出库单就不合并,价格不同也不合并)")]
[DomainConfigurationItem]
public BoolConfigRef AutoCombineOrder { get { return _mAutoCombineOrder; } set { _mAutoCombineOrder = value; } }
} }
} }

+ 2
- 0
WebFolder/config/plugins/B3QingDaoWanFu.plugin View File

@ -29,6 +29,7 @@
<Function index="2" name="付款清单导出"/> <Function index="2" name="付款清单导出"/>
<Function index="3" name="结算单分析"/> <Function index="3" name="结算单分析"/>
<Function index="4" name="销售出库分析"/> <Function index="4" name="销售出库分析"/>
<Function index="5" name="销售统计表"/>
</FunctionGroup> </FunctionGroup>
<FunctionGroup name="配置" roleSchemas="employee"> <FunctionGroup name="配置" roleSchemas="employee">
<Function index="0" name="结账客户设备配置"/> <Function index="0" name="结账客户设备配置"/>
@ -82,6 +83,7 @@
<Menu id="0007" name="/B3青岛万福/报表/万福销售出库分析" roles="B3QingDaoWanFu.报表.销售出库分析" url="B3QingDaoWanFu/SaleOutStore_/SaleOutStoreSimpleAnayse.aspx"/> <Menu id="0007" name="/B3青岛万福/报表/万福销售出库分析" roles="B3QingDaoWanFu.报表.销售出库分析" url="B3QingDaoWanFu/SaleOutStore_/SaleOutStoreSimpleAnayse.aspx"/>
<Menu id="0008" name="/B3青岛万福/农行付款" roles="B3QingDaoWanFu.农行付款.访问" url="B3QingDaoWanFu/TrustPay_/TrustPayList.aspx"/> <Menu id="0008" name="/B3青岛万福/农行付款" roles="B3QingDaoWanFu.农行付款.访问" url="B3QingDaoWanFu/TrustPay_/TrustPayList.aspx"/>
<Menu id="0009" name="/B3青岛万福/业务单据/产品出厂记录" roles="B3QingDaoWanFu.产品出厂记录.访问" url="B3QingDaoWanFu/Bills/OutFactoryRecord_/OutFactoryRecordList.aspx"/> <Menu id="0009" name="/B3青岛万福/业务单据/产品出厂记录" roles="B3QingDaoWanFu.产品出厂记录.访问" url="B3QingDaoWanFu/Bills/OutFactoryRecord_/OutFactoryRecordList.aspx"/>
<Menu id="0010" name="/B3青岛万福/报表/销售统计表" roles="B3QingDaoWanFu.报表.销售统计表" url="B3QingDaoWanFu/Reports/SaleSummaryReport_/SaleSummaryReport.aspx"/>
</Menus> </Menus>
<Features> <Features>


Loading…
Cancel
Save