You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

344 lines
12 KiB

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.Models.BAS;
using AMESCoreStudio.CommonTools.Result;
using Microsoft.Extensions.Configuration;
using System.Net;
using System.Net.Mail;
namespace AMESCoreStudio.WebApi.Controllers.AMES
{
/// <summary>
/// 工單警報資料
/// </summary>
[Route("api/[controller]")]
[ApiController]
public class WipAlarmsController : ControllerBase
{
private readonly AMESContext _context;
private readonly IConfiguration _config;
/// <summary>
///
/// </summary>
/// <param name="context"></param>
public WipAlarmsController(AMESContext context)
{
_context = context;
}
/// <summary>
/// 獲取全部警報資料
/// </summary>
/// <returns></returns>
// GET: api/WipAlarms
[HttpGet]
public async Task<ActionResult<IEnumerable<WipAlarm>>> GetWipAlarm()
{
IQueryable<WipAlarm> q = _context.WipAlarms;
q = q.OrderBy(p => p.AlarmTypeID);
var wipAlarm = await q.ToListAsync();
return wipAlarm;
}
/// <summary>
/// 根據警報類型ID查詢警報資料
/// </summary>
/// <param name="id"></param>
/// <param name="page"></param>
/// <param name="limit"></param>
/// <returns></returns>
[HttpGet("Type/{id}")]
public async Task<ResultModel<WipAlarm>> GetWipAlarm(int id, int page = 0, int limit = 10)
{
ResultModel<WipAlarm> result = new ResultModel<WipAlarm>();
IQueryable<WipAlarm> q = _context.WipAlarms;
if (id > 0)
{
q = q.Where(p => p.AlarmTypeID.Equals(id));
}
result.DataTotal = q.ToList().Count;
if (page > 0)
{
q = q.OrderBy(p => p.AlarmDateTime).Skip((page - 1) * limit).Take(limit);
}
else
{
q = q.OrderBy(p => p.AlarmDateTime);
}
var wipAlarm = await q.ToListAsync();
result.Data = wipAlarm;
if (wipAlarm == null)
{
result.Success = false;
result.Msg = "查无资料";
return result;
}
result.Success = true;
result.Msg = "OK";
return result; ;
}
/// <summary>
/// 根據警報ID查詢警報資料
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
// GET: api/WipAlarms/5
[HttpGet("{id}")]
public async Task<ActionResult<IEnumerable<WipAlarm>>> GetWipAlarm(int id)
{
IQueryable<WipAlarm> q = _context.WipAlarms;
q = q.Where(p => p.WipAlarmID.Equals(id));
var wipAlarm = await q.ToListAsync();
if (wipAlarm == null)
{
return NotFound();
}
return wipAlarm;
}
/// <summary>
/// 修改警報資料
/// </summary>
/// <param name="id"></param>
/// <param name="wipAlarm"></param>
/// <returns></returns>
// PUT: api/WipAlarms/5
// To protect from overposting attacks, enable the specific properties you want to bind to, for
// more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
[HttpPut("{id}")]
public async Task<ResultModel<WipAlarm>> PutWipAlarm(int id, WipAlarm wipAlarm)
{
ResultModel<WipAlarm> result = new ResultModel<WipAlarm>();
if (id != wipAlarm.WipAlarmID)
{
result.Success = false;
result.Msg = "警報編號錯誤";
return result;
}
_context.Entry(wipAlarm).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!WipAlarmExists(id))
{
result.Success = false;
result.Msg = "警報編號不存在";
return result;
}
else
{
throw;
}
}
result.Success = true;
result.Msg = "OK";
return result;
}
/// <summary>
/// 新增警報資料
/// </summary>
/// <param name="wipAlarm"></param>
/// <returns></returns>
// POST: api/WipAlarms
// To protect from overposting attacks, enable the specific properties you want to bind to, for
// more details, see https://go.microsoft.com/fwlink/?linkid=2123754.
[HttpPost]
public async Task<ResultModel<WipAlarm>> PostWipAlarm(WipAlarm wipAlarm)
{
ResultModel<WipAlarm> result = new ResultModel<WipAlarm>();
Helper helper = new Helper(_context);
wipAlarm.WipAlarmID = helper.GetIDKey("WIP_ALARMID").Result;
_context.WipAlarms.Add(wipAlarm);
await _context.SaveChangesAsync();
result.Success = true;
result.Msg = "OK";
return result;
}
/// <summary>
/// 判斷同一不良代碼累計預警
/// </summary>
/// <param name="wipNO">工單號碼</param>
/// <param name="errorCode">不良代碼</param>
/// <returns></returns>
[Route("[action]")]
[HttpPost]
public async Task<ResultModel<string>> PostWipAlarm4ErrorCode(string wipNO, string errorCode)
{
ResultModel<string> result = new ResultModel<string>();
//判断预警
var q1 = from a in _context.NgComponents
join b in _context.NgInfos on a.NgID equals b.NgID
join c in _context.BarcodeInfoes on b.BarcodeID equals c.BarcodeID
join d in _context.WipInfos on c.WipID equals d.WipID
select new
{
a.NgNo,
d.WipNO
};
q1 = q1.Where(w => w.WipNO.Equals(wipNO));
q1 = q1.Where(w => w.NgNo.Equals(errorCode));
var data1 = await q1.ToListAsync();
if (data1.Count > 3)
{
try
{
//保存警报资料
string alarmDesc = string.Format("工單號碼{0}不良代碼{1}累積超過{2}次", wipNO, errorCode, data1.Count);
Helper helper = new Helper(_context);
WipAlarm wipAlarm = new WipAlarm();
wipAlarm.WipAlarmID = helper.GetIDKey("WIP_ALARMID").Result;
wipAlarm.AlarmTypeID = 1;
wipAlarm.WipNO = wipNO;
wipAlarm.AlarmParam = errorCode;
wipAlarm.AlarmValue = data1.Count.ToString();
wipAlarm.AlarmDesc = alarmDesc;
wipAlarm.AlarmDateTime = DateTime.Now;
_context.WipAlarms.Add(wipAlarm);
await _context.SaveChangesAsync();
//发送警报资料
string mailSubject = "警報持續郵件" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
string mailBody = "";
mailBody = mailBody + "警報工單:" + wipNO + "<br />";
mailBody = mailBody + "警報時間:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "<br />";
mailBody = mailBody + "警報原因:" + alarmDesc + "<br />";
string mailFrom = _config["MailForm"].ToString();
//string mailTo = _config["MailTo"].ToString();
string mailSmtpServer = _config["MailSmtpServer"].ToString();
int mailSmtpPort = int.Parse(_config["MailSmtpPort"].ToString());
string mailUser = _config["MailUser"].ToString();
string mailPassword = _config["MailUserPassword"].ToString();
MailMessage mesMail = new MailMessage();
mesMail.From = new MailAddress(mailFrom);
IQueryable<MailGroup> q3 = _context.MailGroups;
q3 = q3.Where(p => p.GroupNo.Equals("WIP_ALARM"));
var mail1 = await q3.ToListAsync();
if (mail1.Count > 0)
{
var q4 = from a in _context.MailGroups
join b in _context.MailGroupDetails on a.GroupID equals b.GroupID
join c in _context.UserInfoes on b.UserID equals c.UserID
select new
{
a.GroupID,
b.UserID,
c.UserEMail
};
q4 = q4.Where(w => w.GroupID.Equals(mail1[0].GroupID));
var mail2 = await q4.ToListAsync();
if (mail2.Count > 0)
{
for (int i = 0; i < mail2.Count; i++)
{
mesMail.To.Add(new MailAddress(mail2[i].UserEMail));
}
}
//mesMail.To.Add(new MailAddress(mailTo));
mesMail.Subject = mailSubject;
mesMail.SubjectEncoding = System.Text.Encoding.UTF8;
mesMail.Body = mailBody;
mesMail.IsBodyHtml = true;
mesMail.BodyEncoding = System.Text.Encoding.UTF8;
SmtpClient mailClient = new SmtpClient(mailSmtpServer, mailSmtpPort);
//mailClient.EnableSsl = true;
NetworkCredential nc = new NetworkCredential();
nc.UserName = mailUser;
nc.Password = mailPassword;
mailClient.Credentials = nc;
mailClient.Send(mesMail);
}
}
catch { }
}
result.Success = true;
result.Msg = "OK";
return result;
}
/// <summary>
///
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
// DELETE: api/WipAlarms/5
[HttpDelete("{id}")]
public async Task<ResultModel<WipAlarm>> DeleteWipAlarm(int id)
{
ResultModel<WipAlarm> result = new ResultModel<WipAlarm>();
var wipAlarm = await _context.WipAlarms.FindAsync(id);
if (wipAlarm == null)
{
result.Success = false;
result.Msg = "警報編號不存在";
return result;
}
_context.WipAlarms.Remove(wipAlarm);
await _context.SaveChangesAsync();
result.Success = true;
result.Msg = "OK";
return result;
}
private bool WipAlarmExists(int id)
{
return _context.WipAlarms.Any(e => e.WipAlarmID == id);
}
}
}