Browse Source

盘点业务调整。报表加盘点信息。

master
yibo 7 years ago
parent
commit
4ed79e39a8
18 changed files with 714 additions and 219 deletions
  1. +12
    -0
      B3ClientService.Web/B3ClientService.Web.csproj
  2. +75
    -0
      B3ClientService.Web/Pages/B3ClientService/Bills/CarcassInventory_/CarcassInventoryDialog.cs
  3. +78
    -0
      B3ClientService.Web/Pages/B3ClientService/Bills/CarcassInventory_/CarcassInventoryEdit.cs
  4. +31
    -0
      B3ClientService.Web/Pages/B3ClientService/Bills/CarcassInventory_/CarcassInventoryList.cs
  5. +57
    -0
      B3ClientService.Web/Pages/B3ClientService/Bills/CarcassInventory_/CarcassInventoryList.xml
  6. +21
    -85
      B3ClientService.Web/Pages/B3ClientService/Reports/CarcassInOutStoreAnalyse_/CarcassDetailDialog.cs
  7. +29
    -88
      B3ClientService.Web/Pages/B3ClientService/Reports/CarcassInOutStoreAnalyse_/CarcassInOutStoreAnalyse.cs
  8. +9
    -2
      B3ClientService/B3ClientService.csproj
  9. +18
    -0
      B3ClientService/BL/Bill/CarcassInventoryBL.cs
  10. +36
    -0
      B3ClientService/BO/Bill/CarcassInventory/CarcassInventory.cs
  11. +43
    -0
      B3ClientService/BO/Bill/CarcassInventory/CarcassInventory_Detail.cs
  12. +48
    -0
      B3ClientService/BO/Bill/CarcassInventory/CarcassInventory_SummaryDetail.cs
  13. +0
    -17
      B3ClientService/BO/Bill/CarcassInventoryTemp.cs
  14. +123
    -0
      B3ClientService/BO/CarcassFullInfoView.cs
  15. +15
    -0
      B3ClientService/ClientServiceUtils.cs
  16. +98
    -8
      B3ClientService/OfflinRpc/CarcassInventoryRpc.cs
  17. +5
    -19
      B3ClientService/Rpcs/InterfaceRpc/GoodsRpc.cs
  18. +16
    -0
      WebFolder/config/plugins/B3ClientService.plugin

+ 12
- 0
B3ClientService.Web/B3ClientService.Web.csproj View File

@ -107,6 +107,15 @@
<Compile Include="Pages\B3ClientService\BaseInfos\ProductBatch_\ProductBatchList.cs"> <Compile Include="Pages\B3ClientService\BaseInfos\ProductBatch_\ProductBatchList.cs">
<SubType>ASPXCodeBehind</SubType> <SubType>ASPXCodeBehind</SubType>
</Compile> </Compile>
<Compile Include="Pages\B3ClientService\Bills\CarcassInventory_\CarcassInventoryDialog.cs">
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="Pages\B3ClientService\Bills\CarcassInventory_\CarcassInventoryEdit.cs">
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="Pages\B3ClientService\Bills\CarcassInventory_\CarcassInventoryList.cs">
<SubType>ASPXCodeBehind</SubType>
</Compile>
<Compile Include="Pages\B3ClientService\Dialogs\SelectGoodsDialogs.cs"> <Compile Include="Pages\B3ClientService\Dialogs\SelectGoodsDialogs.cs">
<SubType>ASPXCodeBehind</SubType> <SubType>ASPXCodeBehind</SubType>
</Compile> </Compile>
@ -162,6 +171,9 @@
<EmbeddedResource Include="Pages\B3ClientService\BaseInfos\ClientGoodsSet_\ClientGoodsSetList.xml" /> <EmbeddedResource Include="Pages\B3ClientService\BaseInfos\ClientGoodsSet_\ClientGoodsSetList.xml" />
<EmbeddedResource Include="Pages\B3ClientService\Dialogs\SelectGoodsDialogs.xml" /> <EmbeddedResource Include="Pages\B3ClientService\Dialogs\SelectGoodsDialogs.xml" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Pages\B3ClientService\Bills\CarcassInventory_\CarcassInventoryList.xml" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.


+ 75
- 0
B3ClientService.Web/Pages/B3ClientService/Bills/CarcassInventory_/CarcassInventoryDialog.cs View File

@ -0,0 +1,75 @@
using BWP.B3ClientService.BO;
using BWP.B3Frameworks.Utils;
using Forks.EnterpriseServices.DataForm;
using Forks.EnterpriseServices.DomainObjects2;
using Forks.EnterpriseServices.DomainObjects2.DQuery;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using TSingSoft.WebControls2;
using TSingSoft.WebPluginFramework.Controls;
using TSingSoft.WebPluginFramework.Pages;
namespace BWP.Web.Pages.B3ClientService.Bills.CarcassInventory_
{
class CarcassInventoryDialog : ServerPage
{
public long DmoID
{
get
{
return long.Parse(Request.QueryString["ID"]);
}
}
public long? GoodsID
{
get
{
if (string.IsNullOrEmpty(Request.QueryString["Goods_ID"]))
return null;
return long.Parse(Request.QueryString["Goods_ID"]);
}
}
DFBrowseGrid _dataGrid;
protected override void InitForm(HtmlForm form)
{
form.EAdd(new PageTitle("盘点详情"));
_dataGrid = form.EAdd(new DFBrowseGrid(new DFDataTableEditor()) { Width = Unit.Percentage(100) });
_dataGrid.Columns.Add(new DFBrowseGridAutoColumn());
}
void BindGrid()
{
var query = new DQueryDom(new JoinAlias(typeof(CarcassInventory_Detail)));
query.Columns.Add(DQSelectColumn.Field("BarCode"));
query.Columns.Add(DQSelectColumn.Field("Goods_Name"));
query.Columns.Add(DQSelectColumn.Field("Weight"));
query.Columns.Add(DQSelectColumn.Field("Time"));
query.Columns.Add(DQSelectColumn.Field("Worker_Name"));
query.Where.Conditions.Add(DQCondition.EQ("CarcassInventory_ID", DmoID));
if (GoodsID.HasValue)
query.Where.Conditions.Add(DQCondition.EQ("Goods_ID", GoodsID));
else
query.Where.Conditions.Add(DQCondition.IsNull(DQExpression.Field("Goods_ID")));
var args = new LoadArguments(query);
args.SumColumns.Add(2);
_dataGrid.LoadArguments = args;
_dataGrid.DataBind();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (!IsPostBack)
BindGrid();
}
}
}

+ 78
- 0
B3ClientService.Web/Pages/B3ClientService/Bills/CarcassInventory_/CarcassInventoryEdit.cs View File

@ -0,0 +1,78 @@
using BWP.B3ClientService.BL;
using BWP.B3ClientService.BO;
using BWP.Web.Layout;
using BWP.Web.WebControls;
using Forks.EnterpriseServices.DataForm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.WebControls;
using TSingSoft.WebControls2;
namespace BWP.Web.Pages.B3ClientService.Bills.CarcassInventory_
{
class CarcassInventoryEdit : BillEditPage<CarcassInventory, ICarcassInventoryBL>
{
protected override void BuildBasePropertiesEditor(WebControls.TitlePanel titlePanel, CustomPageLayout.PageLayoutSection pageLayoutSection)
{
var layoutManager = new LayoutManager("main", mDFInfo, mDFContainer);
var config = new AutoLayoutConfig();
config.Add("Date");
config.Add("ProductBatch_Name");
layoutManager.Config = config;
pageLayoutSection.SetRequired("Date", "ProductBatch_Name");
pageLayoutSection.ApplyLayout(layoutManager, config, mPageLayoutManager, mDFInfo);
titlePanel.Controls.Add(layoutManager.CreateLayout());
}
protected override void BuildBody(System.Web.UI.Control parent)
{
base.BuildBody(parent);
CreateDetailPanel(parent.EAdd(new TitlePanel("盘点明细", "盘点明细")));
}
DFEditGrid _detailGrid;
private void CreateDetailPanel(TitlePanel titlePanel)
{
var btn = titlePanel.NavPanel.EAdd(new DialogButton());
btn.Text = "盘点详情";
btn.BeforeClientClick = "var behindSelect=__DFContainer.getControl('$Details').behind.selectedRow().dfContainer; if(behindSelect==undefined){alert('请先选择盘点明细');return false;}";
btn.Url = string.Format("CarcassInventoryDialog.aspx?ID={0}&Goods_ID='+__DFContainer.getControl('$Details').behind.selectedRow().dfContainer.getValue('Goods_ID')+'", MinDmo.ID);
var editor = new DFCollectionEditor<CarcassInventory_SummaryDetail>(() => Dmo.Details);
//editor.AllowDeletionFunc = () => CanSave;
//editor.IsEditableFunc = (field, detail) => CanSave;
//editor.CanDeleteFunc = detail => CanSave;
_detailGrid = new DFEditGrid(editor) { Width = Unit.Percentage(100) };
_detailGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Goods_Name"));
_detailGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Number"));
_detailGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("StoreNumber"));
_detailGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("DiffNumber"));
_detailGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("Weight"));
_detailGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("StoreWeight"));
_detailGrid.Columns.Add(new DFEditGridColumn<DFValueLabel>("DiffWeight"));
_detailGrid.ValueColumns.Add("Goods_ID");
var section = mPageLayoutManager.AddSection("DisplayColumns1", "盘点明细");
section.SetRequired("Goods_Name");
titlePanel.SetPageLayoutSetting(mPageLayoutManager, section.Name);
section.ApplyLayout(_detailGrid, mPageLayoutManager, DFInfo.Get(typeof(CarcassInventory_SummaryDetail)));
mDFContainer.AddNonDFControl(_detailGrid, "$Details");
titlePanel.Controls.Add(_detailGrid);
}
protected override bool EnablePrint
{
get
{
return false;
}
}
public override void AppToUI()
{
base.AppToUI();
mDFContainer.Readonly = true;
_detailGrid.DataBind();
}
}
}

+ 31
- 0
B3ClientService.Web/Pages/B3ClientService/Bills/CarcassInventory_/CarcassInventoryList.cs View File

@ -0,0 +1,31 @@
using BWP.B3ClientService.BL;
using BWP.B3ClientService.BO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BWP.Web.Pages.B3ClientService.Bills.CarcassInventory_
{
class CarcassInventoryList : BillListPage<CarcassInventory, ICarcassInventoryBL>
{
protected override void AddQueryControls(TSingSoft.WebControls2.VLayoutPanel vPanel)
{
vPanel.Add(CreateDefaultBillQueryControls((panel, config) =>
{
config.AddAfter("Date", "ID");
config.AddAfter("ProductBatch_ID", "Date");
}));
}
protected override void AddDFBrowseGridColumn(TSingSoft.WebControls2.DFBrowseGrid grid, string field)
{
base.AddDFBrowseGridColumn(grid, field);
if (field == "ID")
{
AddDFBrowseGridColumn(grid, "Date");
AddDFBrowseGridColumn(grid, "ProductBatch_Name");
}
}
}
}

+ 57
- 0
B3ClientService.Web/Pages/B3ClientService/Bills/CarcassInventory_/CarcassInventoryList.xml View File

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="utf-8" ?>
<Select xmlns="urn:XDQuery">
<Columns>
<Field name="ID"/>
</Columns>
<From>
<DmoClass class="BWP.B3ClientService.BO.CarcassInventory, B3ClientService"/>
</From>
<Where>
<And>
<EQ>
<Field name="ID"/>
<QBE paramName="ID"/>
</EQ>
<GreaterThanOrEqual>
<Field name="Date"/>
<QBE paramName="MinDate"/>
</GreaterThanOrEqual>
<LessThanOrEqual>
<Field name="Date"/>
<QBE paramName="MaxDate"/>
</LessThanOrEqual>
<EQ>
<Field name="ProductBatch_ID"/>
<QBE paramName="ProductBatch_ID"/>
</EQ>
<EQ>
<Field name="IsLocked"/>
<QBE paramName="IsLocked"/>
</EQ>
<Contains>
<Field name="CreateUser_Name"/>
<QBE paramName="CreateUser_Name"/>
</Contains>
<Contains>
<Field name="CheckUser_Name"/>
<QBE paramName="CheckUser_Name"/>
</Contains>
<EQ>
<Field name="BillState"/>
<QBE paramName ="BillState"/>
</EQ>
<GreaterThanOrEqual>
<Field name="CreateTime"/>
<QBE paramName="MinCreateTime"/>
</GreaterThanOrEqual>
<LessThanOrEqual>
<Field name="CreateTime"/>
<QBE paramName="MaxCreateTime"/>
</LessThanOrEqual>
<Contains>
<Field name="Remark"/>
<QBE paramName="Remark"/>
</Contains>
</And>
</Where>
</Select>

+ 21
- 85
B3ClientService.Web/Pages/B3ClientService/Reports/CarcassInOutStoreAnalyse_/CarcassDetailDialog.cs View File

@ -15,6 +15,7 @@ using Forks.EnterpriseServices.SqlDoms;
using Forks.EnterpriseServices.DataForm; using Forks.EnterpriseServices.DataForm;
using Forks.EnterpriseServices.DomainObjects2; using Forks.EnterpriseServices.DomainObjects2;
using TSingSoft.WebPluginFramework; using TSingSoft.WebPluginFramework;
using Forks.Utils;
namespace BWP.Web.Pages.B3ClientService.Reports.CarcassInOutStoreAnalyse_ namespace BWP.Web.Pages.B3ClientService.Reports.CarcassInOutStoreAnalyse_
{ {
@ -82,28 +83,36 @@ namespace BWP.Web.Pages.B3ClientService.Reports.CarcassInOutStoreAnalyse_
void StartQuery() void StartQuery()
{ {
var sumColumns = new List<int>(); var sumColumns = new List<int>();
var query = new DQueryDom(new JoinAlias(typeof(UnionTemp)));
var time = Flag == -1 ? startTime : endTime;
query.RegisterQueryTable(typeof(UnionTemp), new string[] { "ProductBatch_ID", "Weight", "Time", "Flag" }, GetUnionDom(time, Flag != -1));
var query = new DQueryDom(new JoinAlias(typeof(CarcassFullInfoView)));
query.Columns.Add(DQSelectColumn.Field("ProductBatch_Name", "批次")); query.Columns.Add(DQSelectColumn.Field("ProductBatch_Name", "批次"));
if (Flag < 0) if (Flag < 0)
{ {
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("Flag", 0), DQExpression.Value(1), DQExpression.Value(-1))).ECastType<int>(), "头数"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("Flag", 0), DQExpression.Field("Weight"), DQExpression.Multiply(DQExpression.Value(-1), DQExpression.Field("Weight")))).ECastType<decimal>(), "重量"));
query.Having.Conditions.Add(DQCondition.Or(DQCondition.InEQ(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("Flag", 0), DQExpression.Value(1), DQExpression.Value(-1))), DQExpression.Value(0)), DQCondition.InEQ(DQExpression.IfNull(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("Flag", 0), DQExpression.Field("Weight"), DQExpression.Multiply(DQExpression.Value(-1), DQExpression.Field("Weight")))), DQExpression.Value(0)), DQExpression.Value(0))));
var numCol = DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("InStore", true), DQExpression.Field("Number"), DQExpression.Multiply(DQExpression.Value(-1), DQExpression.Field("Number"))));
var weightCol = DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("InStore", true), DQExpression.Field("Weight"), DQExpression.Multiply(DQExpression.Value(-1), DQExpression.Field("Weight"))));
query.Columns.Add(DQSelectColumn.Create(numCol.ECastType<int>(), "头数"));
query.Columns.Add(DQSelectColumn.Create(weightCol.ECastType<Money<decimal>?>(), "重量"));
query.Having.Conditions.Add(DQCondition.Or(DQCondition.InEQ(DQExpression.IfNull(numCol, DQExpression.Value(0)), DQExpression.Value(0)), DQCondition.InEQ(DQExpression.IfNull(weightCol, DQExpression.Value(0)), DQExpression.Value(0))));
} }
else else
{ {
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("Flag", Flag)), DQExpression.Value(1))).ECastType<int>(), "头数"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("Flag", Flag)), DQExpression.Field("Weight"))).ECastType<decimal>(), "重量"));
query.Where.Conditions.Add(DQCondition.GreaterThanOrEqual("Time", startTime));
query.Having.Conditions.Add(DQCondition.Or(DQCondition.InEQ(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("Flag", 0), DQExpression.Value(1), DQExpression.Value(-1))), DQExpression.Value(0)), DQCondition.InEQ(DQExpression.IfNull(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("Flag", 0), DQExpression.Field("Weight"), DQExpression.Multiply(DQExpression.Value(-1), DQExpression.Field("Weight")))), DQExpression.Value(0)), DQExpression.Value(0))));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("Number")), "头数"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.Field("Weight")), "重量"));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("Flag", Flag), DQCondition.GreaterThanOrEqual("Time", startTime)));
query.Having.Conditions.Add(DQCondition.Or(DQCondition.InEQ(DQExpression.IfNull(DQExpression.Sum(DQExpression.Field("Number")), DQExpression.Value(0)), DQExpression.Value(0)), DQCondition.InEQ(DQExpression.IfNull(DQExpression.Sum(DQExpression.Field("Weight")), DQExpression.Value(0)), DQExpression.Value(0))));
} }
query.GroupBy.Expressions.Add(DQExpression.Field("ProductBatch_Name")); query.GroupBy.Expressions.Add(DQExpression.Field("ProductBatch_Name"));
if (Flag == -1)//期初
query.Where.Conditions.Add(DQCondition.LessThan("Time", startTime));
else
query.Where.Conditions.Add(DQCondition.LessThanOrEqual("Time", endTime));
if (GoodsID.HasValue)
query.Where.Conditions.Add(DQCondition.EQ("Goods_ID", GoodsID));
else
query.Where.Conditions.Add(DQCondition.IsNull(DQExpression.Field("Goods_ID")));
var args = new LoadArguments(query); var args = new LoadArguments(query);
for (var idx = 1; idx < query.Columns.Count; idx++) for (var idx = 1; idx < query.Columns.Count; idx++)
{ {
@ -120,78 +129,5 @@ namespace BWP.Web.Pages.B3ClientService.Reports.CarcassInOutStoreAnalyse_
if (!IsPostBack) if (!IsPostBack)
StartQuery(); StartQuery();
} }
[DFClass]
class UnionTemp
{
public long ProductBatch_ID { get; set; }
public decimal Weight { get; set; }
public DateTime Time { get; set; }
public int Flag { get; set; }
[ReferenceTo(typeof(ProductBatch), "Name")]
[Join("ProductBatch_ID", "ID")]
public string ProductBatch_Name { get; set; }
}
DQueryDom GetUnionDom(DateTime endTime, bool eq)
{
var u1 = GetInStore(endTime, eq);
var u2 = GetPickOutStore(endTime, eq);
u1.UnionNext.Select = u2;
u1.UnionNext.Type = UnionType.All;
u2.UnionNext.Select = GetSaleOutStore(endTime, eq);
u2.UnionNext.Type = UnionType.All;
return u1;
}
DQueryDom GetInStore(DateTime endTime, bool eq)
{
var query = new DQueryDom(new JoinAlias("_inStore", typeof(CarcassFullInfo)));
query.Columns.Add(DQSelectColumn.Field("ProductBatch_ID"));
query.Columns.Add(DQSelectColumn.Field("InStoreWeight"));
query.Columns.Add(DQSelectColumn.Field("InStoreTime"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(0), "Falg"));
query.Where.Conditions.Add(DQCondition.And(DateCondition(endTime, "InStoreTime", eq), GoodsCondition("InStoreGoods_ID")));
return query;
}
DQueryDom GetPickOutStore(DateTime endTime, bool eq)
{
var query = new DQueryDom(new JoinAlias("_pickOut", typeof(CarcassFullInfo)));
query.Columns.Add(DQSelectColumn.Field("ProductBatch_ID"));
query.Columns.Add(DQSelectColumn.Field("PickWeight"));
query.Columns.Add(DQSelectColumn.Field("PickTime"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(1), "Falg"));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("PickType", 0), DateCondition(endTime, "PickTime", eq), GoodsCondition("InStoreGoods_ID")));
return query;
}
DQueryDom GetSaleOutStore(DateTime endTime, bool eq)
{
var query = new DQueryDom(new JoinAlias("_saleOut", typeof(CarcassFullInfo)));
query.Columns.Add(DQSelectColumn.Field("ProductBatch_ID"));
query.Columns.Add(DQSelectColumn.Field("PickWeight"));
query.Columns.Add(DQSelectColumn.Field("PickTime"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(2), "Falg"));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("PickType", 1), DateCondition(endTime, "PickTime", eq), GoodsCondition("SaleGoods_ID")));
return query;
}
IDQExpression DateCondition(DateTime endTime, string fieldName, bool eq)
{
if (eq)
return DQCondition.LessThanOrEqual(fieldName, endTime);
else
return DQCondition.LessThan(fieldName, endTime);
}
IDQExpression GoodsCondition(string goodsField)
{
if (GoodsID.HasValue)
return DQCondition.EQ(goodsField, GoodsID);
else
return DQCondition.IsNull(DQExpression.Field(goodsField));
}
} }
} }

+ 29
- 88
B3ClientService.Web/Pages/B3ClientService/Reports/CarcassInOutStoreAnalyse_/CarcassInOutStoreAnalyse.cs View File

@ -52,8 +52,8 @@ namespace BWP.Web.Pages.B3ClientService.Reports.CarcassInOutStoreAnalyse_
mBrowseGrid.OnDetailDataBound = (tr, obj, index) => mBrowseGrid.OnDetailDataBound = (tr, obj, index) =>
{ {
var row = obj as DFDataRow; var row = obj as DFDataRow;
var gName = (string)row["Goods_Name"];
var url = BuildUrl(string.Format("{0}", row["Goods_ID"]));
var gid = string.Format("{0}", row["Goods_ID"]);
var url = BuildUrl(string.Format("{0}", gid));
url = WpfPageUrl.ToGlobal(url); url = WpfPageUrl.ToGlobal(url);
url = AspUtil.AddParamToUrl(url, "flag", "-1"); url = AspUtil.AddParamToUrl(url, "flag", "-1");
SetCellAtt(tr.Cells[3], url, "进销存明细");//期初 SetCellAtt(tr.Cells[3], url, "进销存明细");//期初
@ -61,14 +61,17 @@ namespace BWP.Web.Pages.B3ClientService.Reports.CarcassInOutStoreAnalyse_
url = AspUtil.UpdateUrlParam(url, "flag", "0"); url = AspUtil.UpdateUrlParam(url, "flag", "0");
SetCellAtt(tr.Cells[4], url, "进销存明细");//入库 SetCellAtt(tr.Cells[4], url, "进销存明细");//入库
url = AspUtil.UpdateUrlParam(url, "flag", "3");
SetCellAtt(tr.Cells[5], url, "进销存明细");//盘点
url = AspUtil.UpdateUrlParam(url, "flag", "1"); url = AspUtil.UpdateUrlParam(url, "flag", "1");
SetCellAtt(tr.Cells[6], url, "进销存明细");//领用
SetCellAtt(tr.Cells[7], url, "进销存明细");//领用
url = AspUtil.UpdateUrlParam(url, "flag", "2"); url = AspUtil.UpdateUrlParam(url, "flag", "2");
SetCellAtt(tr.Cells[7], url, "进销存明细");//销售
SetCellAtt(tr.Cells[8], url, "进销存明细");//销售
url = AspUtil.UpdateUrlParam(url, "flag", "-2"); url = AspUtil.UpdateUrlParam(url, "flag", "-2");
SetCellAtt(tr.Cells[9], url, "进销存明细");//期末
SetCellAtt(tr.Cells[10], url, "进销存明细");//期末
}; };
} }
@ -124,35 +127,38 @@ namespace BWP.Web.Pages.B3ClientService.Reports.CarcassInOutStoreAnalyse_
if (endInput.Value.HasValue) if (endInput.Value.HasValue)
endTime = endInput.Date; endTime = endInput.Date;
var sumColumns = new List<int>(); var sumColumns = new List<int>();
var query = new DQueryDom(new JoinAlias(typeof(UnionTemp)));
query.RegisterQueryTable(typeof(UnionTemp), new string[] { "Goods_ID", "Weight", "Time", "Flag" }, GetUnionDom(endTime));
var query = new DQueryDom(new JoinAlias(typeof(CarcassFullInfoView)));
query.Columns.Add(DQSelectColumn.Field("Goods_ID")); query.Columns.Add(DQSelectColumn.Field("Goods_ID"));
query.Columns.Add(DQSelectColumn.Field("Goods_Code", "存货编码")); query.Columns.Add(DQSelectColumn.Field("Goods_Code", "存货编码"));
query.Columns.Add(DQSelectColumn.Field("Goods_Name", "存货名称")); query.Columns.Add(DQSelectColumn.Field("Goods_Name", "存货名称"));
query.Columns.Add(DQSelectColumn.Field("Goods_Spec", "存货规格")); query.Columns.Add(DQSelectColumn.Field("Goods_Spec", "存货规格"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.LessThan("Time", startTime), DQExpression.LogicCase(DQCondition.EQ("Flag", 0), DQExpression.Value(1), DQExpression.Value(-1)))).ECastType<int>(), "期初头数"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("Flag", 0)), DQExpression.Value(1))).ECastType<int>(), "本期增加头数|成品入库"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("Flag", 0)), DQExpression.Value(1))).ECastType<int>(), "本期增加头数|合计"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("Flag", 1)), DQExpression.Value(1))).ECastType<int>(), "本期减少头数|分割领用"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("Flag", 2)), DQExpression.Value(1))).ECastType<int>(), "本期减少头数|销售出库"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.InEQ("Flag", 0)), DQExpression.Value(1))).ECastType<int>(), "本期减少头数|合计"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("Flag", 0), DQExpression.Value(1), DQExpression.Value(-1))).ECastType<int>(), "期末头数"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.LessThan("Time", startTime), DQExpression.LogicCase(DQCondition.EQ("Flag", 0), DQExpression.Field("Weight"), DQExpression.Multiply(DQExpression.Value(-1), DQExpression.Field("Weight"))))).ECastType<decimal>(), "期初重量"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("Flag", 0)), DQExpression.Field("Weight"))).ECastType<decimal>(), "本期增加重量|成品入库"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("Flag", 0)), DQExpression.Field("Weight"))).ECastType<decimal>(), "本期增加重量|合计"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("Flag", 1)), DQExpression.Field("Weight"))).ECastType<decimal>(), "本期减少重量|分割领用"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("Flag", 2)), DQExpression.Field("Weight"))).ECastType<decimal>(), "本期减少重量|销售出库"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.InEQ("Flag", 0)), DQExpression.Field("Weight"))).ECastType<decimal>(), "本期减少重量|合计"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("Flag", 0), DQExpression.Field("Weight"), DQExpression.Multiply(DQExpression.Value(-1), DQExpression.Field("Weight")))).ECastType<decimal>(), "期末重量"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.LessThan("Time", startTime), DQExpression.LogicCase(DQCondition.EQ("InStore", true), DQExpression.Field("Number"), DQExpression.Multiply(DQExpression.Value(-1), DQExpression.Field("Number"))))), "期初头数"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("Flag", 0)), DQExpression.Field("Number"))), "本期增加头数|成品入库"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("Flag", 3)), DQExpression.Field("Number"))), "本期增加头数|库存盘点"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("InStore", true)), DQExpression.Field("Number"))), "本期增加头数|合计"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("Flag", 1)), DQExpression.Field("Number"))), "本期减少头数|分割领用"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("Flag", 2)), DQExpression.Field("Number"))), "本期减少头数|销售出库"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("InStore", false)), DQExpression.Field("Number"))), "本期减少头数|合计"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("InStore", true), DQExpression.Field("Number"), DQExpression.Multiply(DQExpression.Value(-1), DQExpression.Field("Number")))), "期末头数"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.LessThan("Time", startTime), DQExpression.LogicCase(DQCondition.EQ("InStore", true), DQExpression.Field("Weight"), DQExpression.Multiply(DQExpression.Value(-1), DQExpression.Field("Weight"))))), "期初重量"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("Flag", 0)), DQExpression.Field("Weight"))), "本期增加重量|成品入库"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("Flag", 3)), DQExpression.Field("Weight"))), "本期增加重量|库存盘点"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("InStore", true)), DQExpression.Field("Weight"))), "本期增加重量|合计"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("Flag", 1)), DQExpression.Field("Weight"))), "本期减少重量|分割领用"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("Flag", 2)), DQExpression.Field("Weight"))), "本期减少重量|销售出库"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.And(DQCondition.GreaterThanOrEqual("Time", startTime), DQCondition.EQ("InStore", false)), DQExpression.Field("Weight"))), "本期减少重量|合计"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("InStore", true), DQExpression.Field("Weight"), DQExpression.Multiply(DQExpression.Value(-1), DQExpression.Field("Weight")))), "期末重量"));
query.GroupBy.Expressions.Add(DQExpression.Field("Goods_ID")); query.GroupBy.Expressions.Add(DQExpression.Field("Goods_ID"));
query.GroupBy.Expressions.Add(DQExpression.Field("Goods_Code")); query.GroupBy.Expressions.Add(DQExpression.Field("Goods_Code"));
query.GroupBy.Expressions.Add(DQExpression.Field("Goods_Name")); query.GroupBy.Expressions.Add(DQExpression.Field("Goods_Name"));
query.GroupBy.Expressions.Add(DQExpression.Field("Goods_Spec")); query.GroupBy.Expressions.Add(DQExpression.Field("Goods_Spec"));
query.Where.Conditions.Add(DQCondition.LessThanOrEqual("Time", endTime));
query.Having.Conditions.Add(DQCondition.Or(DQCondition.InEQ(DQExpression.IfNull(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("InStore", true), DQExpression.Field("Number"), DQExpression.Multiply(DQExpression.Value(-1), DQExpression.Field("Number")))), DQExpression.Value(0)), DQExpression.Value(0)), DQCondition.InEQ(DQExpression.IfNull(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("InStore", true), DQExpression.Field("Weight"), DQExpression.Multiply(DQExpression.Value(-1), DQExpression.Field("Weight")))), DQExpression.Value(0)), DQExpression.Value(0))));
query.Having.Conditions.Add(DQCondition.Or(DQCondition.InEQ(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("Flag", 0), DQExpression.Value(1), DQExpression.Value(-1))), DQExpression.Value(0)), DQCondition.InEQ(DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("Flag", 0), DQExpression.Field("Weight"), DQExpression.Multiply(DQExpression.Value(-1), DQExpression.Field("Weight")))), DQExpression.Value(0))));
var args = new LoadArguments(query); var args = new LoadArguments(query);
for (var idx = 4; idx < query.Columns.Count; idx++) for (var idx = 4; idx < query.Columns.Count; idx++)
{ {
@ -169,70 +175,5 @@ namespace BWP.Web.Pages.B3ClientService.Reports.CarcassInOutStoreAnalyse_
if (!IsPostBack) if (!IsPostBack)
StartQuery(); StartQuery();
} }
[DFClass]
class UnionTemp
{
public long Goods_ID { get; set; }
public decimal Weight { get; set; }
public DateTime Time { get; set; }
public int Flag { get; set; }
[ReferenceTo(typeof(Goods), "Name")]
[Join("Goods_ID", "ID")]
public string Goods_Name { get; set; }
[ReferenceTo(typeof(Goods), "Code")]
[Join("Goods_ID", "ID")]
public string Goods_Code { get; set; }
[ReferenceTo(typeof(Goods), "Spec")]
[Join("Goods_ID", "ID")]
public string Goods_Spec { get; set; }
}
DQueryDom GetUnionDom(DateTime endTime)
{
var u1 = GetInStore(endTime);
var u2 = GetPickOutStore(endTime);
u1.UnionNext.Select = u2;
u1.UnionNext.Type = UnionType.All;
u2.UnionNext.Select = GetSaleOutStore(endTime);
u2.UnionNext.Type = UnionType.All;
return u1;
}
DQueryDom GetInStore(DateTime endTime)
{
var query = new DQueryDom(new JoinAlias("_inStore", typeof(CarcassFullInfo)));
query.Columns.Add(DQSelectColumn.Field("InStoreGoods_ID"));
query.Columns.Add(DQSelectColumn.Field("InStoreWeight"));
query.Columns.Add(DQSelectColumn.Field("InStoreTime"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(0), "Falg"));
query.Where.Conditions.Add(DQCondition.LessThanOrEqual("InStoreTime", endTime));
return query;
}
DQueryDom GetPickOutStore(DateTime endTime)
{
var query = new DQueryDom(new JoinAlias("_pickOut", typeof(CarcassFullInfo)));
query.Columns.Add(DQSelectColumn.Field("InStoreGoods_ID"));
query.Columns.Add(DQSelectColumn.Field("PickWeight"));
query.Columns.Add(DQSelectColumn.Field("PickTime"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(1), "Falg"));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("PickType", 0), DQCondition.LessThanOrEqual("PickTime", endTime)));
return query;
}
DQueryDom GetSaleOutStore(DateTime endTime)
{
var query = new DQueryDom(new JoinAlias("_saleOut", typeof(CarcassFullInfo)));
query.Columns.Add(DQSelectColumn.Field("SaleGoods_ID"));
query.Columns.Add(DQSelectColumn.Field("PickWeight"));
query.Columns.Add(DQSelectColumn.Field("PickTime"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(2), "Falg"));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("PickType", 1), DQCondition.LessThanOrEqual("PickTime", endTime)));
return query;
}
} }
} }

+ 9
- 2
B3ClientService/B3ClientService.csproj View File

@ -90,6 +90,10 @@
<HintPath>..\..\..\..\BwpB3Project\tsref\Debug\TSingSoft.WebControls2.dll</HintPath> <HintPath>..\..\..\..\BwpB3Project\tsref\Debug\TSingSoft.WebControls2.dll</HintPath>
<Private>False</Private> <Private>False</Private>
</Reference> </Reference>
<Reference Include="Wpf, Version=1.3.0.0, Culture=neutral, PublicKeyToken=a04fa581c0f74d43, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\tsref\Debug\Wpf.dll</HintPath>
</Reference>
<Reference Include="Wpf.System, Version=1.3.0.0, Culture=neutral, PublicKeyToken=a04fa581c0f74d43, processorArchitecture=MSIL"> <Reference Include="Wpf.System, Version=1.3.0.0, Culture=neutral, PublicKeyToken=a04fa581c0f74d43, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\BwpB3Project\tsref\Debug\Wpf.System.dll</HintPath> <HintPath>..\..\..\..\BwpB3Project\tsref\Debug\Wpf.System.dll</HintPath>
@ -107,6 +111,7 @@
<Compile Include="BL\BaseInfo\ProductBatchBL.cs" /> <Compile Include="BL\BaseInfo\ProductBatchBL.cs" />
<Compile Include="BL\BaseInfo\WorkerBL.cs" /> <Compile Include="BL\BaseInfo\WorkerBL.cs" />
<Compile Include="BL\BaseInfo\WorkUnitBL.cs" /> <Compile Include="BL\BaseInfo\WorkUnitBL.cs" />
<Compile Include="BL\Bill\CarcassInventoryBL.cs" />
<Compile Include="BO\BaseInfo\BaseInfo.cs" /> <Compile Include="BO\BaseInfo\BaseInfo.cs" />
<Compile Include="BO\BaseInfo\BodyDiscontItem.cs" /> <Compile Include="BO\BaseInfo\BodyDiscontItem.cs" />
<Compile Include="BO\BaseInfo\BodyDiscontRelate.cs" /> <Compile Include="BO\BaseInfo\BodyDiscontRelate.cs" />
@ -132,7 +137,9 @@
<Compile Include="BO\BaseInfo\WorkUnit.cs" /> <Compile Include="BO\BaseInfo\WorkUnit.cs" />
<Compile Include="BO\BaseInfo\Zone.cs" /> <Compile Include="BO\BaseInfo\Zone.cs" />
<Compile Include="BO\Bill\CarcassFullInfo.cs" /> <Compile Include="BO\Bill\CarcassFullInfo.cs" />
<Compile Include="BO\Bill\CarcassInventoryTemp.cs" />
<Compile Include="BO\Bill\CarcassInventory\CarcassInventory.cs" />
<Compile Include="BO\Bill\CarcassInventory\CarcassInventory_Detail.cs" />
<Compile Include="BO\Bill\CarcassInventory\CarcassInventory_SummaryDetail.cs" />
<Compile Include="BO\Bill\CarcassStateWeight\CarcassStateWeight.cs" /> <Compile Include="BO\Bill\CarcassStateWeight\CarcassStateWeight.cs" />
<Compile Include="BO\Bill\CarcassStateWeight\CarcassStateWeightByCode.cs" /> <Compile Include="BO\Bill\CarcassStateWeight\CarcassStateWeightByCode.cs" />
<Compile Include="BO\Bill\CarcassStateWeight\CarcassStateWeightInStore.cs" /> <Compile Include="BO\Bill\CarcassStateWeight\CarcassStateWeightInStore.cs" />
@ -157,6 +164,7 @@
<Compile Include="BO\Bill\WeightBill\WeightBill_SanctionDetail.cs" /> <Compile Include="BO\Bill\WeightBill\WeightBill_SanctionDetail.cs" />
<Compile Include="BO\Bill\WeightBill\WeightDetail.cs" /> <Compile Include="BO\Bill\WeightBill\WeightDetail.cs" />
<Compile Include="BO\ByProductWeightRecord_\ByProductWeightRecord.cs" /> <Compile Include="BO\ByProductWeightRecord_\ByProductWeightRecord.cs" />
<Compile Include="BO\CarcassFullInfoView.cs" />
<Compile Include="BO\ClientGoodsSet_\ClientGoodsSet.cs" /> <Compile Include="BO\ClientGoodsSet_\ClientGoodsSet.cs" />
<Compile Include="BO\ClientGoodsSet_\ClientGoodsSet_Detail.cs" /> <Compile Include="BO\ClientGoodsSet_\ClientGoodsSet_Detail.cs" />
<Compile Include="BO\ClientSyncBase.cs" /> <Compile Include="BO\ClientSyncBase.cs" />
@ -246,7 +254,6 @@
<Compile Include="WordPair.cs" /> <Compile Include="WordPair.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="BL\Bill\" />
<Folder Include="Rpcs\RpcBO\BaseInfo\" /> <Folder Include="Rpcs\RpcBO\BaseInfo\" />
<Folder Include="Tasks\DownLoad\" /> <Folder Include="Tasks\DownLoad\" />
</ItemGroup> </ItemGroup>


+ 18
- 0
B3ClientService/BL/Bill/CarcassInventoryBL.cs View File

@ -0,0 +1,18 @@
using BWP.B3ClientService.BO;
using BWP.B3Frameworks.BL;
using Forks.EnterpriseServices.BusinessInterfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BWP.B3ClientService.BL
{
[BusinessInterface(typeof(CarcassInventoryBL))]
public interface ICarcassInventoryBL : IBillBL<CarcassInventory>
{ }
public class CarcassInventoryBL : BillBL<CarcassInventory>, ICarcassInventoryBL
{
}
}

+ 36
- 0
B3ClientService/BO/Bill/CarcassInventory/CarcassInventory.cs View File

@ -0,0 +1,36 @@
using BWP.B3Frameworks;
using Forks.EnterpriseServices;
using Forks.EnterpriseServices.DataForm;
using Forks.EnterpriseServices.DomainObjects2;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TSingSoft.WebControls2;
namespace BWP.B3ClientService.BO
{
[DFClass, Serializable]
[LogicName("盘点单")]
public class CarcassInventory : B3Frameworks.BO.Bill
{
[LogicName("盘点日期")]
public DateTime Date { get; set; }
[LogicName("生产批次")]
[DFExtProperty("WebControlType", DFEditControl.ChoiceBox)]
[DFExtProperty(B3FrameworksConsts.DFExtProperties.QueryDataKind, B3ClientServiceConsts.DataSources.生产批次)]
public long? ProductBatch_ID { get; set; }
private CarcassInventory_SummaryDetailCollection _details = new CarcassInventory_SummaryDetailCollection();
[OneToMany(typeof(CarcassInventory_SummaryDetail), "ID")]
[Join("ID", "CarcassInventory_ID")]
public CarcassInventory_SummaryDetailCollection Details { get { return _details; } }
[LogicName("生产批次")]
[ReferenceTo(typeof(ProductBatch), "Name")]
[Join("ProductBatch_ID", "ID")]
public string ProductBatch_Name { get; set; }
}
}

+ 43
- 0
B3ClientService/BO/Bill/CarcassInventory/CarcassInventory_Detail.cs View File

@ -0,0 +1,43 @@
using BWP.B3Frameworks.BO;
using Forks.EnterpriseServices;
using Forks.EnterpriseServices.DataForm;
using Forks.EnterpriseServices.DomainObjects2;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BWP.B3ClientService.BO
{
[DFClass,Serializable]
[LogicName("盘点单明细")]
public class CarcassInventory_Detail : Base
{
public long CarcassInventory_ID { get; set; }
[LogicName("盘点人")]
public long Worker_ID { get; set; }
[LogicName("时间")]
public DateTime Time { get; set; }
[LogicName("条码")]
public string BarCode { get; set; }
[LogicName("存货")]
public long? Goods_ID { get; set; }
[LogicName("重量")]
public decimal? Weight { get; set; }
[LogicName("存货")]
[ReferenceTo(typeof(Goods), "Name")]
[Join("Goods_ID", "ID")]
public string Goods_Name { get; set; }
[LogicName("盘点人")]
[ReferenceTo(typeof(Worker), "Name")]
[Join("Worker_ID", "ID")]
public string Worker_Name { get; set; }
}
}

+ 48
- 0
B3ClientService/BO/Bill/CarcassInventory/CarcassInventory_SummaryDetail.cs View File

@ -0,0 +1,48 @@
using BWP.B3Frameworks.BO;
using Forks.EnterpriseServices;
using Forks.EnterpriseServices.DataForm;
using Forks.EnterpriseServices.DomainObjects2;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BWP.B3ClientService.BO
{
[DFClass, Serializable]
[LogicName("盘点单汇总明细")]
public class CarcassInventory_SummaryDetail : Base
{
public long CarcassInventory_ID { get; set; }
[LogicName("存货")]
public long? Goods_ID { get; set; }
[LogicName("头数")]
public int Number { get; set; }
[LogicName("重量")]
public decimal Weight { get; set; }
[LogicName("账存头数")]
public int StoreNumber { get; set; }
[LogicName("账存重量")]
public decimal StoreWeight { get; set; }
[LogicName("损益头数")]
public int DiffNumber { get; set; }
[LogicName("损益重量")]
public decimal DiffWeight { get; set; }
[LogicName("存货")]
[ReferenceTo(typeof(Goods), "Name")]
[Join("Goods_ID", "ID")]
public string Goods_Name { get; set; }
}
[Serializable]
public class CarcassInventory_SummaryDetailCollection : DmoCollection<CarcassInventory_SummaryDetail>
{ }
}

+ 0
- 17
B3ClientService/BO/Bill/CarcassInventoryTemp.cs View File

@ -1,17 +0,0 @@
using BWP.B3Frameworks.BO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace BWP.B3ClientService.BO
{
public class CarcassInventoryTemp : Base
{
public long Worker_ID { get; set; }
public DateTime Date { get; set; }
public string BarCode { get; set; }
}
}

+ 123
- 0
B3ClientService/BO/CarcassFullInfoView.cs View File

@ -0,0 +1,123 @@
using Forks.EnterpriseServices.DataForm;
using Forks.EnterpriseServices.DomainObjects2;
using Forks.EnterpriseServices.DomainObjects2.DQuery;
using Forks.EnterpriseServices.SqlDoms;
using Forks.Utils.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TSingSoft.WebPluginFramework;
namespace BWP.B3ClientService.BO
{
[DFClass]
[Serializable]
[MapToView]
public class CarcassFullInfoView : ICreateView
{
public long? ProductBatch_ID { get; set; }
public long? Goods_ID { get; set; }
public int Number { get; set; }
public decimal Weight { get; set; }
public DateTime Time { get; set; }
public bool InStore { get; set; }
public int Flag { get; set; }
[ReferenceTo(typeof(Goods), "Name")]
[Join("Goods_ID", "ID")]
public string Goods_Name { get; set; }
[ReferenceTo(typeof(Goods), "Code")]
[Join("Goods_ID", "ID")]
public string Goods_Code { get; set; }
[ReferenceTo(typeof(Goods), "Spec")]
[Join("Goods_ID", "ID")]
public string Goods_Spec { get; set; }
[ReferenceTo(typeof(ProductBatch), "Name")]
[Join("ProductBatch_ID", "ID")]
public string ProductBatch_Name { get; set; }
public Forks.EnterpriseServices.SqlDoms.ISqlDom CreateView()
{
var u1 = GetInStore();
var u2 = GetPickOutStore();
var u3 = GetSaleOutStore();
u1.UnionNext.Select = u2;
u1.UnionNext.Type = UnionType.All;
u2.UnionNext.Select = u3;
u2.UnionNext.Type = UnionType.All;
u3.UnionNext.Select = GetCarcassInventory();
u3.UnionNext.Type = UnionType.All;
var sqlDom1 = u1.Build(DbProviderType.SqlClient, DbmsType.sqlserver);
return sqlDom1;
}
DQueryDom GetInStore()
{
var query = new DQueryDom(new JoinAlias("_inStore", typeof(CarcassFullInfo)));
query.Columns.Add(DQSelectColumn.Field("ProductBatch_ID"));
query.Columns.Add(DQSelectColumn.Field("InStoreGoods_ID", "Goods_ID"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(1), "Number"));
query.Columns.Add(DQSelectColumn.Field("InStoreWeight", "Weight"));
query.Columns.Add(DQSelectColumn.Field("InStoreTime", "Time"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(true), "InStore"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(0), "Flag"));
query.Where.Conditions.Add(DQCondition.IsNotNull(DQExpression.Field("InStoreTime")));
return query;
}
DQueryDom GetPickOutStore()
{
var query = new DQueryDom(new JoinAlias("_pickOut", typeof(CarcassFullInfo)));
query.Columns.Add(DQSelectColumn.Field("ProductBatch_ID"));
query.Columns.Add(DQSelectColumn.Field("InStoreGoods_ID", "Goods_ID"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(1), "Number"));
query.Columns.Add(DQSelectColumn.Field("PickWeight", "Weight"));
query.Columns.Add(DQSelectColumn.Field("PickTime", "Time"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(false), "InStore"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(1), "Flag"));
query.Where.Conditions.Add(DQCondition.EQ("PickType", 0));
return query;
}
DQueryDom GetSaleOutStore()
{
var query = new DQueryDom(new JoinAlias("_saleOut", typeof(CarcassFullInfo)));
query.Columns.Add(DQSelectColumn.Field("ProductBatch_ID"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.LogicCase(DQCondition.IsNull(DQExpression.Field("InStoreTime")), DQExpression.Field("SaleGoods_ID"), DQExpression.Field("InStoreGoods_ID")), "Goods_ID"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(1), "Number"));
query.Columns.Add(DQSelectColumn.Field("PickWeight", "Weight"));
query.Columns.Add(DQSelectColumn.Field("PickTime", "Time"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(false), "InStore"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(2), "Flag"));
query.Where.Conditions.Add(DQCondition.EQ("PickType", 1));
return query;
}
DQueryDom GetCarcassInventory()
{
var main = new JoinAlias(typeof(CarcassInventory));
var detail = new JoinAlias(typeof(CarcassInventory_SummaryDetail));
var query = new DQueryDom(main);
query.From.AddJoin(JoinType.Inner, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "CarcassInventory_ID"));
query.Columns.Add(DQSelectColumn.Field("ProductBatch_ID"));
query.Columns.Add(DQSelectColumn.Field("Goods_ID", detail));
query.Columns.Add(DQSelectColumn.Field("DiffNumber", detail, "Number"));
query.Columns.Add(DQSelectColumn.Field("DiffWeight", detail, "Weight"));
query.Columns.Add(DQSelectColumn.Field("Date", "Time"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(true), "InStore"));
query.Columns.Add(DQSelectColumn.Create(DQExpression.Value(3), "Flag"));
return query;
}
}
}

+ 15
- 0
B3ClientService/ClientServiceUtils.cs View File

@ -1,4 +1,5 @@
using BWP.B3ClientService.BO; using BWP.B3ClientService.BO;
using Forks.EnterpriseServices.BusinessInterfaces;
using Forks.EnterpriseServices.DomainObjects2; using Forks.EnterpriseServices.DomainObjects2;
using Forks.EnterpriseServices.DomainObjects2.DQuery; using Forks.EnterpriseServices.DomainObjects2.DQuery;
using System; using System;
@ -38,5 +39,19 @@ namespace BWP.B3ClientService
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ(field, value), DQCondition.EQ("DeleteState", false))); query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ(field, value), DQCondition.EQ("DeleteState", false)));
return query.EExists(); return query.EExists();
} }
static WpfUser user;
public static WpfUser InternalUser
{
get
{
if (user == null)
{
user = BIFactory.Create<IUserBL>().Get(WpfUser.InternalAccountName);
user.UserTag = WpfUser.InternalUserTag;
}
return user;
}
}
} }
} }

+ 98
- 8
B3ClientService/OfflinRpc/CarcassInventoryRpc.cs View File

@ -1,7 +1,10 @@
using BWP.B3ClientService.BO;
using BWP.B3ClientService.BL;
using BWP.B3ClientService.BO;
using Forks.EnterpriseServices.BusinessInterfaces;
using Forks.EnterpriseServices.DomainObjects2; using Forks.EnterpriseServices.DomainObjects2;
using Forks.EnterpriseServices.DomainObjects2.DQuery; using Forks.EnterpriseServices.DomainObjects2.DQuery;
using Forks.EnterpriseServices.JsonRpc; using Forks.EnterpriseServices.JsonRpc;
using Newtonsoft.Json;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -22,21 +25,108 @@ namespace BWP.B3ClientService.Rpcs
} }
[Rpc(RpcFlags.SkipAuth)] [Rpc(RpcFlags.SkipAuth)]
public static int InsertInventoryInfo(List<CarcassInventoryTemp> list)
public static int InsertInventoryInfo(List<CarcassInventory_Detail> list)
{ {
using (var session = Dmo.NewSession())
using (new WpfSpecialUserScope(ClientServiceUtils.InternalUser))
{ {
foreach (var item in list)
session.Insert(item);
using (var session = Dmo.NewSession())
{
var productBatchID = FillDetails(session, list);
var bl = BIFactory.Create<ICarcassInventoryBL>(session);
foreach (var item in list.GroupBy(x => x.Time.Date))
{
var entity = new CarcassInventory();
bl.InitNewDmo(entity);
entity.Date = item.Max(x => x.Time);
entity.ProductBatch_ID = productBatchID;
foreach (var gGroup in item.GroupBy(x => x.Goods_ID))
{
var detail = new CarcassInventory_SummaryDetail();
detail.Goods_ID = gGroup.Key;
detail.Number = gGroup.Count();
detail.Weight = gGroup.Sum(x => x.Weight ?? 0);
entity.Details.Add(detail);
}
FillStoreInfo(entity, session);
bl.Insert(entity);
foreach (var d in item)
{
d.CarcassInventory_ID = entity.ID;
session.Insert(d);
}
}
session.Commit();
}
} }
return list.Count; return list.Count;
} }
[Rpc(RpcFlags.SkipAuth)]
public static int FinishInventory()
static long? FillDetails(IDmoSession session, List<CarcassInventory_Detail> list)
{
var withG = list.Where(x => x.BarCode.StartsWith("G"));
var right = list.Where(x => !x.BarCode.StartsWith("G"));
foreach (var item in withG)
item.Goods_ID = long.Parse(item.BarCode.TrimStart('G'));
return FillInfoFromCarcass(session, right);
}
private static long? FillInfoFromCarcass(IDmoSession session, IEnumerable<CarcassInventory_Detail> list)
{
long? productBatchID = null;
var query = new DQueryDom(new JoinAlias(typeof(CarcassFullInfo)));
query.Columns.Add(DQSelectColumn.Field("BarCode"));
query.Columns.Add(DQSelectColumn.Field("InStoreGoods_ID"));
query.Columns.Add(DQSelectColumn.Field("InStoreWeight"));
query.Columns.Add(DQSelectColumn.Field("ProductBatch_ID"));
query.Where.Conditions.Add(DQCondition.InList(DQExpression.Field("BarCode"), list.Select(x => DQExpression.Value(x.BarCode)).ToArray()));
using (var reader = session.ExecuteReader(query))
{
while (reader.Read())
{
var first = list.First(x => x.BarCode == (string)reader[0]);
first.Goods_ID = (long?)reader[1];
first.Weight = (decimal?)reader[2];
if (productBatchID == null)
productBatchID = (long?)reader[3];
}
}
return productBatchID;
}
static void FillStoreInfo(CarcassInventory dmo, IDmoSession session)
{ {
var numCol = DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("InStore", true), DQExpression.Field("Number"), DQExpression.Multiply(DQExpression.Value(-1), DQExpression.Field("Number"))));
var weightCol = DQExpression.Sum(DQExpression.LogicCase(DQCondition.EQ("InStore", true), DQExpression.Field("Weight"), DQExpression.Multiply(DQExpression.Value(-1), DQExpression.Field("Weight"))));
var query = new DQueryDom(new JoinAlias(typeof(CarcassFullInfoView)));
query.Where.Conditions.Add(DQCondition.And(DQCondition.LessThanOrEqual("Date", dmo.Date), DQCondition.EQ("ProductBatch_ID", dmo.ProductBatch_ID)));
query.Columns.Add(DQSelectColumn.Field("Goods_ID"));
query.GroupBy.Expressions.Add(DQExpression.Field("Goods_ID"));
query.Columns.Add(DQSelectColumn.Create(numCol, "Number"));
query.Columns.Add(DQSelectColumn.Create(weightCol, "Weight"));
query.Where.Conditions.Add(DQCondition.IsNotNull(DQExpression.Field("Goods_ID")));
query.Having.Conditions.Add(DQCondition.Or(DQCondition.InEQ(DQExpression.IfNull(numCol, DQExpression.Value(0)), DQExpression.Value(0)), DQCondition.InEQ(DQExpression.IfNull(weightCol, DQExpression.Value(0)), DQExpression.Value(0))));
return 1;
using (var reader = session.ExecuteReader(query))
{
while (reader.Read())
{
var gid = (long)reader[0];
var f = dmo.Details.FirstOrDefault(x => x.Goods_ID == gid);
if (f == null)
{
f = new CarcassInventory_SummaryDetail();
f.Goods_ID = gid;
dmo.Details.Add(f);
}
f.StoreNumber = Convert.ToInt32(reader[1] ?? 0);
f.DiffNumber = f.Number - f.StoreNumber;
f.StoreWeight = Convert.ToDecimal(reader[2] ?? 0);
f.DiffWeight = f.Weight - f.StoreWeight;
}
}
} }
} }
} }

+ 5
- 19
B3ClientService/Rpcs/InterfaceRpc/GoodsRpc.cs View File

@ -21,7 +21,7 @@ namespace BWP.B3ClientService.Rpcs.InterfaceRpc
public static int BatchImport(string json) public static int BatchImport(string json)
{ {
var list = JsonConvert.DeserializeObject<List<Goods>>(json); var list = JsonConvert.DeserializeObject<List<Goods>>(json);
using (new WpfSpecialUserScope(InternalUser))
using (new WpfSpecialUserScope(ClientServiceUtils.InternalUser))
{ {
using (var session = Dmo.NewSession()) using (var session = Dmo.NewSession())
{ {
@ -44,7 +44,7 @@ namespace BWP.B3ClientService.Rpcs.InterfaceRpc
[Rpc(RpcFlags.SkipAuth)] [Rpc(RpcFlags.SkipAuth)]
public static int Stop(string code) public static int Stop(string code)
{ {
using (new WpfSpecialUserScope(InternalUser))
using (new WpfSpecialUserScope(ClientServiceUtils.InternalUser))
{ {
using (var session = Dmo.NewSession()) using (var session = Dmo.NewSession())
{ {
@ -61,7 +61,7 @@ namespace BWP.B3ClientService.Rpcs.InterfaceRpc
[Rpc(RpcFlags.SkipAuth)] [Rpc(RpcFlags.SkipAuth)]
public static int Start(string code) public static int Start(string code)
{ {
using (new WpfSpecialUserScope(InternalUser))
using (new WpfSpecialUserScope(ClientServiceUtils.InternalUser))
{ {
using (var session = Dmo.NewSession()) using (var session = Dmo.NewSession())
{ {
@ -78,7 +78,7 @@ namespace BWP.B3ClientService.Rpcs.InterfaceRpc
[Rpc(RpcFlags.SkipAuth)] [Rpc(RpcFlags.SkipAuth)]
public static int Delete(string code) public static int Delete(string code)
{ {
using (new WpfSpecialUserScope(InternalUser))
using (new WpfSpecialUserScope(ClientServiceUtils.InternalUser))
{ {
using (var session = Dmo.NewSession()) using (var session = Dmo.NewSession())
{ {
@ -102,7 +102,7 @@ namespace BWP.B3ClientService.Rpcs.InterfaceRpc
public static int UpdateOrInsert(string json) public static int UpdateOrInsert(string json)
{ {
var item = JsonConvert.DeserializeObject<Goods>(json); var item = JsonConvert.DeserializeObject<Goods>(json);
using (new WpfSpecialUserScope(InternalUser))
using (new WpfSpecialUserScope(ClientServiceUtils.InternalUser))
{ {
using (var session = Dmo.NewSession()) using (var session = Dmo.NewSession())
{ {
@ -133,19 +133,5 @@ namespace BWP.B3ClientService.Rpcs.InterfaceRpc
else else
bl.Update(goods); bl.Update(goods);
} }
static WpfUser user;
static WpfUser InternalUser
{
get
{
if (user == null)
{
user = BIFactory.Create<IUserBL>().Get(WpfUser.InternalAccountName);
user.UserTag = WpfUser.InternalUserTag;
}
return user;
}
}
} }
} }

+ 16
- 0
WebFolder/config/plugins/B3ClientService.plugin View File

@ -96,6 +96,20 @@
<Function index="6" name="锁定" /> <Function index="6" name="锁定" />
<Function index="7" name="解锁" /> <Function index="7" name="解锁" />
</FunctionGroup> </FunctionGroup>
<FunctionGroup name="盘点单" roleSchemas="default">
<Function index="0" name="访问" />
<Function index="1" name="新建" />
<Function index="2" name="编辑" />
<Function index="3" name="删除" />
<Function index="4" name="审核" />
<Function index="5" name="撤销" />
<Function index="6" name="锁定" />
<Function index="7" name="解锁" />
<Function index="8" name="管理" />
<Function index="9" name="作废" />
<Function index="10" name="完毕" />
<Function index="11" name="撤销完毕" />
</FunctionGroup>
</Security> </Security>
<Features> <Features>
</Features> </Features>
@ -110,6 +124,8 @@
<Menu id="0011" name="MES系统/基础信息/生产批次" roles="B3ClientService.生产批次.访问" url="B3ClientService/BaseInfos/ProductBatch_/ProductBatchList.aspx"/> <Menu id="0011" name="MES系统/基础信息/生产批次" roles="B3ClientService.生产批次.访问" url="B3ClientService/BaseInfos/ProductBatch_/ProductBatchList.aspx"/>
<Menu id="0012" name="MES系统/系统管理/存货配置" roles="B3ClientService.客户端存货配置.访问" url="B3ClientService/BaseInfos/ClientGoodsSet_/ClientGoodsSetList.aspx"/> <Menu id="0012" name="MES系统/系统管理/存货配置" roles="B3ClientService.客户端存货配置.访问" url="B3ClientService/BaseInfos/ClientGoodsSet_/ClientGoodsSetList.aspx"/>
<Menu id="0020" name="MES系统/业务单据/盘点单" roles="B3ClientService.盘点单.访问" url="B3ClientService/Bills/CarcassInventory_/CarcassInventoryList.aspx"/>
<Menu id="0030" name="MES系统/MES报表展示/白条状态分析" roles="B3ClientService.报表展示.白条状态分析" url="B3ClientService/Reports/CarcassStateAnalyse_/CarcassStateAnalyse.aspx"/> <Menu id="0030" name="MES系统/MES报表展示/白条状态分析" roles="B3ClientService.报表展示.白条状态分析" url="B3ClientService/Reports/CarcassStateAnalyse_/CarcassStateAnalyse.aspx"/>
<Menu id="0031" name="MES系统/MES报表展示/白条级别汇总" roles="B3ClientService.报表展示.白条级别汇总" url="B3ClientService/Reports/CarcassGradeAnalyse_/CarcassGradeAnalyse.aspx"/> <Menu id="0031" name="MES系统/MES报表展示/白条级别汇总" roles="B3ClientService.报表展示.白条级别汇总" url="B3ClientService/Reports/CarcassGradeAnalyse_/CarcassGradeAnalyse.aspx"/>
<Menu id="0032" name="MES系统/MES报表展示/白条进销存" roles="B3ClientService.报表展示.白条进销存" url="B3ClientService/Reports/CarcassInOutStoreAnalyse_/CarcassInOutStoreAnalyse.aspx"/> <Menu id="0032" name="MES系统/MES报表展示/白条进销存" roles="B3ClientService.报表展示.白条进销存" url="B3ClientService/Reports/CarcassInOutStoreAnalyse_/CarcassInOutStoreAnalyse.aspx"/>


Loading…
Cancel
Save