using System;
|
using System.Collections.Generic;
|
using System.IO;
|
using System.Linq;
|
using System.Net;
|
using System.Net.Http;
|
using System.Security.Cryptography;
|
using System.Web.Http;
|
using siemensPda.ORM;
|
using logtxtWrite;
|
using Newtonsoft.Json;
|
using siemensPda.Models;
|
|
namespace siemensPda.Controllers
|
{
|
public class pdaController : ApiController
|
{
|
// sendToSap.ISapWcfService
|
sendToSap.IapitestClient wmsApi = new sendToSap.IapitestClient();
|
/// <summary>
|
/// 登录
|
/// </summary>
|
/// <param name="loginInfo"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public msgs login([FromBody]user loginInfo)
|
{
|
msgs meta = new msgs();
|
try
|
{
|
using (dbModel mod = new dbModel())
|
{
|
|
var logUser = mod.Sys_User.FirstOrDefault(x => x.UserName == loginInfo.UserName);
|
// var logUser = users.FirstOrDefault(x => x.UserName == loginInfo.UserName);
|
if (logUser != null)
|
{
|
|
|
string password = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(loginInfo.PassWord + "{MINGpin365}", "MD5").ToLower();
|
// if (logUser.UserPwd == password)
|
if (logUser.UserPwd == password)
|
{
|
meta.msg = "登录成功";
|
meta.status = 200;
|
meta.token = Encode(loginInfo.UserName + loginInfo.PassWord);
|
}
|
else
|
{
|
meta.msg = "密码错误";
|
meta.status = 400;
|
logtxt.txtWrite("类名:pdaController/函数名:login密码错误 用户名:" + loginInfo.UserName + " 密码:" + loginInfo.PassWord, 2);
|
}
|
}
|
else
|
{
|
meta.msg = "无此用户";
|
meta.status = 400;
|
logtxt.txtWrite("类名:pdaController/函数名:login无此用户 用户名:" + loginInfo.UserName + " 密码:" + loginInfo.PassWord, 2);
|
}
|
|
}
|
}
|
catch (Exception)
|
{
|
logtxt.txtWrite("类名:pdaController/函数名:login登录异常 用户名:" + loginInfo.UserName + " 密码:" + loginInfo.PassWord, 2);
|
}
|
|
return meta;
|
}
|
/// <summary>
|
/// 分拣信息
|
/// </summary>
|
/// <param name="sortingInfos"></param>
|
/// <returns></returns>
|
|
[HttpPost]
|
public msgs sortingConfirm([FromBody]sorting sortingInfos)
|
{
|
msgs meta = new msgs();
|
string Products = "";
|
try
|
{
|
|
logtxt.txtWrite("类名:pdaController/函数名:sortingConfirm ,PDA接受完整数据: " + JsonConvert.SerializeObject(sortingInfos), 0);
|
if (sortingInfos != null)
|
{
|
List<sortingType> plates = new List<sortingType>();
|
|
//判断托盘号是否为空
|
if (!string.IsNullOrEmpty(sortingInfos.plateCode))
|
{
|
using (dbModel mod = new dbModel())
|
{
|
//判断分拣物料数据不能为空
|
if (sortingInfos.plates.Count > 0)
|
{
|
|
foreach (var item in sortingInfos.plates)
|
{
|
|
sortingType plate = new sortingType();//moveMaterials
|
//找到物料ID 可以改成物料编号少读一个表
|
Base_ProductInfo material = mod.Base_ProductInfo.FirstOrDefault(x => x.ProductCode == item.materialCode);
|
if (material != null)
|
{
|
plate.product_Id = (int)material.Product_Id;
|
plate.finishedQuantity = Convert.ToDecimal(item.pickQty);
|
plate.trankNumber = item.trankingNumber;
|
plate.creator = sortingInfos.creator;
|
plates.Add(plate);
|
}
|
}
|
//转换成字符串
|
Products = JsonConvert.SerializeObject(plates);
|
|
string result = wmsApi.sortingConfirm(sortingInfos.plateCode, Products, sortingInfos.percentage);
|
resultMsg resultinfo = JsonConvert.DeserializeObject<resultMsg>(result);
|
if (resultinfo != null)
|
{
|
if (resultinfo.result)
|
{
|
meta.status = 200;
|
meta.msg = resultinfo.msg;
|
}
|
else
|
{
|
meta.status = 400;
|
meta.msg = resultinfo.msg;
|
}
|
}
|
//*/
|
|
logtxt.txtWrite("类名:pdaController/函数名:sortingConfirm ,PDA接受数据: " + Products, 0);
|
}
|
else
|
{
|
meta.status = 400;
|
meta.msg = "分拣数量不能为空";
|
logtxt.txtWrite("类名:pdaController/函数名:sortingConfirm ,PDA分拣数量为空: " + Products, 2);
|
}
|
|
}
|
|
}
|
else
|
{
|
meta.status = 400;
|
meta.msg = "托盘号不能为空";
|
logtxt.txtWrite("类名:pdaController/函数名:sortingConfirm ,PDA托盘号不能为空: " + Products, 2);
|
}
|
|
}
|
else
|
{
|
meta.status = 400;
|
meta.msg = "参数为空";
|
logtxt.txtWrite("类名:pdaController/函数名:sortingConfirm ,PDA参数为空: " + Products, 2);
|
}
|
}
|
catch (Exception ex)
|
{
|
logtxt.txtWrite("类名:pdaController/函数名:sortingConfirm 分拣异常,接受数据: " + Products + "异常信息:" + ex.Message, 2);
|
}
|
return meta;
|
}
|
/// <summary>
|
/// 获取托盘信息
|
/// </summary>
|
/// <param name="plateInfo"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public IHttpActionResult getPlateInfo([FromBody]plate plateInfo)
|
{
|
msgs meta = new msgs();
|
if (string.IsNullOrEmpty(plateInfo.plateCode))
|
{
|
meta.status = 400;
|
meta.msg = "此托盘号不能为空";
|
return Json(meta);
|
}
|
string plateCode = plateInfo.plateCode;
|
List<plateInfo> materials = new List<plateInfo>();
|
|
try
|
{
|
using (dbModel mod = new dbModel())
|
{
|
List<Base_ProductPosition> plateMaterial = mod.Base_ProductPosition.Where(x => x.PlateCode == plateCode).ToList();
|
if (plateMaterial.Count == 0)
|
{
|
meta.status = 400;
|
meta.msg = "不需要分拣";
|
return Json(meta);
|
}
|
//获取库位的空间占比 [EditBy shaocx,2022-10-15]
|
var queryPositionName = plateMaterial.First().PositionName;
|
Base_Position position = mod.Base_Position.Where(x => x.PositionName == queryPositionName).First();
|
foreach (var item in plateMaterial)
|
{
|
plateInfo info = new plateInfo();
|
if (position.PositionLength == null)
|
{
|
info.positionLength = 100;//默认空间比是100
|
}
|
else
|
{
|
info.positionLength = Convert.ToDecimal(position.PositionLength);
|
}
|
|
info.materialCode = item.ProductCode;
|
info.materialName = item.ProductName;
|
info.moveType = item.Remark;
|
|
info.saleCode = item.SaleCode;
|
decimal stockqty = 0M;
|
try
|
{
|
stockqty = Convert.ToDecimal(item.ExtendField02);
|
}
|
catch (Exception)
|
{
|
stockqty = 0M;
|
}
|
info.pickQty = stockqty;
|
info.stockQty = (decimal)item.ProductStorage;
|
info.trankingNumber = item.ExtendField04;
|
info.unit = item.ExtendField05;
|
materials.Add(info);
|
}
|
}
|
|
|
meta.status = 200;
|
|
meta.materials = materials;
|
meta.msg = "获取成功";
|
}
|
catch (Exception)
|
{
|
|
throw;
|
}
|
|
|
return Json(meta);
|
|
}
|
/// <summary>
|
/// 转换成token
|
/// </summary>
|
/// <param name="data">用户名加密码</param>
|
/// <returns>返回用户名加密码的token</returns>
|
private string Encode(string data)
|
{
|
byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes("qwertyui");
|
byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes("qwertyui");
|
|
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
|
int i = cryptoProvider.KeySize;
|
MemoryStream ms = new MemoryStream();
|
CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);
|
StreamWriter sw = new StreamWriter(cst);
|
sw.Write(data);
|
sw.Flush();
|
cst.FlushFinalBlock();
|
sw.Flush();
|
|
return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
|
|
}
|
|
}
|
public class msgs
|
{
|
/// <summary>
|
/// 状态
|
/// </summary>
|
public int status { get; set; }
|
/// <summary>
|
/// 返回信息
|
/// </summary>
|
public string msg { get; set; }
|
/// <summary>
|
/// 物料信息
|
/// </summary>
|
public List<plateInfo> materials { get; set; }
|
/// <summary>
|
/// token
|
/// </summary>
|
public string token { get; set; }
|
}
|
|
public class user
|
{
|
/// <summary>
|
/// 用户名
|
/// </summary>
|
public string UserName { get; set; }
|
/// <summary>
|
/// 密码
|
/// </summary>
|
public string PassWord { get; set; }
|
}
|
|
public class sorting
|
{
|
public string creator { get; set; }
|
public List<plateInfo> plates { get; set; }
|
public string plateCode { get; set; }
|
/// <summary>
|
/// 百分比
|
/// </summary>
|
public string percentage { get; set; }
|
|
}
|
public class plateInfo
|
{
|
|
/// <summary>
|
/// 销售单号
|
/// </summary>
|
public string saleCode { get; set; }
|
|
/// <summary>
|
/// 跟踪号
|
/// </summary>
|
public string trankingNumber { get; set; }
|
/// <summary>
|
/// 物料名称
|
/// </summary>
|
public string materialName { get; set; }
|
/// <summary>
|
/// 物料编号
|
/// </summary>
|
public string materialCode { get; set; }
|
/// <summary>
|
/// 移动类型
|
/// </summary>
|
public string moveType { get; set; }
|
/// <summary>
|
/// 库存单位
|
/// </summary>
|
public string unit { get; set; }
|
/// <summary>
|
/// 库存总数
|
/// </summary>
|
public decimal stockQty { get; set; }
|
/// <summary>
|
/// 分拣数量
|
/// </summary>
|
public decimal pickQty { get; set; }
|
|
/// <summary>
|
/// 占用空间 [EditBy shaocx,2022-10-15]
|
/// </summary>
|
public decimal positionLength { get; set; }
|
|
}
|
public class sortingType
|
{
|
//产品ID
|
public int product_Id { get; set; }
|
//完成数量
|
public decimal finishedQuantity { get; set; }
|
//跟踪号
|
public string trankNumber { get; set; }
|
|
public string creator { get; set; }
|
}
|
public class plate
|
{
|
/// <summary>
|
/// 托盘编号
|
/// </summary>
|
public string plateCode { get; set; }
|
}
|
}
|