快乐的昕的电脑
2025-12-01 ce9ce75d289be1f45d6e7e8d40e95ec7c8f357b5
物料单位换算信息
已添加4个文件
598 ■■■■■ 文件已修改
MES.Service/Dto/webApi/ErpUnitMatrixing.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/MesUnitMatrixing.cs 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/BasicData/MesUnitMatrixingManager.cs 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MESApplication/Controllers/BasicData/MesUnitMatrixingController.cs 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Dto/webApi/ErpUnitMatrixing.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
namespace MES.Service.Dto.webApi;
public class ErpUnitMatrixing
{
    public string? Type { get; set; }
    public string? Id { get; set; }
    public string FNumber { get; set; }
    public decimal? FConvertMolecules { get; set; }
    public decimal? FConvertDenominator { get; set; }
    public string? FCurrentUnitId { get; set; }
    public string? FForbidStatus { get; set; }
    public string? remark1 { get; set; }
    public string? remark2 { get; set; }
    public string? remark3 { get; set; }
    public string? remark4 { get; set; }
    public string? remark5 { get; set; }
}
MES.Service/Modes/MesUnitMatrixing.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
using SqlSugar;
namespace MES.Service.Modes;
/// <summary>
///     ç‰©æ–™å•位换算信息
/// </summary>
[SugarTable("MES_UNIT_MATRIXING")]
public class MesUnitMatrixing
{
    /// <summary>
    ///     BASEINFO
    /// </summary>
    [SugarColumn(ColumnName = "ID", IsPrimaryKey = true)]
    public decimal Id { get; set; }
    /// <summary>
    ///     ç‰©æ–™ç¼–码
    /// </summary>
    [SugarColumn(ColumnName = "ITEM_NO")]
    public string? ItemNo { get; set; }
    /// <summary>
    ///     æ¢ç®—分子
    /// </summary>
    [SugarColumn(ColumnName = "CONVMOL")]
    public decimal? CONVMOL { get; set; }
    /// <summary>
    ///     æ¢ç®—分母
    /// </summary>
    [SugarColumn(ColumnName = "CONVDEN")]
    public decimal? CONVDEN { get; set; }
    /// <summary>
    ///     æ¢ç®—单位
    /// </summary>
    [SugarColumn(ColumnName = "ALT_UNITS")]
    public string? AltUnits { get; set; }
    /// <summary>
    ///     æœ‰æ•ˆç (Y有效, N无效)
    /// </summary>
    [SugarColumn(ColumnName = "VAL_STATES")]
    public string? ValStates { get; set; }
    /// <summary>
    ///     è‡ªå®šä¹‰å­—段1
    /// </summary>
    [SugarColumn(ColumnName = "remark1")]
    public string? remark1 { get; set; }
    /// <summary>
    ///     è‡ªå®šä¹‰å­—段2
    /// </summary>
    [SugarColumn(ColumnName = "remark2")]
    public string? remark2 { get; set; }
    /// <summary>
    ///     è‡ªå®šä¹‰å­—段3
    /// </summary>
    [SugarColumn(ColumnName = "remark3")]
    public string? remark3 { get; set; }
    /// <summary>
    ///     è‡ªå®šä¹‰å­—段4
    /// </summary>
    [SugarColumn(ColumnName = "remark4")]
    public string? remark4 { get; set; }
    /// <summary>
    ///     è‡ªå®šä¹‰å­—段5
    /// </summary>
    [SugarColumn(ColumnName = "remark5")]
    public string? remark5 { get; set; }
    [SugarColumn(IsIgnore = true)] public string? Type { get; set; }
}
MES.Service/service/BasicData/MesUnitMatrixingManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,247 @@
using AngleSharp.Dom;
using MES.Service.DB;
using MES.Service.Dto.webApi;
using MES.Service.Modes;
using SqlSugar;
namespace MES.Service.service.BasicData;
public class MesUnitMatrixingManager : Repository<MesUnitMatrixing>
{
    public bool Save(ErpUnitMatrixing unit)
    {
        var entity = GetMesUnitMatrixing(unit);
        return UseTransaction(db =>
        {
            switch (unit.Type)
            {
                case "0":
                    if (UpdateUnitStatus(db, entity.Id, "A"))
                        return 1;
                    break;
                case "1":
                    if (UpdateUnitStatus(db, entity.Id, "B"))
                        return 1;
                    break;
                case "3":
                    if (DeleteUnit(db, entity.Id))
                        return 1;
                    break;
                case "2":
                case "4":
                    if (InsertOrUpdate(db, entity))
                        return 1;
                    break;
                default:
                    throw new ArgumentNullException(
                        $"type没有{unit.Type}这个类型的参数");
            }
            throw new NotImplementedException("操作失败");
        }) > 0;
    }
    public bool SaveList(List<ErpUnitMatrixing> units)
    {
        var list = units.Select(GetMesUnitMatrixing).ToList();
        var groupBy = list.GroupBy(s => s.Type)
            .ToDictionary(g => g.Key, g => g.ToList());
        return UseTransaction(db =>
        {
            foreach (var unitGroup in groupBy)
                switch (unitGroup.Key)
                {
                    case "0":
                        if (!UpdateUnitStatusBatch(db, unitGroup.Value, "A"))
                            throw new NotImplementedException("启用失败");
                        break;
                    case "1":
                        if (!UpdateUnitStatusBatch(db, unitGroup.Value, "B"))
                            throw new NotImplementedException("禁用失败");
                        break;
                    case "3":
                        if (!DeleteUnitBatch(db, unitGroup.Value))
                            throw new NotImplementedException("删除失败");
                        break;
                    case "2":
                    case "4":
                        if (!InsertOrUpdateBatch(db, unitGroup.Value))
                            throw new NotImplementedException("同步失败");
                        break;
                    default:
                        throw new ArgumentNullException(
                            $"type没有{unitGroup.Key}这个类型的参数");
                }
            return 1;
        }) > 0;
    }
    private bool UpdateUnitStatus(SqlSugarScope db, decimal unitId,
        string status)
    {
        var result = db.Updateable<MesUnitMatrixing>()
            .SetColumns(s => s.ValStates == status)
            .Where(s => s.Id == unitId).ExecuteCommand();
        if (result > 0)
            return true;
        throw new NotImplementedException(status == "A" ? "启用失败" : "禁用失败");
    }
    private bool InsertUnit(SqlSugarScope db, MesUnitMatrixing entity)
    {
        var insert = db.Insertable(entity).ExecuteCommand();
        if (insert > 0)
            return true;
        throw new NotImplementedException("插入失败");
    }
    private bool DeleteUnit(SqlSugarScope db, decimal unitId)
    {
        var deleteById = db.Deleteable<MesUnitMatrixing>()
            .Where(s => s.Id == unitId).ExecuteCommand();
        if (deleteById > 0)
            return true;
        throw new NotImplementedException("删除失败");
    }
    private MesUnitMatrixing GetMesUnitMatrixing(ErpUnitMatrixing unit)
    {
        // æŸ¥æ‰¾æ˜¯å¦å·²å­˜åœ¨ç›¸åŒç¼–码的记录。
        var existingCustomer = Db.Queryable<MesUnitMatrixing>()
            .Where(s => s.ItemNo == unit.FNumber)
            .First();
        var entity = new MesUnitMatrixing
        {
            // å¦‚果存在,使用现有的ID,后续将删除后重新插入
            // å¦‚果不存在,设为0,InsertOrUpdate方法将生成新ID
            Id = existingCustomer?.Id ?? 0,
            //Id = Convert.ToDecimal(unit.Id),
            Type = unit.Type,
            ItemNo=unit.FNumber,
            CONVMOL=unit.FConvertMolecules,
            CONVDEN=unit.FConvertDenominator,
            AltUnits=unit.FCurrentUnitId,
            ValStates=unit.FForbidStatus
        };
        // ERP: 0=未禁用, 1=禁用
        // MES: A=未禁用, B=禁用
        if (string.IsNullOrEmpty(unit.FForbidStatus))
        {
            entity.ValStates = "A";
        }
        else
        {
            //我期望的值是A=否,B=是
            //实际给我的值是0或1,我希望为我转换从A和B的方式
            entity.ValStates = unit.FForbidStatus == "1" ? "B" : "A";
        }
        return entity;
    }
    /// <summary>
    /// ç”Ÿæˆæ–°çš„ID,确保不重复
    /// </summary>
    private decimal GenerateNewId()
    {
        // å¤„理空表的情况,从1开始
        var maxId = Db.Queryable<MesUnitMatrixing>().Max(x => (decimal?)x.Id) ?? 0;
        var newId = maxId + 1;
        // åŒé‡æ£€æŸ¥ï¼Œç¡®ä¿ç”Ÿæˆçš„ID不存在
        while (Db.Queryable<MesUnitMatrixing>().Where(x => x.Id == newId).Any())
        {
            newId++;
        }
        return newId;
    }
    private bool UpdateUnitStatusBatch(SqlSugarScope db, List<MesUnitMatrixing> unitList,
        string status)
    {
        var ids = unitList.Select(it => it.Id).ToArray();
        var result = db.Updateable<MesUnitMatrixing>()
            .SetColumns(s => s.ValStates == status)
            .Where(s => ids.Contains(s.Id)).ExecuteCommand();
        if (result > 0)
            return true;
        throw new NotImplementedException(status == "A" ? "启用失败" : "禁用失败");
    }
    private bool InsertUnitBatch(SqlSugarScope db, List<MesUnitMatrixing> unitList)
    {
        var insertRange = db.Insertable(unitList).ExecuteCommand();
        if (insertRange > 0)
            return true;
        throw new NotImplementedException("插入失败");
    }
    private bool DeleteUnitBatch(SqlSugarScope db, List<MesUnitMatrixing> unitList)
    {
        var ids = unitList.Select(it => it.Id).ToArray();
        var deleteByIds = db.Deleteable<MesUnitMatrixing>()
            .Where(s => ids.Contains(s.Id)).ExecuteCommand();
        return deleteByIds > 0;
    }
    /// <summary>
    /// åŒæ­¥ç‰©æ–™å•位信息new_0/4
    /// </summary>
    /// <param name="db"></param>
    /// <param name="entity"></param>
    /// <returns></returns>
    private bool InsertOrUpdate(SqlSugarScope db, MesUnitMatrixing entity)
    {
        if (entity.Id == 0)
        {
            // æ–°å¢žæƒ…况:生成新ID并插入
            var newId = GenerateNewId();
            entity.Id = newId;
            return db.Insertable(entity).ExecuteCommand() > 0;
        }
        else
        {
            // æ›´æ–°æƒ…况:删除后重新插入,保持原有ID
            var originalId = entity.Id;
            // å…ˆåˆ é™¤åŽŸè®°å½•ï¼ˆå¦‚æžœå­˜åœ¨ï¼‰
            db.Deleteable<MesUnitMatrixing>().Where(s => s.Id == originalId).ExecuteCommand();
            // é‡æ–°æ’入,保持原有ID
            entity.Id = originalId;
            return db.Insertable(entity).ExecuteCommand() > 0;
        }
    }
    /// <summary>
    /// åŒæ­¥ç‰©æ–™å•位信息old_0/4
    /// </summary>
    /// <param name="db"></param>
    /// <param name="entity"></param>
    /// <returns></returns>
    //private bool InsertOrUpdate(SqlSugarScope db, MesUnitMatrixing entity)
    //{
    //    db.Deleteable<MesUnitMatrixing>()
    //        .Where(s => s.Id == entity.Id).ExecuteCommand();
    //    var insert = db.Insertable(entity).ExecuteCommand();
    //    return insert > 0;
    //}
    private bool InsertOrUpdateBatch(SqlSugarScope db, List<MesUnitMatrixing> unitList)
    {
        return unitList.All(entity => InsertOrUpdate(db, entity));
    }
}
MESApplication/Controllers/BasicData/MesUnitMatrixingController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,256 @@
using System.Dynamic;
using MES.Service.Dto.webApi;
using MES.Service.Modes;
using MES.Service.service;
using MES.Service.service.BasicData;
using MES.Service.util;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
namespace MESApplication.Controllers.BasicData;
[ApiController]
[Route("api/[controller]")]
public class MesUnitMatrixingController : ControllerBase
{
    private readonly MessageCenterManager _manager = new();
    private readonly MesUnitMatrixingManager m = new();
    private readonly string METHOD = "POST";
    private readonly string TableName = "MES_UNIT_MATRIXING";
    private readonly string URL = "http://localhost:10054/api/MesUnitMatrixing/";
    [HttpPost("Save")]
    public ResponseResult Save(ErpUnitMatrixing unit)
    {
        var entity = new MessageCenter();
        entity.TableName = TableName;
        entity.Url = URL + "Save";
        entity.Method = METHOD;
        entity.Data = JsonConvert.SerializeObject(unit);
        entity.Status = 1;
        entity.CreateBy = "PL017";
        entity.Route = unit.FNumber;
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var save = m.Save(unit);
            resultInfos.tbBillList = save;
            entity.Result = 0;
            if (save) entity.Result = 1;
            entity.DealWith = 1;
            _manager.save(entity);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            entity.Result = 0;
            entity.DealWith = 0;
            entity.ResultData = ex.Message;
            _manager.save(entity);
            return ResponseResult.ResponseError(ex);
        }
    }
    [HttpPost("SaveList")]
    public ResponseResult SaveList(List<ErpUnitMatrixing> units)
    {
        var entity = new MessageCenter();
        entity.TableName = TableName;
        entity.Url = URL + "SaveList";
        entity.Method = METHOD;
        entity.Data = JsonConvert.SerializeObject(units);
        entity.Status = 1;
        entity.CreateBy = "PL017";
        try
        {
            dynamic resultInfos = new ExpandoObject();
            var save = m.SaveList(units);
            resultInfos.tbBillList = save;
            entity.Result = 0;
            if (save) entity.Result = 1;
            entity.DealWith = 1;
            _manager.save(entity);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            entity.Result = 0;
            entity.DealWith = 0;
            entity.ResultData = ex.Message;
            _manager.save(entity);
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     èŽ·å–æ‰€æœ‰
    /// </summary>
    /// <returns></returns>
    [HttpPost("GetList")]
    public ResponseResult GetList()
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.GetList();
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     æ ¹æ®ä¸»é”®èŽ·å–
    /// </summary>
    /// <returns></returns>
    [HttpPost("GetById")]
    public ResponseResult GetById(int id)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.GetById(id);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     æ ¹æ®ä¸»é”®åˆ é™¤
    /// </summary>
    /// <returns></returns>
    [HttpPost("DeleteByIds")]
    public ResponseResult DeleteByIds([FromBody] object[] ids)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.DeleteByIds(ids);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     æ·»åŠ 
    /// </summary>
    /// <returns></returns>
    [HttpPost("Insert")]
    public ResponseResult Add([FromBody] MesUnitMatrixing data)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.Insert(data);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     æ·»åŠ è¿”å›žè‡ªå¢ž
    /// </summary>
    /// <returns></returns>
    [HttpPost("InsertReturnIdentity")]
    public ResponseResult InsertReturnIdentity([FromBody] MesUnitMatrixing data)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.InsertReturnIdentity(data);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
    /// <summary>
    ///     ä¿®æ”¹
    /// </summary>
    /// <returns></returns>
    [HttpPost("Update")]
    public ResponseResult Update([FromBody] MesUnitMatrixing data)
    {
        try
        {
            dynamic resultInfos = new ExpandoObject();
            resultInfos.tbBillList = m.Update(data);
            return new ResponseResult
            {
                status = 0,
                message = "OK",
                data = resultInfos
            };
        }
        catch (Exception ex)
        {
            return ResponseResult.ResponseError(ex);
        }
    }
}