using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using AMESCoreStudio.WebApi;
using AMESCoreStudio.WebApi.Models.AMES;
using AMESCoreStudio.WebApi.DTO.AMES;
using AMESCoreStudio.CommonTools.Result;
using AMESCoreStudio.WebApi.Enum;
using Dapper;
using AMESCoreStudio.WebApi.Extensions;
namespace AMESCoreStudio.WebApi.Controllers.AMES
{
///
/// 錫膏規格流水碼表
///
[Route("api/[controller]")]
[ApiController]
public class SolderPasteSerialController : ControllerBase
{
private readonly AMESContext _context;
public SolderPasteSerialController(AMESContext context)
{
_context = context;
}
[HttpGet]
public async Task>> GetSolderPasteSerials()
{
return await _context.SolderPasteSerials.ToListAsync();
}
[HttpGet("{id}")]
public async Task> GetSolderPasteSerial(string id)
{
var solderPasteSerial = await _context.SolderPasteSerials.FindAsync(id);
return solderPasteSerial;
}
///
/// 錫膏規格維護資料查詢
///
/// 錫膏代號
/// 規格
/// 廠商
///
[HttpGet("SolderPasteSerialQuery")]
public async Task> SolderPasteSerial(string serialNo, string description, string vendor)
{
var q = await _context.SolderPasteSerials.ToListAsync();
if (!string.IsNullOrWhiteSpace(serialNo))
{
q = q.Where(w => w.SerialNo.ToUpper() == serialNo.Trim().ToUpper()).ToList();
}
if (!string.IsNullOrWhiteSpace(description))
{
q = q.Where(w => w.Description.Contains(description.Trim())).ToList();
}
if (!string.IsNullOrWhiteSpace(vendor))
{
q = q.Where(w => w.Vendor.Contains(vendor.Trim())).ToList();
}
ResultModel result = new ResultModel();
// 紀錄筆數
result.DataTotal = q.Count();
result.Data = q;
return result;
}
///
/// 自動取得編號
///
/// 規格
///
[HttpGet("AutoSerialNo/{id}")]
public async Task> GetSolderPasteSerialByAutoSerialNo(string id)
{
var item = await _context.SolderPasteSerials
.Where(w => w.Description.ToUpper() == id.Trim().ToUpper()).FirstOrDefaultAsync();
if (item == null)
return "";
else
{
var SerialNo = string.Empty;
var Infos = _context.SolderPasteInfos.Where(w => w.SolderPasteNo.StartsWith(item.SerialNo)).Select(s => s.SolderPasteNo).Max();
if (!string.IsNullOrWhiteSpace(Infos))
{
SerialNo = $"{item.SerialNo}{(int.Parse(Infos.Substring(2, 5)) + 1).ToString().PadLeft(5, '0')}";
}
else
{
// 根據規格對應的代碼(2碼)+流水碼(5碼)
SerialNo = $"{item.SerialNo}{(item.SerialNumber + 1).ToString().PadLeft(5, '0')}";
}
return SerialNo;
}
}
///
/// 更新錫膏規格
///
///
///
[HttpPut]
public async Task> PutSolderPasteSerial(SolderPasteSerial solderPasteSerial)
{
ResultModel result = new ResultModel();
_context.Entry(solderPasteSerial).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException.Message;
}
return result;
}
///
/// 更新錫膏規格 By流水碼表
///
/// 規格
///
[HttpPut("AutoMatically/{id}")]
public async Task> PutSolderPasteSerialAutoMatically(string id)
{
ResultModel result = new ResultModel();
// 流水碼加1
string updateSql = @" UPDATE JHAMES.SOLDER_PASTE_SERIAL SET SERIAL_NUMBER = SERIAL_NUMBER + 1 ,
WHERE DESCRIPTION = :Description";
try
{
// 執行原生 SQL
_context.Database.ExecuteSqlRaw(updateSql);
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException.Message;
}
return result;
}
///
/// 更新錫膏規格-狀態
///
///
[HttpPut("UpdateStatus")]
public async Task> PutSolderPasteSerialStatus(SolderPasteSerial solderPasteSerial)
{
ResultModel result = new ResultModel();
try
{
var query = @" UPDATE JHAMES.SOLDER_PASTE_SERIAL SET
STATUS_NO = :StatusNo ,
UPDATE_DATE = sysdate ,
UPDATE_USERID = :UpdateUserID
WHERE SERIAL_NO = :SerialNo ";
await _context.Database.DapperExecuteAsync(query, solderPasteSerial);
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
///
/// 新增錫膏規格流水碼表
///
///
///
[HttpPost]
public async Task> PostSolderPasteSerial(SolderPasteSerial solderPasteSerial)
{
ResultModel result = new ResultModel();
_context.SolderPasteSerials.Add(solderPasteSerial);
try
{
await _context.SaveChangesAsync();
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException.Message;
}
return result;
}
// DELETE: api/SolderPasteSerial/5
[HttpDelete("{no}")]
public async Task> DeleteSolderPasteSerial(string no)
{
var solderPasteSerial = await _context.SolderPasteSerials.FindAsync(no);
if (solderPasteSerial == null)
{
return NotFound();
}
_context.SolderPasteSerials.Remove(solderPasteSerial);
await _context.SaveChangesAsync();
return solderPasteSerial;
}
private bool SolderPasteSerialExists(string id)
{
return _context.SolderPasteSerials.Any(e => e.SerialNo == id);
}
}
}