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.
260 lines
11 KiB
260 lines
11 KiB
using Aspose.Cells;
|
|
using EasyBL.WebApi.Message;
|
|
using Entity.Sugar;
|
|
using SqlSugar;
|
|
using SqlSugar.Base;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.IO;
|
|
using System.Linq;
|
|
|
|
namespace EasyBL.WEBAPP.EIP
|
|
{
|
|
public class WenZhongService : ServiceBase
|
|
{
|
|
#region 匯入特休假設定
|
|
|
|
/// <summary>
|
|
/// 匯入特休假設定
|
|
/// </summary>
|
|
/// <param name="i_crm"></param>
|
|
/// <returns></returns>
|
|
public ResponseMessage GetImport(RequestMessage i_crm)
|
|
{
|
|
ResponseMessage rm = null;
|
|
string sMsg = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
var sFileId = _fetchString(i_crm, @"FileId");
|
|
var sFileName = _fetchString(i_crm, @"FileName");
|
|
var sRoot = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"OutFiles\Temporary\");//Word模版路徑
|
|
var sfileName = sFileName.Split(new string[] { @"." }, StringSplitOptions.RemoveEmptyEntries);
|
|
var sSubFileName = sfileName.LastOrDefault(); //副檔名
|
|
sFileName = sRoot + sFileId + @"." + sSubFileName;
|
|
|
|
var book = new Workbook(sFileName);
|
|
//book.Open(sFileName);
|
|
var sheet = book.Worksheets[0];
|
|
var cells = sheet.Cells;
|
|
var tbFeeItems = cells.ExportDataTableAsString(1, 0, cells.MaxDataRow, cells.MaxDataColumn + 1, false);
|
|
|
|
var saWenZhong = new List<OTB_EIP_WenZhong>();
|
|
var saDelete = new List<string>();
|
|
if (tbFeeItems.Rows.Count > 0)
|
|
{
|
|
foreach (DataRow row in tbFeeItems.Rows)
|
|
{
|
|
try
|
|
{
|
|
var sWenZhongAcount = row[@"Column1"].ToString().Trim();
|
|
var sUserName = row[@"Column2"].ToString();
|
|
var sSeniority = row[@"Column6"].ToString();
|
|
var sEnableDate = row[@"Column7"].ToString();
|
|
var sExpirationDate = row[@"Column8"].ToString();
|
|
var sPaymentHours = row[@"Column17"].ToString();
|
|
var sUsedHours = row[@"Column18"].ToString();
|
|
|
|
var oMembers = db.Queryable<OTB_SYS_Members>()
|
|
.Single(it => it.OrgID == i_crm.ORIGID && it.WenZhongAcount == sWenZhongAcount);
|
|
if (oMembers != null)
|
|
{
|
|
var oWenZhong = new OTB_EIP_WenZhong
|
|
{
|
|
Guid = Guid.NewGuid().ToString(),
|
|
OrgID = i_crm.ORIGID,
|
|
UserID = oMembers.MemberID,
|
|
WenZhongAcount = sWenZhongAcount,
|
|
UserName = sUserName,
|
|
Seniority = Convert.ToDecimal(sSeniority),
|
|
EnableDate = Convert.ToDateTime(sEnableDate.Split(' ')[0]),
|
|
ExpirationDate = Convert.ToDateTime(sExpirationDate.Split(' ')[0]),
|
|
PaymentHours = Convert.ToDecimal(sPaymentHours),
|
|
UsedHours = Convert.ToDecimal(sUsedHours),
|
|
DelFlag = true
|
|
};
|
|
oWenZhong.RemainHours = oWenZhong.PaymentHours - oWenZhong.UsedHours;
|
|
var oLSet = db.Queryable<OTB_EIP_WenZhong>()
|
|
.Single(it => it.OrgID == i_crm.ORIGID && it.UserID == oMembers.MemberID && it.EnableDate == oWenZhong.EnableDate && it.ExpirationDate == oWenZhong.ExpirationDate);
|
|
if (oLSet == null)
|
|
{
|
|
saWenZhong.Add(oWenZhong);
|
|
//saDelete.Add(oLSet.Guid);
|
|
}
|
|
}
|
|
}
|
|
catch { }
|
|
}
|
|
if (saWenZhong.Count > 0)
|
|
{
|
|
var iRel = db.Insertable<OTB_EIP_WenZhong>(saWenZhong).ExecuteCommand();
|
|
}
|
|
if (saDelete.Count > 0)
|
|
{
|
|
var iRel = db.Deleteable<OTB_EIP_WenZhong>(saDelete).ExecuteCommand();
|
|
}
|
|
}
|
|
rm = new SuccessResponseMessage(null, i_crm);
|
|
} while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(WenZhongService), @"特休假設定", @"GetImport(匯入特休假設定)", @"", @"", @"");
|
|
}
|
|
finally
|
|
{
|
|
if (null != sMsg)
|
|
{
|
|
rm = new ErrorResponseMessage(sMsg, i_crm);
|
|
}
|
|
}
|
|
return rm;
|
|
}
|
|
|
|
#endregion 匯入特休假設定
|
|
|
|
#region 變更時數
|
|
|
|
/// <summary>
|
|
/// 變更時數
|
|
/// </summary>
|
|
/// <param name="i_crm"></param>
|
|
/// <returns></returns>
|
|
public ResponseMessage UpdLeaveHours(RequestMessage i_crm)
|
|
{
|
|
ResponseMessage rm = null;
|
|
string sMsg = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
var sId = _fetchString(i_crm, @"Guid");
|
|
var sUpdLeaveHours = _fetchString(i_crm, nameof(UpdLeaveHours));
|
|
var sMemo = _fetchString(i_crm, @"Memo");
|
|
var iUpdLeaveHours = Convert.ToInt32(sUpdLeaveHours);
|
|
var sdb = new SimpleClient<OTB_EIP_WenZhong>(db);
|
|
var oWenZhong = sdb.GetById(sId);
|
|
//增加特休是EnableDate年度為準。減少特休是ExpirationDate年度為準
|
|
var YearDate = oWenZhong.EnableDate.Value.Year.ToString();
|
|
if (iUpdLeaveHours < 0)
|
|
YearDate = oWenZhong.ExpirationDate.Value.Year.ToString();
|
|
var LeaveSet = db.Queryable<OTB_EIP_LeaveSet>()
|
|
.Single(it => it.OrgID == i_crm.ORIGID && it.UserID == oWenZhong.UserID && it.TYear == YearDate);
|
|
if (LeaveSet != null)
|
|
{
|
|
var oWenZhongUpd = new OTB_EIP_WenZhong
|
|
{
|
|
RemainHours = (oWenZhong.RemainHours ?? 0) + iUpdLeaveHours,
|
|
Memo = sMemo
|
|
};
|
|
|
|
#region 增加異動Log
|
|
|
|
var sChangeRecord = $"特休調整:{oWenZhong.EnableDate.Value.ToString("yyyy/MM/dd")}-{oWenZhong.ExpirationDate.Value.ToString("yyyy/MM/dd")}";
|
|
if (i_crm.LANG == @"zh")
|
|
{
|
|
sChangeRecord = ChineseStringUtility.ToSimplified(sChangeRecord);
|
|
}
|
|
|
|
var member = db.Queryable<OTB_SYS_Members>().Single(x => x.OrgID == i_crm.ORIGID && x.MemberID == i_crm.USERID);
|
|
Dictionary<string, string> dic = new Dictionary<string, string>
|
|
{
|
|
{ "ChangeRecord", sChangeRecord },
|
|
{ "ChangeUserName", member.MemberName },
|
|
{ "Memo", sMemo },
|
|
{ "ChangeHours", iUpdLeaveHours.ToString() }
|
|
};
|
|
var logInfo = new OTB_SYS_LogInfo
|
|
{
|
|
OrgID = i_crm.ORIGID,
|
|
SouseId = LeaveSet.Guid,
|
|
LogType = "WenZhongChange"
|
|
};
|
|
logInfo.LogInfo = JsonToString(dic);
|
|
_setEntityBase(logInfo, i_crm);
|
|
db.Insertable(logInfo).ExecuteCommand();
|
|
|
|
#endregion
|
|
var bRel = db.Updateable(oWenZhongUpd).UpdateColumns(it => new { it.Memo, it.RemainHours })
|
|
.Where(it => it.Guid == sId).ExecuteCommandHasChange();
|
|
rm = new SuccessResponseMessage(null, i_crm);
|
|
rm.DATA.Add(BLWording.REL, bRel);
|
|
}
|
|
else
|
|
{
|
|
sMsg = $"因為帳號{oWenZhong.UserID}的{YearDate}年度出勤設定尚未初始化,所以無法變動特休時數。" +
|
|
$"請先{YearDate}初始化設定再調整。";
|
|
}
|
|
|
|
} while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(WenZhongService), @"特休假設定", @"UpdLeaveHours(變更時數)", @"", @"", @"");
|
|
}
|
|
finally
|
|
{
|
|
if (null != sMsg)
|
|
{
|
|
rm = new ErrorResponseMessage(sMsg, i_crm);
|
|
}
|
|
}
|
|
return rm;
|
|
}
|
|
|
|
#endregion 變更時數
|
|
|
|
#region 變更時數
|
|
|
|
/// <summary>
|
|
/// 變更時數
|
|
/// </summary>
|
|
/// <param name="i_crm"></param>
|
|
/// <returns></returns>
|
|
public ResponseMessage GetDel(RequestMessage i_crm)
|
|
{
|
|
ResponseMessage rm = null;
|
|
string sMsg = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
var sId = _fetchString(i_crm, @"Guid");
|
|
var sdb = new SimpleClient<OTB_EIP_WenZhong>(db);
|
|
var oWenZhong = sdb.GetById(sId);
|
|
|
|
if (!(bool)oWenZhong.DelFlag)
|
|
{
|
|
sMsg = @"該筆資料已被系統修改,暫時不可刪除";
|
|
break;
|
|
}
|
|
var bRel = sdb.DeleteById(oWenZhong.Guid);
|
|
rm = new SuccessResponseMessage(null, i_crm);
|
|
rm.DATA.Add(BLWording.REL, bRel);
|
|
} while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = Util.GetLastExceptionMsg(ex);
|
|
LogAndSendEmail(sMsg + @"Param:" + JsonToString(i_crm), ex, i_crm.ORIGID, i_crm.USERID, nameof(WenZhongService), @"文中特休假設定", @"GetDel(刪除資料行)", @"", @"", @"");
|
|
}
|
|
finally
|
|
{
|
|
if (null != sMsg)
|
|
{
|
|
rm = new ErrorResponseMessage(sMsg, i_crm);
|
|
}
|
|
}
|
|
return rm;
|
|
}
|
|
|
|
#endregion 變更時數
|
|
}
|
|
}
|