Browse Source

销售发货客户端调整为可以按箱发货。

master
wugang 7 years ago
parent
commit
16905e5c83
3 changed files with 274 additions and 1 deletions
  1. +1
    -1
      B3CowButcherManageToSale/B3CowButcherManageToSale.csproj
  2. +2
    -0
      B3CowButcherManageToSale/Properties/AssemblyInfo.cs
  3. +271
    -0
      B3CowButcherManageToSale/Rpcs/SaleOutStoreRpc.cs

+ 1
- 1
B3CowButcherManageToSale/B3CowButcherManageToSale.csproj View File

@ -80,11 +80,11 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Rpcs\SaleOutStoreRpc.cs" />
<Compile Include="TypeIOCs\SaleOutStoreBLTypeIoc.cs" />
<Compile Include="Utils\CommonQuery.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="Rpcs\" />
<Folder Include="TimerTask\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />


+ 2
- 0
B3CowButcherManageToSale/Properties/AssemblyInfo.cs View File

@ -2,6 +2,7 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Forks.EnterpriseServices.Ert;
// 有关程序集的常规信息通过以下
// 特性集控制。更改这些特性值可修改
@ -35,3 +36,4 @@ using System.Runtime.InteropServices;
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyMapToTablePrefix("B3CowButcherManageToSale_")]
[assembly: ErtAbbr("B3CowButcherManageToSale", "BWP.B3CowButcherManageToSale")]

+ 271
- 0
B3CowButcherManageToSale/Rpcs/SaleOutStoreRpc.cs View File

@ -0,0 +1,271 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BWP.B3CowButcherManage.BO;
using BWP.B3Frameworks.Utils;
using BWP.B3Sale.BO;
using Forks.EnterpriseServices.DomainObjects2;
using Forks.EnterpriseServices.DomainObjects2.DQuery;
using Forks.EnterpriseServices.JsonRpc;
using Forks.EnterpriseServices.SqlDoms;
using Forks.Utils;
using Newtonsoft.Json;
using TSingSoft.WebPluginFramework;
namespace BWP.B3CowButcherManageToSale.Rpcs
{
[Rpc]
public static class SaleOutStoreRpc
{
class WeightRecord
{
public long ID { get; set; }
public string BarCode { get; set; }
public DateTime WeightTime { get; set; }
public decimal? MainUnitNum { get; set; }
public decimal? SecondNumber { get; set; }
public bool? IsPackage { get; set; }
public bool? HasPWeight { get; set; }
public string Product_Batch { get; set; }
}
static Tuple<long, long?, long, string> GetSaleOutInfo(IDmoSession session, long detailID)
{
var main = new JoinAlias(typeof(SaleOutStore));
var detail = new JoinAlias(typeof(SaleOutStore_Detail));
var query = new DQueryDom(main);
query.From.AddJoin(JoinType.Inner, new DQDmoSource(detail), DQCondition.EQ(main, "ID", detail, "SaleOutStore_ID"));
query.Columns.Add(DQSelectColumn.Field("ID", main));
query.Columns.Add(DQSelectColumn.Field("Customer_ID", main));
query.Columns.Add(DQSelectColumn.Field("SaleGoods_ID", detail));
query.Columns.Add(DQSelectColumn.Field("Unit", detail));
query.Where.Conditions.Add(DQCondition.EQ(detail, "ID", detailID));
var result = query.EExecuteList<long, long?, long, string>(session);
if (result == null)
throw new Exception("销售出库单不存在");
return result.FirstOrDefault();
}
private class ExtObj
{
public long? LongExt1 { get; set; }
public List<long?> LongListExt1 { get; set; }
public List<long?> LongListExt2 { get; set; }
}
[Rpc]
public static string SaveWeightRecord(string json, long detailID)
{
var weightRecord = JsonConvert.DeserializeObject<WeightRecord>(json);
var result = new List<ExtObj>();
Tuple<Money<decimal>?, Money<decimal>?> assignInfo;
var longListExt1 = new List<long?>();
var longListExt2 = new List<long?>();
using (var session = Dmo.NewSession())
{
var saleInfo = GetSaleOutInfo(session, detailID);
var billType = DmoTypeIDAttribute.GetID(typeof(SaleOutStore));
if (weightRecord.IsPackage == true)
{
if (weightRecord.HasPWeight == true)
{
var record = CreateWeightingInfo(detailID, saleInfo, billType, weightRecord.MainUnitNum, weightRecord.SecondNumber, weightRecord.WeightTime, weightRecord.Product_Batch, weightRecord.ID);
session.Insert(record);
longListExt1.Add(record.ID);
var barCodes = GetBarCodeInfo(weightRecord.BarCode);
foreach (var code in barCodes)
{
var scan = CreateSanDetail(detailID, saleInfo, code.Weight, 1m, weightRecord.ID, record.ID, code.BarCode);
session.Insert(scan);
longListExt2.Add(scan.ID);
}
}
else
{
var barCodes = GetBarCodeInfo(weightRecord.BarCode);
foreach (var code in barCodes)
{
var wInfo = CreateWeightingInfo(detailID, saleInfo, billType, code.Weight, 1m, weightRecord.WeightTime, code.Product_Batch, weightRecord.ID);
session.Insert(wInfo);
longListExt1.Add(wInfo.ID);
var scan = CreateSanDetail(detailID, saleInfo, code.Weight, 1m, weightRecord.ID, wInfo.ID, code.BarCode);
session.Insert(scan);
longListExt2.Add(scan.ID);
}
}
}
else
{
var record = CreateWeightingInfo(detailID, saleInfo, billType, weightRecord.MainUnitNum, weightRecord.SecondNumber, weightRecord.WeightTime, weightRecord.Product_Batch, weightRecord.ID);
session.Insert(record);
longListExt1.Add(record.ID);
var scan = CreateSanDetail(detailID, saleInfo, weightRecord.MainUnitNum, weightRecord.SecondNumber.Value, weightRecord.ID, record.ID, weightRecord.BarCode);
session.Insert(scan);
longListExt2.Add(scan.ID);
}
result.Add(new ExtObj { LongExt1 = weightRecord.ID, LongListExt1 = longListExt1, LongListExt2 = longListExt2 });
assignInfo = UpdateAssignNumber(session, saleInfo.Item1, detailID);
session.Commit();
}
return JsonConvert.SerializeObject(new Tuple<decimal?, decimal?, List<ExtObj>>(assignInfo.Item1.EToDecimal(), assignInfo.Item2.EToDecimal(), result));
}
[Rpc]
public static int DeleteAndUpdate(long clientId, long detailId)
{
using (var session = Dmo.NewSession())
{
var weightIDs = GetWeightingInforID(session, detailId, clientId);
if(weightIDs.Count > 0)
DeleteByID<WeightingInfor>(session, weightIDs);
var scanIds = GetScanDetailID(session, detailId, clientId);
if (scanIds.Count > 0)
DeleteByID<WeightingInfo_ScanDetail>(session, scanIds);
var billID = InnerBLUtil.GetDmoPropertyByID<long>(session, typeof(SaleOutStore_Detail), "SaleOutStore_ID", detailId);
UpdateAssignNumber(session, billID, detailId, false);
session.Commit();
}
return 1;
}
static List<long> GetWeightingInforID(IDmoSession session, long detailID, long clientId)
{
var query = new DQueryDom(new JoinAlias(typeof(WeightingInfor)));
query.Columns.Add(DQSelectColumn.Field("ID"));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("ClientID", clientId), DQCondition.EQ("DetailID", detailID), DQCondition.EQ("BillType", DmoTypeIDAttribute.GetID(typeof(SaleOutStore)))));
return query.EExecuteList<long>(session);
}
static List<long> GetScanDetailID(IDmoSession session, long detailID, long clientId)
{
var query = new DQueryDom(new JoinAlias(typeof(WeightingInfo_ScanDetail)));
query.Columns.Add(DQSelectColumn.Field("ID"));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("ClientID", clientId), DQCondition.EQ("Detail_ID", detailID)));
return query.EExecuteList<long>(session);
}
static void DeleteByID<T>(IDmoSession session, IEnumerable<long> ids)
{
var delete = new DQDeleteDom(typeof(T));
delete.Where.Conditions.Add(DQCondition.InList(DQExpression.Field("ID"), ids.Select(x => DQExpression.Value(x)).ToArray()));
session.ExecuteNonQuery(delete);
}
private static Tuple<Money<decimal>?, Money<decimal>?> UpdateAssignNumber(IDmoSession session, long billID, long detailID, bool isAdd = true)
{
var weightingInfo = GetWeightingInfor(session, detailID);
var update = new DQUpdateDom(typeof(SaleOutStore_Detail));
update.Columns.Add(new DQUpdateColumn("AssignUnitNum", DQExpression.Value(weightingInfo.Item1)));
update.Columns.Add(new DQUpdateColumn("AssignMainUnitNum", DQExpression.Value(weightingInfo.Item1)));
update.Columns.Add(new DQUpdateColumn("AssignSecondaryUnit1Num", DQExpression.Value(weightingInfo.Item2)));
if (isAdd)
update.Columns.Add(new DQUpdateColumn("PackageNum", DQExpression.Add(DQExpression.IfNull(DQExpression.Field("PackageNum"), DQExpression.Value(0)), DQExpression.Value(1))));
else
update.Columns.Add(new DQUpdateColumn("PackageNum", DQExpression.Add(DQExpression.IfNull(DQExpression.Field("PackageNum"), DQExpression.Value(0)), DQExpression.Value(-1))));
update.Where.Conditions.Add(DQCondition.EQ("ID", detailID));
session.ExecuteNonQuery(update);
var update2 = new DQUpdateDom(typeof(SaleOutStore));
update2.Columns.Add(new DQUpdateColumn("RowVersion", DQExpression.Add(DQExpression.Field("RowVersion"), DQExpression.Value(1))));
update2.Where.Conditions.Add(DQCondition.EQ("ID", billID));
session.ExecuteNonQuery(update2);
return weightingInfo;
}
static Tuple<Money<decimal>?, Money<decimal>?> GetWeightingInfor(IDmoSession session, long detailID)
{
var query = new DQueryDom(new JoinAlias(typeof(WeightingInfor)));
query.Columns.Add(DQSelectColumn.Sum("MainUnitNum"));
query.Columns.Add(DQSelectColumn.Sum("SecondNumber"));
query.Where.Conditions.Add(DQCondition.And(DQCondition.EQ("DetailID", detailID), DQCondition.EQ("BillType", DmoTypeIDAttribute.GetID(typeof(SaleOutStore)))));
return query.EExecuteScalar<Money<decimal>?, Money<decimal>?>(session);
}
private static WeightingInfo_ScanDetail CreateSanDetail(long detailID, Tuple<long, long?, long, string> saleInfo, decimal? mainUnitNum, decimal secondNumber, long? clientID, long? weightRecordID, string code)
{
var scan = new WeightingInfo_ScanDetail();
scan.BarCode = code;
scan.BillID = saleInfo.Item1;
scan.Detail_ID = detailID;
scan.Goods_ID = saleInfo.Item3;
scan.Weight = mainUnitNum;
scan.Number = secondNumber;
scan.ClientID = clientID;
scan.WeightRecordID = weightRecordID;
return scan;
}
private static WeightingInfor CreateWeightingInfo(long detailID, Tuple<long, long?, long, string> saleInfo, short billType, decimal? mainUnitNum, decimal? secondNumber, DateTime? weightTime, string product_Batch, long clientID)
{
var record = new WeightingInfor();
record.BillID = saleInfo.Item1;
record.BillType = billType;
record.Customer_ID = saleInfo.Item2;
record.DetailID = detailID;
record.Goods_ID = saleInfo.Item3;
record.MainUnitNum = mainUnitNum;
record.SecondNumber = secondNumber;
record.NetWeight = mainUnitNum;
record.Weight = mainUnitNum;
record.WeightTime = weightTime;
record.Unit = saleInfo.Item4;
record.Type = "客户端";
record.Product_Batch = product_Batch;
record.ClientID = clientID;
return record;
}
static List<MinBarCode> GetBarCodeInfo(string barCode)
{
var left = new JoinAlias("_l", typeof(BarCodeProductionInfo));
var right = new JoinAlias("_r", typeof(BarCodeProductionInfo));
var query = new DQueryDom(left);
query.From.AddJoin(JoinType.Inner, new DQDmoSource(right), DQCondition.EQ(left, "ID", right, "PackageID"));
query.Where.Conditions.Add(DQCondition.EQ(left, "BarCode", barCode));
var arr = new string[] { "Product_Batch", "BarCode", "Goods_ID", "Weight" };
var list = new List<MinBarCode>();
foreach (var f in arr)
query.Columns.Add(DQSelectColumn.Create(DQExpression.Field(right, f), f));
using (var session = Dmo.NewSession())
{
using (var reader = session.ExecuteReader(query))
{
while (reader.Read())
{
var obj = new MinBarCode()
{
Product_Batch = Convert.ToString(reader[0]),
BarCode = Convert.ToString(reader[1]),
Goods_ID = (long?)reader[2],
Weight = (decimal?)reader[3]
};
list.Add(obj);
}
}
}
return list;
}
class MinBarCode
{
public string Product_Batch { get; set; }
public string BarCode { get; set; }
public long? Goods_ID { get; set; }
public decimal? Weight { get; set; }
}
}
}

Loading…
Cancel
Save