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; namespace AMESCoreStudio.WebApi.Controllers.AMES { /// <summary> /// 錫膏規格流水碼表 /// </summary> [Route("api/[controller]")] [ApiController] public class SolderPasteSerialController : ControllerBase { private readonly AMESContext _context; public SolderPasteSerialController(AMESContext context) { _context = context; } [HttpGet] public async Task<ActionResult<IEnumerable<SolderPasteSerial>>> GetSolderPasteSerials() { return await _context.SolderPasteSerials.ToListAsync(); } [HttpGet("{id}")] public async Task<ActionResult<SolderPasteSerial>> GetSolderPasteSerial(string id) { var solderPasteSerial = await _context.SolderPasteSerials.FindAsync(id); return solderPasteSerial; } /// <summary> /// 自動取得編號 /// </summary> /// <param name="id">規格</param> /// <returns></returns> [HttpGet("AutoSerialNo/{id}")] public async Task<ActionResult<string>> 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; } } /// <summary> /// 更新錫膏規格流水碼表 /// </summary> /// <param name="solderPasteSerial"></param> /// <returns></returns> [HttpPut] public async Task<ResultModel<SolderPasteSerial>> PutSolderPasteSerial(SolderPasteSerial solderPasteSerial) { ResultModel<SolderPasteSerial> result = new ResultModel<SolderPasteSerial>(); _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; } /// <summary> /// 更新錫膏規格流水碼表 /// </summary> /// <param name="id">規格</param> /// <returns></returns> [HttpPut("AutoMatically/{id}")] public async Task<ResultModel<SolderPasteSerial>> PutSolderPasteSerialAutoMatically(string id) { ResultModel<SolderPasteSerial> result = new ResultModel<SolderPasteSerial>(); // 流水碼加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; } /// <summary> /// 新增錫膏規格流水碼表 /// </summary> /// <param name="solderPasteSerial"></param> /// <returns></returns> [HttpPost] public async Task<ResultModel<SolderPasteSerial>> PostSolderPasteSerial(SolderPasteSerial solderPasteSerial) { ResultModel<SolderPasteSerial> result = new ResultModel<SolderPasteSerial>(); _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("{id}")] public async Task<ActionResult<SolderPasteSerial>> DeleteSolderPasteSerial(string id) { var solderPasteSerial = await _context.SolderPasteSerials.FindAsync(id); 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); } } }