yl
2024-09-14 27f533aa7eb5feeb8908a5bedca4ee29da31abd2
计时工资功能
已添加8个文件
已修改11个文件
1679 ■■■■■ 文件已修改
VueWebCoreApi/ApiGroup/OpenApiGroup.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Controllers/GeneralBasicDataController.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Controllers/HourlyWageController.cs 352 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Controllers/ReportManagerController.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Controllers/WorkOrderController.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/BLL/GeneralBasicDataBLL.cs 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/BLL/HourlyWageBLL.cs 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/BLL/ReportManagerBLL.cs 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/DAL/GeneralBasicDataDAL.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/DAL/HourlyWageDAL.cs 833 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Models/AttendanceSetting/Attendance.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Models/AttendanceSetting/AttendanceRecord.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Models/AttendanceSetting/AttendanceSave.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Models/AttendanceSetting/AttendanceSett.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Models/AttendanceSetting/DailyWageReport.cs 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Startup.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/Tools/DapperHelper.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/appsettings.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
VueWebCoreApi/ApiGroup/OpenApiGroup.cs
@@ -40,6 +40,8 @@
        å•据打印 = 15,
        [Description("看板管理")]
        çœ‹æ¿ç®¡ç† = 16,
        [Description("计时工资")]
        è®¡æ—¶å·¥èµ„ = 17,
        [Description("App个人中心")]
        App个人中心 = 20,
        [Description("App智能分析")]
VueWebCoreApi/Controllers/GeneralBasicDataController.cs
@@ -116,6 +116,21 @@
        }
        #endregion
        #region[所属组织查找人员基础资料]
        /// <summary>
        /// æ‰€å±žç»„织查找人员基础资料
        /// </summary>
        /// <param name="torgcode">组织(车间)编码</param>
        /// <returns></returns>
        [Route(template: "TorgPersonPermissions")]
        [HttpGet]
        public JsonResult TorgPersonPermissions(string torgcode)
        {
            mes = GeneralBasicDataBLL.TorgPersonPermissions(torgcode);
            return Json(mes);
        }
        #endregion
        #region[按钮基础资料]
        /// <summary>
        /// æŒ‰é’®åŸºç¡€èµ„æ–™
VueWebCoreApi/Controllers/HourlyWageController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,352 @@
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using VueWebCoreApi.DLL.BLL;
using VueWebCoreApi.Models;
using VueWebCoreApi.Models.AttendanceSetting;
using VueWebCoreApi.Tools;
namespace VueWebCoreApi.Controllers
{
    [ApiExplorerSettings(GroupName = "计时工资")]
    [ApiController]
    [Route("api/[controller]")]
    public class HourlyWageController : Controller
    {
        //定义全局信息返回变量
        ToMessage mes = new ToMessage();
        RedisCommon redis = new RedisCommon();
        #region[考勤设置查询]
        /// <summary>
        /// è€ƒå‹¤è®¾ç½®æŸ¥è¯¢
        /// </summary>
        /// <param name="wkshop_code">车间编码</param>
        /// <param name="creatuser">创建人员</param>
        /// <param name="creatdate">创建时间</param>
        /// <param name="page">页码</param>
        /// <param name="rows">每页显示条数</param>
        /// <param name="prop">排序字段</param>
        /// <param name="order">排序规则</param>
        /// <returns></returns>
        [Route(template: "AttendanceSettSearch")]
        [HttpGet]
        [ChannelActionFilter]
        public JsonResult AttendanceSettSearch(string wkshop_code = null,string creatuser = null, string creatdate = null, int page = 0, int rows = 0, string prop = null, string order = null)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            string paydatestartdate = "";  //创建开始时间
            string paydateenddate = "";    //创建结束时间
            if (creatdate != "" && creatdate != null)
            {
                paydatestartdate = creatdate.Split('~')[0].ToString();
                paydateenddate = creatdate.Split('~')[1].ToString();
            }
            int startNum = rows * (page - 1) + 1;  //起始记录rowNum
            int endNum = rows * page;   //结束记录 rowNum
            mes = HourlyWageBLL.AttendanceSettSearch(wkshop_code, creatuser, paydatestartdate, paydateenddate, startNum, endNum, prop, order);
            return Json(mes);
        }
        #endregion
        #region[考勤设置新增/编辑]
        /// <summary>
        /// è€ƒå‹¤è®¾ç½®æ–°å¢ž/编辑
        /// </summary>
        /// <param name="OperType">操作类型(Add/Update)</param>
        /// <param name="attendancesett">提交数据</param>
        /// <returns></returns>
        [Route(template: "AttendanceSettAddUpdate")]
        [HttpPost]
        [ChannelActionFilter]
        public JsonResult AttendanceSettAddUpdate(AttendanceSett attendancesett, string OperType)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            mes = HourlyWageBLL.AttendanceSettAddUpdate(attendancesett, OperType, us);
            return Json(mes);
        }
        #endregion
        #region[考勤设置删除]
        /// <summary>
        /// è€ƒå‹¤è®¾ç½®åˆ é™¤
        /// </summary>
        /// <param name="attendancesett">提交设置</param>
        /// <returns></returns>
        [Route(template: "AttendanceSettDelete")]
        [HttpPost]
        [ChannelActionFilter]
        public JsonResult AttendanceSettDelete(AttendanceSett attendancesett)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            mes = HourlyWageBLL.AttendanceSettDelete(attendancesett, us);
            return Json(mes);
        }
        #endregion
        #region[考勤打卡信息查询]
        /// <summary>
        /// è€ƒå‹¤æ‰“卡信息查询
        /// </summary>
        /// <param name="usercode">用户编码</param>
        /// <returns></returns>
        [Route(template: "AttendanceSearch")]
        [HttpGet]
        public JsonResult AttendanceSearch(string usercode = null)
        {
            mes = HourlyWageBLL.AttendanceSearch(usercode);
            return Json(mes);
        }
        #endregion
        #region[考勤打卡信息提交]
        /// <summary>
        /// è€ƒå‹¤æ‰“卡信息提交
        /// </summary>
        /// <param name="attendance">提交数据</param>
        /// <returns></returns>
        [Route(template: "AttendanceSave")]
        [HttpPost]
        public JsonResult AttendanceSave(Attendance attendance)
        {
            mes = HourlyWageBLL.AttendanceSave(attendance);
            return Json(mes);
        }
        #endregion
        #region[考勤记录查询]
        /// <summary>
        /// è€ƒå‹¤è®°å½•查询
        /// </summary>
        /// <param name="wkshop_code">车间编码</param>
        /// <param name="creatusercode">打卡人员编码</param>
        /// <param name="creatdate">打卡日期</param>
        /// <param name="status">核算状态(已核算/未核算)</param>
        /// <param name="page">页码</param>
        /// <param name="rows">每页显示条数</param>
        /// <param name="prop">排序字段</param>
        /// <param name="order">排序规则</param>
        /// <returns></returns>
        [Route(template: "AttendanceRecordSearch")]
        [HttpGet]
        [ChannelActionFilter]
        public JsonResult AttendanceRecordSearch(string wkshop_code = null, string creatusercode = null, string creatdate = null,string status=null, int page = 0, int rows = 0, string prop = null, string order = null)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            string paydatestartdate = "";  //打卡开始时间
            string paydateenddate = "";    //打卡结束时间
            if (creatdate != "" && creatdate != null)
            {
                paydatestartdate = creatdate.Split('~')[0].ToString();
                paydateenddate = creatdate.Split('~')[1].ToString();
            }
            int startNum = rows * (page - 1) + 1;  //起始记录rowNum
            int endNum = rows * page;   //结束记录 rowNum
            mes = HourlyWageBLL.AttendanceRecordSearch(wkshop_code, creatusercode, paydatestartdate, paydateenddate,status, startNum, endNum, prop, order);
            return Json(mes);
        }
        #endregion
        #region[考勤记录新增编辑]
        /// <summary>
        /// è€ƒå‹¤è®°å½•新增编辑
        /// </summary>
        /// <param name="OperType">操作类型</param>
        /// <param name="attendanceRecord">提交数据</param>
        /// <returns></returns>
        [Route(template: "AttendanceRecordAddUpdate")]
        [HttpPost]
        [ChannelActionFilter]
        public JsonResult AttendanceRecordAddUpdate(AttendanceRecord attendanceRecord, string OperType)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            mes = HourlyWageBLL.AttendanceRecordAddUpdate(attendanceRecord, OperType, us);
            return Json(mes);
        }
        #endregion
        #region[考勤记录删除]
        /// <summary>
        /// è€ƒå‹¤è®°å½•删除
        /// </summary>
        /// <param name="attendanceRecord">提交数据</param>
        /// <returns></returns>
        [Route(template: "AttendanceRecordDelete")]
        [HttpPost]
        [ChannelActionFilter]
        public JsonResult AttendanceRecordDelete(AttendanceRecord attendanceRecord)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            mes = HourlyWageBLL.AttendanceRecordDelete(attendanceRecord, us);
            return Json(mes);
        }
        #endregion
        #region[考勤记录核算提交]
        /// <summary>
        /// è€ƒå‹¤è®°å½•核算提交
        /// </summary>
        /// <param name="attendanceSave">提交数据</param>
        /// <returns></returns>
        [Route(template: "AttendanceRecordSave")]
        [HttpPost]
        [ChannelActionFilter]
        public JsonResult AttendanceRecordSave(AttendanceSave attendanceSave)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            mes = HourlyWageBLL.AttendanceRecordSave(attendanceSave,us);
            return Json(mes);
        }
        #endregion
        #region[日计时工资报表查询]
        /// <summary>
        /// æ—¥è®¡æ—¶å·¥èµ„报表查询
        /// </summary>
        /// <param name="wkshop_code">车间编码</param>
        /// <param name="creatusercode">打卡人员编码</param>
        /// <param name="creatdate">打卡日期</param>
        /// <param name="page">页码</param>
        /// <param name="rows">每页显示条数</param>
        /// <param name="prop">排序字段</param>
        /// <param name="order">排序规则</param>
        /// <returns></returns>
        [Route(template: "DailyWageReportSearch")]
        [HttpGet]
        [ChannelActionFilter]
        public JsonResult DailyWageReportSearch(string wkshop_code = null, string creatusercode = null, string creatdate = null, int page = 0, int rows = 0, string prop = null, string order = null)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            string paydatestartdate = "";  //创建开始时间
            string paydateenddate = "";    //创建结束时间
            if (creatdate != "" && creatdate != null)
            {
                paydatestartdate = creatdate.Split('~')[0].ToString();
                paydateenddate = creatdate.Split('~')[1].ToString();
            }
            int startNum = rows * (page - 1) + 1;  //起始记录rowNum
            int endNum = rows * page;   //结束记录 rowNum
            mes = HourlyWageBLL.DailyWageReportSearch(wkshop_code, creatusercode, paydatestartdate, paydateenddate, startNum, endNum, prop, order);
            return Json(mes);
        }
        #endregion
        #region[日计时工资修改扣除时长、扣除薪资]
        /// <summary>
        /// æ—¥è®¡æ—¶å·¥èµ„修改扣除时长、扣除薪资
        /// </summary>
        /// <param name="dailyWageReport">提交数据</param>
        /// <returns></returns>
        [Route(template: "DailyWageReportUpdate")]
        [HttpPost]
        [ChannelActionFilter]
        public JsonResult DailyWageReportUpdate(DailyWageReport dailyWageReport)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            mes = HourlyWageBLL.DailyWageReportUpdate(dailyWageReport, us);
            return Json(mes);
        }
        #endregion
        #region[日计时工资报表导出]
        /// <summary>
        /// æ—¥è®¡æ—¶å·¥èµ„报表导出
        /// </summary>
        /// <param name="wkshop_code">车间编码</param>
        /// <param name="creatusercode">打卡人员编码</param>
        /// <param name="creatdate">打卡日期</param>
        /// <returns></returns>
        [Route(template: "DailyWageReportExcelSearch")]
        [HttpGet]
        [ChannelActionFilter]
        public JsonResult DailyWageReportExcelSearch(string wkshop_code = null, string creatusercode = null, string creatdate = null)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            string paydatestartdate = "";  //创建开始时间
            string paydateenddate = "";    //创建结束时间
            if (creatdate != "" && creatdate != null)
            {
                paydatestartdate = creatdate.Split('~')[0].ToString();
                paydateenddate = creatdate.Split('~')[1].ToString();
            }
            mes = HourlyWageBLL.DailyWageReportExcelSearch(wkshop_code, creatusercode, paydatestartdate, paydateenddate);
            return Json(mes);
        }
        #endregion
        #region[月计时工资报表查询]
        /// <summary>
        /// æœˆè®¡æ—¶å·¥èµ„报表查询
        /// </summary>
        /// <param name="wkshop_code">车间编码</param>
        /// <param name="creatdate">查询月份</param>
        /// <param name="page">页码</param>
        /// <param name="rows">每页显示条数</param>
        /// <param name="prop">排序字段</param>
        /// <param name="order">排序规则</param>
        /// <returns></returns>
        [Route(template: "MonthlyWageReportSearch")]
        [HttpPost]
        [ChannelActionFilter]
        public JsonResult MonthlyWageReportSearch(string wkshop_code = null, string creatdate = null, int page = 0, int rows = 0, string prop = null, string order = null)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            string paydatestartdate = "";  //创建开始时间
            string paydateenddate = "";    //创建结束时间
            if (creatdate != "" && creatdate != null)
            {
                paydatestartdate = creatdate.Split('~')[0].ToString();
                paydateenddate = creatdate.Split('~')[1].ToString();
            }
            int startNum = rows * (page - 1) + 1;  //起始记录rowNum
            int endNum = rows * page;   //结束记录 rowNum
            mes = HourlyWageBLL.MonthlyWageReportSearch(wkshop_code, paydatestartdate, paydateenddate, startNum, endNum, prop, order);
            return Json(mes);
        }
        #endregion
        #region[月计时工资报表导出]
        /// <summary>
        /// æœˆè®¡æ—¶å·¥èµ„报表导出
        /// </summary>
        /// <param name="wkshop_code">车间编码</param>
        /// <param name="creatdate">打卡日期</param>
        /// <returns></returns>
        [Route(template: "MonthlyWageReportExcelSearch")]
        [HttpGet]
        [ChannelActionFilter]
        public JsonResult MonthlyWageReportExcelSearch(string wkshop_code = null,string creatdate = null)
        {
            var token = HttpContext.Request.Headers["Token"].ToString();
            User us = JwtTools.Denocode(token.ToString());
            string paydatestartdate = "";  //创建开始时间
            string paydateenddate = "";    //创建结束时间
            if (creatdate != "" && creatdate != null)
            {
                paydatestartdate = creatdate.Split('~')[0].ToString();
                paydateenddate = creatdate.Split('~')[1].ToString();
            }
            mes = HourlyWageBLL.MonthlyWageReportExcelSearch(wkshop_code, paydatestartdate, paydateenddate);
            return Json(mes);
        }
        #endregion
    }
}
VueWebCoreApi/Controllers/ReportManagerController.cs
@@ -25,6 +25,7 @@
        /// </summary>
        /// <param name="status">工单状态</param>
        /// <param name="wkshopcode">车间编号</param >
        /// <param name="socode">销售单号</param>
        /// <param name="wocode">工单编号</param>
        /// <param name="partcode">产品编码</param>
        /// <param name="partname">产品名称</param>
@@ -37,7 +38,7 @@
        /// <returns></returns>
        [Route(template: "ProductionScheduleReportSearch")]
        [HttpGet]
        public JsonResult ProductionScheduleReportSearch(int page, int rows, string prop, string order, string status = null, string wocode = null,string wkshopcode=null, string partcode = null, string partname = null, string partspec = null, string lm_date = null)
        public JsonResult ProductionScheduleReportSearch(int page, int rows, string prop, string order, string status = null,string socode=null, string wocode = null,string wkshopcode=null, string partcode = null, string partname = null, string partspec = null, string lm_date = null)
        {
            string opendate = "";     //开始时间
            string closedate = "";    //结束时间
@@ -48,7 +49,7 @@
            }
            int startNum = rows * (page - 1) + 1;  //起始记录rowNum
            int endNum = rows * page;   //结束记录 rowNum
            mes = ReportManagerBLL.ProductionScheduleReportSearch(status, wkshopcode, wocode,partcode, partname, partspec, opendate, closedate, startNum, endNum, prop, order);
            mes = ReportManagerBLL.ProductionScheduleReportSearch(status, wkshopcode, socode, wocode,partcode, partname, partspec, opendate, closedate, startNum, endNum, prop, order);
            return Json(mes);
        }
        #endregion
@@ -59,6 +60,7 @@
        /// </summary>
        /// <param name="status">工单状态</param>
        /// <param name="wkshopcode">车间编号</param >
        /// <param name="socode">销售单号</param>
        /// <param name="wocode">工单编号</param>
        /// <param name="partcode">产品编码</param>
        /// <param name="partname">产品名称</param>
@@ -67,7 +69,7 @@
        /// <returns></returns>
        [Route(template: "ProductionScheduleReportExcelSearch")]
        [HttpGet]
        public JsonResult ProductionScheduleReportExcelSearch(string status = null, string wkshopcode = null, string wocode = null,string partcode = null, string partname = null, string partspec = null, string lm_date = null)
        public JsonResult ProductionScheduleReportExcelSearch(string status = null, string wkshopcode = null, string socode = null, string wocode = null,string partcode = null, string partname = null, string partspec = null, string lm_date = null)
        {
            string opendate = "";     //开始时间
            string closedate = "";    //结束时间
@@ -76,7 +78,7 @@
                opendate = lm_date.Split('~')[0].ToString();
                closedate = lm_date.Split('~')[1].ToString();
            }
            mes = ReportManagerBLL.ProductionScheduleReportExcelSearch(status, wkshopcode,wocode, partcode, partname, partspec, opendate, closedate);
            mes = ReportManagerBLL.ProductionScheduleReportExcelSearch(status, wkshopcode, socode,wocode, partcode, partname, partspec, opendate, closedate);
            return Json(mes);
        }
        #endregion
@@ -88,6 +90,7 @@
        /// </summary>
        /// <param name="compute">计算方式(逐道/末道)</param>
        /// <param name="wkshopcode">车间编号</param >
        /// <param name="socode">销售单号</param>
        /// <param name="wocode">工单编号</param>
        /// <param name="partcode">产品编码</param>
        /// <param name="partname">产品名称</param>
@@ -103,7 +106,7 @@
        /// <returns></returns>
        [Route(template: "GroupSalaryReportSearch")]
        [HttpGet]
        public JsonResult GroupSalaryReportSearch(int page, int rows, string prop, string order, string compute,string wkshopcode=null, string wocode = null, string partcode = null, string partname = null, string partspec = null, string stepname = null, string groupcode = null, string username = null, string operdate = null)
        public JsonResult GroupSalaryReportSearch(int page, int rows, string prop, string order, string compute,string wkshopcode=null,string socode=null, string wocode = null, string partcode = null, string partname = null, string partspec = null, string stepname = null, string groupcode = null, string username = null, string operdate = null)
        {
            string operopendate = "";  //报工开始时间
            string operclosedate = "";    //报工结束时间
@@ -114,7 +117,7 @@
            }
            int startNum = rows * (page - 1) + 1;  //起始记录rowNum
            int endNum = rows * page;   //结束记录 rowNum
            mes = ReportManagerBLL.GroupSalaryReportSearch(compute, wkshopcode, wocode, partcode, partname, partspec, stepname, groupcode, username, operopendate, operclosedate, startNum, endNum, prop, order);
            mes = ReportManagerBLL.GroupSalaryReportSearch(compute, wkshopcode, socode, wocode, partcode, partname, partspec, stepname, groupcode, username, operopendate, operclosedate, startNum, endNum, prop, order);
            return Json(mes);
        }
        #endregion
@@ -139,6 +142,7 @@
        /// ç­ç»„工资报表记录查询
        /// </summary>
        /// <param name="compute">计算方式(逐道/末道)</param>
        /// <param name="socode">销售单号</param>
        /// <param name="wkshopcode">车间编号</param >
        /// <param name="wocode">工单编号</param>
        /// <param name="partcode">产品编码</param>
@@ -151,7 +155,7 @@
        /// <returns></returns>
        [Route(template: "GroupSalaryReportExcelSearch")]
        [HttpGet]
        public JsonResult GroupSalaryReportExcelSearch(string compute,string wkshopcode=null, string wocode = null, string partcode = null, string partname = null, string partspec = null, string stepname = null, string groupcode = null, string username = null, string operdate = null)
        public JsonResult GroupSalaryReportExcelSearch(string compute,string wkshopcode=null, string socode = null, string wocode = null, string partcode = null, string partname = null, string partspec = null, string stepname = null, string groupcode = null, string username = null, string operdate = null)
        {
            string operopendate = "";  //报工开始时间
            string operclosedate = "";    //报工结束时间
@@ -160,7 +164,7 @@
                operopendate = operdate.Split('~')[0].ToString();
                operclosedate = operdate.Split('~')[1].ToString();
            }
            mes = ReportManagerBLL.GroupSalaryReportExcelSearch(compute,wkshopcode, wocode, partcode, partname, partspec, stepname, groupcode, username, operopendate, operclosedate);
            mes = ReportManagerBLL.GroupSalaryReportExcelSearch(compute,wkshopcode, socode, wocode, partcode, partname, partspec, stepname, groupcode, username, operopendate, operclosedate);
            return Json(mes);
        }
        #endregion
@@ -172,6 +176,7 @@
        /// </summary>
        /// <param name="compute">计算方式(逐道/末道)</param>
        /// <param name="wkshopcode">车间编号</param >
        /// <param name="socode">销售单号</param>
        /// <param name="wocode">工单编号</param>
        /// <param name="partcode">产品编码</param>
        /// <param name="partname">产品名称</param>
@@ -187,7 +192,7 @@
        /// <returns></returns>
        [Route(template: "PeopleSalaryReportSearch")]
        [HttpGet]
        public JsonResult PeopleSalaryReportSearch(int page, int rows, string prop, string order, string compute,string wkshopcode=null, string wocode = null, string partcode = null, string partname = null, string partspec = null,string stepcode=null, string stepname = null, string reportname = null, string reportdate = null)
        public JsonResult PeopleSalaryReportSearch(int page, int rows, string prop, string order, string compute,string wkshopcode=null,string socode=null, string wocode = null, string partcode = null, string partname = null, string partspec = null,string stepcode=null, string stepname = null, string reportname = null, string reportdate = null)
        {
            string reportopendate = "";  //报工开始时间
            string reportclosedate = "";    //报工结束时间
@@ -198,7 +203,7 @@
            }
            int startNum = rows * (page - 1) + 1;  //起始记录rowNum
            int endNum = rows * page;   //结束记录 rowNum
            mes = ReportManagerBLL.PeopleSalaryReportSearch(compute, wkshopcode, wocode, partcode, partname, partspec, stepcode, stepname, reportname, reportopendate, reportclosedate, startNum, endNum, prop, order);
            mes = ReportManagerBLL.PeopleSalaryReportSearch(compute, wkshopcode, socode, wocode, partcode, partname, partspec, stepcode, stepname, reportname, reportopendate, reportclosedate, startNum, endNum, prop, order);
            return Json(mes);
        }
        #endregion
@@ -209,6 +214,7 @@
        /// </summary>
        /// <param name="compute">计算方式(逐道/末道)</param>
        /// <param name="wkshopcode">车间编号</param >
        /// <param name="socode">销售单号</param>
        /// <param name="wocode">工单编号</param>
        /// <param name="partcode">产品编码</param>
        /// <param name="partname">产品名称</param>
@@ -220,7 +226,7 @@
        /// <returns></returns>
        [Route(template: "PeopleSalaryReportExcelSearch")]
        [HttpGet]
        public JsonResult PeopleSalaryReportExcelSearch(string compute,string wkshopcode=null, string wocode = null, string partcode = null, string partname = null, string partspec = null,string stepcode=null, string stepname = null, string reportname = null, string reportdate = null)
        public JsonResult PeopleSalaryReportExcelSearch(string compute,string wkshopcode=null,string socode=null, string wocode = null, string partcode = null, string partname = null, string partspec = null,string stepcode=null, string stepname = null, string reportname = null, string reportdate = null)
        {
            string reportopendate = "";  //报工开始时间
            string reportclosedate = "";    //报工结束时间
@@ -229,7 +235,7 @@
                reportopendate = reportdate.Split('~')[0].ToString();
                reportclosedate = reportdate.Split('~')[1].ToString();
            }
            mes = ReportManagerBLL.PeopleSalaryReportExcelSearch(compute, wkshopcode, wocode, partcode, partname, partspec,stepcode,stepname, reportname, reportopendate, reportclosedate);
            mes = ReportManagerBLL.PeopleSalaryReportExcelSearch(compute, wkshopcode, socode, wocode, partcode, partname, partspec,stepcode,stepname, reportname, reportopendate, reportclosedate);
            return Json(mes);
        }
        #endregion
VueWebCoreApi/Controllers/WorkOrderController.cs
@@ -19,7 +19,7 @@
    [ApiExplorerSettings(GroupName = "工单管理")]
    [ApiController]
    [Route("api/[controller]")]
    //[ChannelActionFilter]
    [ChannelActionFilter]
    public class WorkOrderController : Controller
    {
        //定义全局信息返回变量
VueWebCoreApi/DLL/BLL/GeneralBasicDataBLL.cs
@@ -59,6 +59,13 @@
        }
        #endregion
        #region[所属组织查找人员基础资料]
        public static ToMessage TorgPersonPermissions(string torgcode)
        {
            return GeneralBasicDataDAL.TorgPersonPermissions(torgcode);
        }
        #endregion
        #region[按钮基础资料]
        public static ToMessage ButtonData()
        {
VueWebCoreApi/DLL/BLL/HourlyWageBLL.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,116 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using VueWebCoreApi.DLL.DAL;
using VueWebCoreApi.Models;
using VueWebCoreApi.Models.AttendanceSetting;
using VueWebCoreApi.Tools;
namespace VueWebCoreApi.DLL.BLL
{
    public class HourlyWageBLL
    {
        #region[考勤设置查询]
        public static ToMessage AttendanceSettSearch(string wkshop_code, string creatuser, string paydatestartdate, string paydateenddate, int startNum, int endNum, string prop, string order)
        {
            return HourlyWageDAL.AttendanceSettSearch(wkshop_code,creatuser,paydatestartdate,paydateenddate,startNum,endNum,prop,order);
        }
        #endregion
        #region[考勤设置新增/编辑]
        public static ToMessage AttendanceSettAddUpdate(AttendanceSett attendancesett,string OperType, User us)
        {
            return HourlyWageDAL.AttendanceSettAddUpdate(attendancesett, OperType, us);
        }
        #endregion
        #region[考勤设置删除]
        public static ToMessage AttendanceSettDelete(AttendanceSett attendancesett, User us)
        {
            return HourlyWageDAL.AttendanceSettDelete(attendancesett, us);
        }
        #endregion
        #region[考勤打卡信息查询]
        public static ToMessage AttendanceSearch(string usercode)
        {
            return HourlyWageDAL.AttendanceSearch(usercode);
        }
        #endregion
        #region[考勤打卡信息提交]
        public static ToMessage AttendanceSave(Attendance attendance)
        {
            return HourlyWageDAL.AttendanceSave(attendance);
        }
        #endregion
        #region[考勤记录查询]
        public static ToMessage AttendanceRecordSearch(string wkshop_code, string creatusercode, string paydatestartdate, string paydateenddate,string status, int startNum, int endNum, string prop, string order)
        {
            return HourlyWageDAL.AttendanceRecordSearch(wkshop_code, creatusercode, paydatestartdate, paydateenddate,status, startNum, endNum, prop, order);
        }
        #endregion
        #region[考勤记录新增编辑]
        public static ToMessage AttendanceRecordAddUpdate(AttendanceRecord attendanceRecord, string operType, User us)
        {
            return HourlyWageDAL.AttendanceRecordAddUpdate(attendanceRecord, operType,us);
        }
        #endregion
        #region[考勤记录删除]
        public static ToMessage AttendanceRecordDelete(AttendanceRecord attendanceRecord, User us)
        {
            return HourlyWageDAL.AttendanceRecordDelete(attendanceRecord, us);
        }
        #endregion
        #region[考勤记录核算提交]
        public static ToMessage AttendanceRecordSave(AttendanceSave attendanceSave, User us)
        {
            return HourlyWageDAL.AttendanceRecordSave(attendanceSave,us);
        }
        #endregion
        #region[日计时工资报表查询]
        public static ToMessage DailyWageReportSearch(string wkshop_code, string creatusercode, string paydatestartdate, string paydateenddate, int startNum, int endNum, string prop, string order)
        {
            return HourlyWageDAL.DailyWageReportSearch(wkshop_code, creatusercode, paydatestartdate, paydateenddate, startNum, endNum, prop, order);
        }
        #endregion
        #region[日计时工资修改扣除时长、扣除薪资]
        public static ToMessage DailyWageReportUpdate(DailyWageReport dailyWageReport, User us)
        {
            return HourlyWageDAL.DailyWageReportUpdate(dailyWageReport,us);
        }
        #endregion
        #region[日计时工资报表导出]
        public static ToMessage DailyWageReportExcelSearch(string wkshop_code, string creatusercode, string paydatestartdate, string paydateenddate)
        {
            return HourlyWageDAL.DailyWageReportExcelSearch(wkshop_code, creatusercode, paydatestartdate, paydateenddate);
        }
        #endregion
        #region[月计时工资报表查询]
        public static ToMessage MonthlyWageReportSearch(string wkshop_code,string paydatestartdate, string paydateenddate, int startNum, int endNum, string prop, string order)
        {
            return HourlyWageDAL.MonthlyWageReportSearch(wkshop_code, paydatestartdate, paydateenddate, startNum, endNum, prop, order);
        }
        #endregion
        #region[月计时工资报表导出]
        public static ToMessage MonthlyWageReportExcelSearch(string wkshop_code, string paydatestartdate, string paydateenddate)
        {
            return HourlyWageDAL.MonthlyWageReportExcelSearch(wkshop_code,paydatestartdate, paydateenddate);
        }
        #endregion
    }
}
VueWebCoreApi/DLL/BLL/ReportManagerBLL.cs
@@ -10,24 +10,24 @@
    public class ReportManagerBLL
    {
        #region[生产进度报表]
        public static ToMessage ProductionScheduleReportSearch(string status, string wkshopcode,string wocode,string partcode, string partname, string partspec, string opendate, string closedate, int startNum, int endNum, string prop, string order)
        public static ToMessage ProductionScheduleReportSearch(string status, string wkshopcode,string socode, string wocode,string partcode, string partname, string partspec, string opendate, string closedate, int startNum, int endNum, string prop, string order)
        {
            return ReportManagerDAL.ProductionScheduleReportSearch(wkshopcode, status, wocode,partcode, partname, partspec, opendate, closedate, startNum, endNum, prop, order);
            return ReportManagerDAL.ProductionScheduleReportSearch(wkshopcode, status, socode, wocode,partcode, partname, partspec, opendate, closedate, startNum, endNum, prop, order);
        }
        #endregion
        #region[生产进度报表导出]
        public static ToMessage ProductionScheduleReportExcelSearch(string status, string wkshopcode, string wocode, string partcode, string partname, string partspec, string opendate, string closedate)
        public static ToMessage ProductionScheduleReportExcelSearch(string status, string wkshopcode,string socode, string wocode, string partcode, string partname, string partspec, string opendate, string closedate)
        {
            return ReportManagerDAL.ProductionScheduleReportExcelSearch(wkshopcode, status, wocode, partcode, partname, partspec, opendate, closedate);
            return ReportManagerDAL.ProductionScheduleReportExcelSearch(wkshopcode, status, socode, wocode, partcode, partname, partspec, opendate, closedate);
        }
        #endregion
        #region[班组工资报表记录查询]
        public static ToMessage GroupSalaryReportSearch(string compute,string wkshopcode, string wocode, string partcode, string partname, string partspec, string stepname, string groupcode, string username, string operopendate, string operclosedate, int startNum, int endNum, string prop, string order)
        public static ToMessage GroupSalaryReportSearch(string compute,string wkshopcode,string socode, string wocode, string partcode, string partname, string partspec, string stepname, string groupcode, string username, string operopendate, string operclosedate, int startNum, int endNum, string prop, string order)
        {
            return ReportManagerDAL.GroupSalaryReportSearch(compute, wkshopcode, wocode, partcode, partname, partspec, stepname, groupcode, username, operopendate, operclosedate, startNum, endNum, prop, order);
            return ReportManagerDAL.GroupSalaryReportSearch(compute, wkshopcode, socode, wocode, partcode, partname, partspec, stepname, groupcode, username, operopendate, operclosedate, startNum, endNum, prop, order);
        }
        #endregion
@@ -39,24 +39,24 @@
        #endregion
        #region[班组工资报表记录导出]
        public static ToMessage GroupSalaryReportExcelSearch(string compute,string wkshopcode, string wocode, string partcode, string partname, string partspec, string stepname, string groupcode, string username, string operopendate, string operclosedate)
        public static ToMessage GroupSalaryReportExcelSearch(string compute,string wkshopcode,string socode, string wocode, string partcode, string partname, string partspec, string stepname, string groupcode, string username, string operopendate, string operclosedate)
        {
           return ReportManagerDAL.GroupSalaryReportExcelSearch(compute, wkshopcode, wocode, partcode, partname, partspec, stepname, groupcode, username, operopendate, operclosedate);
           return ReportManagerDAL.GroupSalaryReportExcelSearch(compute, wkshopcode, socode, wocode, partcode, partname, partspec, stepname, groupcode, username, operopendate, operclosedate);
        }
        #endregion
        #region[人员工资明细报表]
        public static ToMessage PeopleSalaryReportSearch(string compute,string wkshopcode, string wocode, string partcode, string partname, string partspec,string stepcode, string stepname, string reportname, string reportopendate, string reportclosedate, int startNum, int endNum, string prop, string order)
        public static ToMessage PeopleSalaryReportSearch(string compute,string wkshopcode,string socode, string wocode, string partcode, string partname, string partspec,string stepcode, string stepname, string reportname, string reportopendate, string reportclosedate, int startNum, int endNum, string prop, string order)
        {
            return ReportManagerDAL.PeopleSalaryReportSearch(compute, wkshopcode, wocode, partcode, partname, partspec, stepcode, stepname, reportname, reportopendate, reportclosedate, startNum, endNum, prop, order);
            return ReportManagerDAL.PeopleSalaryReportSearch(compute, wkshopcode, socode, wocode, partcode, partname, partspec, stepcode, stepname, reportname, reportopendate, reportclosedate, startNum, endNum, prop, order);
        }
        #endregion
        #region[人员工资明细报表导出]
        public static ToMessage PeopleSalaryReportExcelSearch(string compute,string wkshopcode, string wocode, string partcode, string partname, string partspec, string stepcode, string stepname, string reportname, string reportopendate, string reportclosedate)
        public static ToMessage PeopleSalaryReportExcelSearch(string compute,string wkshopcode,string socode, string wocode, string partcode, string partname, string partspec, string stepcode, string stepname, string reportname, string reportopendate, string reportclosedate)
        {
            return ReportManagerDAL.PeopleSalaryReportSearch(compute, wkshopcode, wocode, partcode, partname, partspec, stepcode, stepname, reportname, reportopendate, reportclosedate);
            return ReportManagerDAL.PeopleSalaryReportSearch(compute, wkshopcode, socode, wocode, partcode, partname, partspec, stepcode, stepname, reportname, reportopendate, reportclosedate);
        }
        #endregion
VueWebCoreApi/DLL/DAL/GeneralBasicDataDAL.cs
@@ -201,6 +201,31 @@
        }
        #endregion
        #region[所属组织查找人员基础资料]
        public static ToMessage TorgPersonPermissions(string torgcode)
        {
            var sql = "";
            var dynamicParams = new DynamicParameters();
            try
            {
                sql = @"select usercode,username from TUser where  storg_code=@torgcode";
                dynamicParams.Add("@torgcode", torgcode);
                var data = DapperHelper.selectdata(sql, dynamicParams);
                mes.code = "200";
                mes.message = "查询成功!";
                mes.data = data;
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[按钮基础资料]
        public static ToMessage ButtonData()
        {
VueWebCoreApi/DLL/DAL/HourlyWageDAL.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,833 @@
using Dapper;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Threading.Tasks;
using VueWebCoreApi.Models;
using VueWebCoreApi.Models.AttendanceSetting;
using VueWebCoreApi.Tools;
namespace VueWebCoreApi.DLL.DAL
{
    public class HourlyWageDAL
    {
        public static DataTable dt;    //定义全局变量dt
        public static bool res;       //定义全局变量dt
        public static ToMessage mes = new ToMessage(); //定义全局返回信息对象
        public static string strProcName = ""; //定义全局sql变量
        public static List<SqlParameter> listStr = new List<SqlParameter>(); //定义全局参数集合
        public static SqlParameter[] parameters; //定义全局SqlParameter参数数组
        #region[考勤设置查询]
        public static ToMessage AttendanceSettSearch(string wkshop_code, string creatuser, string paydatestartdate, string paydateenddate, int startNum, int endNum, string prop, string order)
        {
            var dynamicParams = new DynamicParameters();
            string search = "";
            try
            {
                if (wkshop_code != "" && wkshop_code != null)
                {
                    search += " and S.wkshop_code=@wkshop_code ";
                    dynamicParams.Add("@wkshop_code", wkshop_code);
                }
                if (creatuser != "" && creatuser != null)
                {
                    search += " and S.lm_user=@creatuser ";
                    dynamicParams.Add("@creatuser", creatuser);
                }
                if (paydatestartdate != "" && paydatestartdate != null)
                {
                    search += " and S.lm_date between @paydatestartdate and @paydateenddate ";
                    dynamicParams.Add("@paydatestartdate", paydatestartdate + " 00:00:00");
                    dynamicParams.Add("@paydateenddate", paydateenddate + " 23:59:59");
                }
                // --------------查询指定数据--------------
                var total = 0; //总条数
                var sql = @"select S.wkshop_code,T.torg_name as wkshop_name,S.workhouse,S.uphouse,S.closehouse,S.downhouse,S.workprice,overprice,U.username,S.lm_date
                            from AttendanceSettings S
                            left join  TOrganization T on S.wkshop_code=T.torg_code
                            left join  TUser U on S.lm_user=U.usercode where 1=1 " + search;
                var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
                mes.code = "200";
                mes.message = "查询成功!";
                mes.count = total;
                mes.data = data.ToList();
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[考勤设置新增/编辑]
        public static ToMessage AttendanceSettAddUpdate(AttendanceSett attendancesett, string OperType, User us)
        {
            string sql = "";
            var dynamicParams = new DynamicParameters();
            List<object> list = new List<object>();
            try
            {
                if (OperType == "Add")
                {
                    //写入计时工资设置表
                    sql = @"insert into AttendanceSettings(wkshop_code,workhouse,closehouse,workprice,overprice,uphouse,downhouse,lm_user,lm_date)
                                values(@wkshop_code,@workhouse,@closehouse,@workprice,@overprice,@uphouse,@downhouse,@lm_user,@lm_date)";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            wkshop_code = attendancesett.wkshop_code,
                            workhouse = attendancesett.workhouse,
                            closehouse = attendancesett.closehouse,
                            workprice = attendancesett.workprice,
                            overprice = attendancesett.overprice,
                            uphouse = attendancesett.uphouse,
                            downhouse = attendancesett.downhouse,
                            lm_user = us.usercode,
                            lm_date = DateTime.Now.ToString()
                        }
                    });
                    bool aa = DapperHelper.DoTransaction(list);
                    if (aa)
                    {
                        //写入操作记录表
                        LogHelper.DbOperateLog(us.usercode, "新增", "新增了考勤设置车间为:" + attendancesett.wkshop_code + ",上班时间为:" + attendancesett.workhouse + ",下班时间为:" + attendancesett.closehouse + "的标准", us.usertype);
                        mes.code = "200";
                        mes.count = 0;
                        mes.message = "考勤设置新建成功!";
                        mes.data = null;
                    }
                    else
                    {
                        mes.code = "300";
                        mes.count = 0;
                        mes.message = "考勤设置新建失败!";
                        mes.data = null;
                    }
                }
                if (OperType == "Update")
                {
                    //修改工单表
                    sql = @"update AttendanceSettings set workhouse=@workhouse,closehouse=@closehouse,workprice=@workprice,overprice=@overprice,uphouse=@uphouse,downhouse=@downhouse,
                            lm_user=@lm_user,lm_date=@lm_date where wkshop_code=@wkshop_code";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            wkshop_code = attendancesett.wkshop_code,
                            workhouse = attendancesett.workhouse,
                            closehouse = attendancesett.closehouse,
                            workprice = attendancesett.workprice,
                            overprice = attendancesett.overprice,
                            uphouse = attendancesett.uphouse,
                            downhouse = attendancesett.downhouse,
                            lm_user = us.usercode,
                            lm_date = DateTime.Now.ToString()
                        }
                    });
                    bool aa = DapperHelper.DoTransaction(list);
                    if (aa)
                    {
                        //写入操作记录表
                        LogHelper.DbOperateLog(us.usercode, "修改", "修改了考勤设置车间为:" + attendancesett.wkshop_code + ",上班时间为:" + attendancesett.workhouse + ",下班时间为:" + attendancesett.closehouse + "的标准", us.usertype);
                        mes.code = "200";
                        mes.count = 0;
                        mes.message = "考勤设置修改成功!";
                        mes.data = null;
                    }
                    else
                    {
                        mes.code = "300";
                        mes.count = 0;
                        mes.message = "考勤设置修改失败!";
                        mes.data = null;
                    }
                }
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[考勤设置删除]
        public static ToMessage AttendanceSettDelete(AttendanceSett attendancesett, User us)
        {
            var sql = "";
            List<object> list = new List<object>();
            var dynamicParams = new DynamicParameters();
            try
            {
                //校验当前考勤设置是否被引用
                sql = @"select *  from Attendance where wkshop_code=@wkshop_code";
                dynamicParams.Add("@wkshop_code", attendancesett.wkshop_code);
                var data = DapperHelper.selectdata(sql, dynamicParams);
                if (data.Rows.Count > 0)
                {
                    mes.code = "300";
                    mes.count = 0;
                    mes.message = "当前考勤设置已经生成考勤记录,不允许删除!";
                    mes.data = null;
                    return mes;
                }
                else
                {
                    //计时工资设置表
                    sql = @"delete  AttendanceSettings  where wkshop_code=@wkshop_code";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            wkshop_code = attendancesett.wkshop_code
                        }
                    });
                }
                bool aa = DapperHelper.DoTransaction(list);
                LogHelper.WriteLogData(aa.ToString());
                if (aa)
                {
                    //写入操作记录表
                    LogHelper.DbOperateLog(us.usercode, "删除", "删除了考勤设置车间为:" + attendancesett.wkshop_code + ",上班时间为:" + attendancesett.workhouse + ",下班时间为:" + attendancesett.closehouse + "的标准", us.usertype);
                    mes.code = "200";
                    mes.count = 0;
                    mes.message = "考勤设置删除成功!";
                    mes.data = null;
                }
                else
                {
                    mes.code = "300";
                    mes.count = 0;
                    mes.message = "考勤设置删除失败!";
                    mes.data = null;
                }
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[考勤打卡信息查询]
        public static ToMessage AttendanceSearch(string usercode)
        {
            var dynamicParams = new DynamicParameters();
            string search = "";
            Dictionary<object, object> dir = new Dictionary<object, object>();
            try
            {
                if (usercode == "" || usercode == null)
                {
                    mes.code = "300";
                    mes.count = 0;
                    mes.message = "工号不能为空!";
                    mes.data = null;
                    return mes;
                }
                else
                {
                    search += " and A.usercode=@usercode ";
                    dynamicParams.Add("@usercode", usercode);
                }
                // --------------查询指定数据--------------
                var sql = @"select A.wkshop_code,T.torg_name as wkshop_name,U.username,A.createdate,S.workprice
                          from Attendance A
                          left join  AttendanceSettings S on A.wkshop_code=S.wkshop_code
                          left join  TOrganization T on A.wkshop_code=T.torg_code
                          left join  TUser U on A.usercode=U.usercode
                          where convert(date, A.createdate) = convert(date, getdate()) " + search;
                var data = DapperHelper.selectdata(sql, dynamicParams);
                //获取用户信息
                var sql0 = @"select U.usercode,U.username,U.storg_code,T.torg_name,
                             STUFF((SELECT ',' + P.postname
                              FROM TPost P
                              WHERE CHARINDEX(',' + P.postcode + ',', ',' + U.post_code + ',') > 0
                              FOR XML PATH('')), 1, 1, '') AS postname
                             from TUser U
                             left join  TOrganization T on U.storg_code=T.torg_code
                             where U.usercode=@usercode";
                dynamicParams.Add("@usercode", usercode);
                var data0 = DapperHelper.selectdata(sql0, dynamicParams);
                dir.Add("userdate", data0);
                dir.Add("checkcrd", data);
                mes.code = "200";
                mes.message = "查询成功!";
                mes.count = dir.Count;
                mes.data = dir;
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[考勤打卡信息提交]
        public static ToMessage AttendanceSave(Attendance attendance)
        {
            string sql = "";
            List<object> list = new List<object>();
            try
            {
                //写入计时工资考勤打卡表
                sql = @"insert into Attendance(wkshop_code,usercode,createdate) values(@wkshop_code,@usercode,@createdate)";
                list.Add(new
                {
                    str = sql,
                    parm = new
                    {
                        wkshop_code = attendance.wkshop_code,
                        usercode = attendance.user_code,
                        createdate = DateTime.Now.ToString()
                    }
                });
                bool aa = DapperHelper.DoTransaction(list);
                if (aa)
                {
                    //写入操作记录表
                    LogHelper.DbOperateLog(attendance.user_code, "打卡", "用户:" + attendance.user_code + "打卡,打卡时间为:" + DateTime.Now.ToString() + "", "PC");
                    mes.code = "200";
                    mes.count = 0;
                    mes.message = "打卡成功!";
                    mes.data = null;
                }
                else
                {
                    mes.code = "300";
                    mes.count = 0;
                    mes.message = "打卡失败!";
                    mes.data = null;
                }
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[考勤记录查询]
        public static ToMessage AttendanceRecordSearch(string wkshop_code, string creatusercode, string paydatestartdate, string paydateenddate,string status, int startNum, int endNum, string prop, string order)
        {
            var dynamicParams = new DynamicParameters();
            string search = "";
            try
            {
                if (wkshop_code != "" && wkshop_code != null)
                {
                    search += " and S.wkshop_code=@wkshop_code ";
                    dynamicParams.Add("@wkshop_code", wkshop_code);
                }
                if (creatusercode != "" && creatusercode != null)
                {
                    search += " and A.usercode=@creatusercode";
                    dynamicParams.Add("@creatusercode", creatusercode);
                }
                if (paydatestartdate != "" && paydatestartdate != null)
                {
                    search += " and A.createdate between @paydatestartdate and @paydateenddate ";
                    dynamicParams.Add("@paydatestartdate", paydatestartdate + " 00:00:00");
                    dynamicParams.Add("@paydateenddate", paydateenddate + " 23:59:59");
                }
                if (status != "" && status != null)
                {
                    search += " and A.status=@status ";
                    dynamicParams.Add("@status", status);
                }
                // --------------查询指定数据--------------
                var total = 0; //总条数
                var sql = @"select A.id,S.wkshop_code,T.torg_name as wkshop_name,A.usercode,U.username,A.createdate,S.workprice,A.status
                            from Attendance A
                            left join  AttendanceSettings S on A.wkshop_code=S.wkshop_code
                            left join  TOrganization T on A.wkshop_code=T.torg_code
                            left join  TUser U on A.usercode=U.usercode where 1=1 " + search;
                var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
                mes.code = "200";
                mes.message = "查询成功!";
                mes.count = total;
                mes.data = data.ToList();
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[考勤记录新增编辑]
        public static ToMessage AttendanceRecordAddUpdate(AttendanceRecord attendanceRecord, string operType, User us)
        {
            string sql = "";
            var dynamicParams = new DynamicParameters();
            List<object> list = new List<object>();
            try
            {
                if (operType == "Add")
                {
                    //写入计时工资考勤打卡表
                    sql = @"insert into Attendance(wkshop_code,usercode,createdate,status)
                                values(@wkshop_code,@usercode,@createdate,@status)";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            wkshop_code = attendanceRecord.wkshop_code,
                            usercode = attendanceRecord.creatusercode,
                            createdate = attendanceRecord.creatdate,
                            status = attendanceRecord.status
                        }
                    });
                    bool aa = DapperHelper.DoTransaction(list);
                    if (aa)
                    {
                        //写入操作记录表
                        LogHelper.DbOperateLog(us.usercode, "新增", "新增了打卡记录车间为:" + attendanceRecord.wkshop_code + ",人员为:" + attendanceRecord.creatusercode + ",考勤时间为:" + attendanceRecord.creatdate + "", us.usertype);
                        mes.code = "200";
                        mes.count = 0;
                        mes.message = "新增打卡记录成功!";
                        mes.data = null;
                    }
                    else
                    {
                        mes.code = "300";
                        mes.count = 0;
                        mes.message = "新增打卡记录失败!";
                        mes.data = null;
                    }
                }
                if (operType == "Update")
                {
                    //修改计时工资考勤打卡表
                    sql = @"update Attendance set createdate=@createdate where wkshop_code=@wkshop_code and usercode=@usercode and id=@id";
                    list.Add(new
                    {
                        str = sql,
                        parm = new
                        {
                            id= attendanceRecord.id,
                            wkshop_code = attendanceRecord.wkshop_code,
                            usercode = attendanceRecord.creatusercode,
                            createdate = attendanceRecord.creatdate
                        }
                    });
                    bool aa = DapperHelper.DoTransaction(list);
                    if (aa)
                    {
                        //写入操作记录表
                        LogHelper.DbOperateLog(us.usercode, "修改", "修改了打卡记录id为"+attendanceRecord.id+",车间为:" + attendanceRecord.wkshop_code + ",人员为:" + attendanceRecord.creatusercode + ",考勤时间为:" + attendanceRecord.creatdate + "", us.usertype);
                        mes.code = "200";
                        mes.count = 0;
                        mes.message = "修改打卡记录成功!";
                        mes.data = null;
                    }
                    else
                    {
                        mes.code = "300";
                        mes.count = 0;
                        mes.message = "修改打卡记录失败!";
                        mes.data = null;
                    }
                }
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[考勤记录删除]
        public static ToMessage AttendanceRecordDelete(AttendanceRecord attendanceRecord, User us)
        {
            var sql = "";
            List<object> list = new List<object>();
            var dynamicParams = new DynamicParameters();
            try
            {
                //计时工资考勤打卡表
                sql = @"delete  Attendance  where id=@id";
                list.Add(new
                {
                    str = sql,
                    parm = new
                    {
                        id = attendanceRecord.id
                    }
                });
                bool aa = DapperHelper.DoTransaction(list);
                LogHelper.WriteLogData(aa.ToString());
                if (aa)
                {
                    //写入操作记录表
                    LogHelper.DbOperateLog(us.usercode, "删除", "删除了打卡记录车间为:" + attendanceRecord.wkshop_code + ",人员为:" + attendanceRecord.creatusercode + ",考勤时间为:" + attendanceRecord.creatdate + "", us.usertype);
                    mes.code = "200";
                    mes.count = 0;
                    mes.message = "打卡记录删除成功!";
                    mes.data = null;
                }
                else
                {
                    mes.code = "300";
                    mes.count = 0;
                    mes.message = "打卡记录删除失败!";
                    mes.data = null;
                }
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[考勤记录核算提交]
        public static ToMessage AttendanceRecordSave(AttendanceSave attendanceSave, User us)
        {
            var sql = "";
            var dynamicParams = new DynamicParameters();
            string paydatestartdate = "";  //开始时间
            string paydateenddate = "";    //结束时间
            try
            {
                if (attendanceSave.creatdate != "" && attendanceSave.creatdate != null)
                {
                    paydatestartdate = attendanceSave.creatdate.Split('~')[0].ToString();
                    paydateenddate = attendanceSave.creatdate.Split('~')[1].ToString();
                }
                //存储过程名
                DataTable dt = new DataTable();
                sql = @"h_p_MES_HourlyWage";
                dynamicParams.Add("@wkshop_code", attendanceSave.wkshop_code);
                dynamicParams.Add("@usercode", attendanceSave.creatusercode);
                dynamicParams.Add("@startdate", paydatestartdate);
                dynamicParams.Add("@closedate", paydateenddate);
                dynamicParams.Add("@status", attendanceSave.status);
                bool a = DapperHelper.IsProcedure(sql, dynamicParams);
                if (a)
                {
                    //写入操作记录表
                    LogHelper.DbOperateLog(us.usercode, "计时工资核算", "用户:" + us.usercode + "进行核算,操作时间为:" + DateTime.Now.ToString() + "", "PC");
                    mes.code = "200";
                    mes.count = 0;
                    mes.message = "核算成功!";
                    mes.data = null;
                }
                else
                {
                    mes.code = "300";
                    mes.count = 0;
                    mes.message = "核算失败!";
                    mes.data = null;
                }
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[日计时工资报表查询]
        public static ToMessage DailyWageReportSearch(string wkshop_code, string creatusercode, string paydatestartdate, string paydateenddate, int startNum, int endNum, string prop, string order)
        {
            var dynamicParams = new DynamicParameters();
            string search = "";
            try
            {
                if (wkshop_code != "" && wkshop_code != null)
                {
                    search += " and S.wkshop_code=@wkshop_code ";
                    dynamicParams.Add("@wkshop_code", wkshop_code);
                }
                if (creatusercode != "" && creatusercode != null)
                {
                    search += " and S.usercode=@creatusercode";
                    dynamicParams.Add("@creatusercode", creatusercode);
                }
                if (paydatestartdate != "" && paydatestartdate != null)
                {
                    search += " and S.checkindate between @paydatestartdate and @paydateenddate ";
                    dynamicParams.Add("@paydatestartdate", paydatestartdate + " 00:00:00");
                    dynamicParams.Add("@paydateenddate", paydateenddate + " 23:59:59");
                }
                // --------------查询指定数据--------------
                var total = 0; //总条数
                var sql = @"select S.id,S.wkshop_code,T.torg_name as wkshop_name,S.usercode,U.username,S.checkindate,S.workcount,S.workprice,
                            S.overcount,S.overprice,S.deductcount,S.deductmoney,S.timimoney
                            from AttendanceSum S
                            left join  TOrganization T on S.wkshop_code=T.torg_code
                            left join  TUser U on S.usercode=U.usercode where 1=1 " + search;
                var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
                mes.code = "200";
                mes.message = "查询成功!";
                mes.count = total;
                mes.data = data.ToList();
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[日计时工资修改扣除时长、扣除薪资]
        public static ToMessage DailyWageReportUpdate(DailyWageReport dailyWageReport, User us)
        {
            var sql = "";
            List<object> list = new List<object>();
            var dynamicParams = new DynamicParameters();
            try
            {
                //计时工资日汇总表
                sql = @"update  AttendanceSum set deductcount=@deductcount,deductmoney=@deductmoney  where id=@id";
                list.Add(new
                {
                    str = sql,
                    parm = new
                    {
                        id = dailyWageReport.id,
                        deductcount = dailyWageReport.deductcount,
                        deductmoney = dailyWageReport.deductmoney
                    }
                });
                bool aa = DapperHelper.DoTransaction(list);
                LogHelper.WriteLogData(aa.ToString());
                if (aa)
                {
                    //写入操作记录表
                    LogHelper.DbOperateLog(us.usercode, "修改", "修改了工资日汇总表,车间为:"+dailyWageReport.whshop_code+",打卡人:"+dailyWageReport.usercode+",打卡时间为:"+dailyWageReport.checkindate+",扣除时长为:" + dailyWageReport.deductcount + ",扣除工资为:" + dailyWageReport.deductmoney + "的工资记录", us.usertype);
                    mes.code = "200";
                    mes.count = 0;
                    mes.message = "工资修改成功!";
                    mes.data = null;
                }
                else
                {
                    mes.code = "300";
                    mes.count = 0;
                    mes.message = "工资修改失败!";
                    mes.data = null;
                }
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[日计时工资报表导出]
        public static ToMessage DailyWageReportExcelSearch(string wkshop_code, string creatusercode, string paydatestartdate, string paydateenddate)
        {
            var dynamicParams = new DynamicParameters();
            string search = "";
            try
            {
                if (wkshop_code != "" && wkshop_code != null)
                {
                    search += " and S.wkshop_code=@wkshop_code ";
                    dynamicParams.Add("@wkshop_code", wkshop_code);
                }
                if (creatusercode != "" && creatusercode != null)
                {
                    search += " and S.usercode=@creatusercode";
                    dynamicParams.Add("@creatusercode", creatusercode);
                }
                if (paydatestartdate != "" && paydatestartdate != null)
                {
                    search += " and S.checkindate between @paydatestartdate and @paydateenddate ";
                    dynamicParams.Add("@paydatestartdate", paydatestartdate + " 00:00:00");
                    dynamicParams.Add("@paydateenddate", paydateenddate + " 23:59:59");
                }
                // --------------查询指定数据--------------
                var total = 0; //总条数
                var sql = @"select S.wkshop_code as æ‰€å±žè½¦é—´ç¼–码,T.torg_name as æ‰€å±žè½¦é—´,S.usercode as æ‰“卡人员编码,U.username as æ‰“卡人员,S.checkindate as æ‰“卡日期,
                            S.workcount as '上班时长(小时)',S.workprice as '工价(元/小时)',S.overcount as '加班时长(小时)',S.overprice as '加班工价(元/小时)',
                            S.deductcount as '扣除时长(小时)',S.deductmoney as '扣除工资(元)',S.timimoney as '计时工资(元)',(S.timimoney-S.deductmoney) as '结算工资(元)'
                            from AttendanceSum S
                            left join  TOrganization T on S.wkshop_code=T.torg_code
                            left join  TUser U on S.usercode=U.usercode where 1=1 " + search;
                DataTable data = DapperHelper.selectdata(sql, dynamicParams);
                data.TableName = "Table"; //设置DataTable的名称
                string msg = DownLoad.DataTableToExcel(data, "日计时工资报表");
                mes.code = "200";
                mes.message = "查询成功!";
                mes.count = total;
                mes.data = msg;
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[月计时工资报表查询]
        public static ToMessage MonthlyWageReportSearch(string wkshop_code, string paydatestartdate, string paydateenddate, int startNum, int endNum, string prop, string order)
        {
            var dynamicParams = new DynamicParameters();
            string search = "";
            try
            {
                if (wkshop_code != "" && wkshop_code != null)
                {
                    search += " and S.wkshop_code=@wkshop_code ";
                    dynamicParams.Add("@wkshop_code", wkshop_code);
                }
                if (paydatestartdate != "" && paydatestartdate != null)
                {
                    search += " and S.checkindate between @paydatestartdate and @paydateenddate ";
                    dynamicParams.Add("@paydatestartdate", paydatestartdate + " 00:00:00");
                    dynamicParams.Add("@paydateenddate", paydateenddate + " 23:59:59");
                }
                // --------------查询指定数据--------------
                var total = 0; //总条数
                var sql = @"select T.torg_name as wkshop_name,U.username,
                            sum(S.workcount) as TotalWorkCount,
                            avg(S.workprice) as workprice,
                            sum(S.overcount) AS TotalOverCount,
                            avg(S.overprice) as overprice,
                            (sum(S.workcount) * avg(S.workprice)) AS TotalWorkValue,
                            (sum(S.overcount) * avg(S.overprice)) AS TotalOverValue,
                            sum(S.timimoney) AS TotalTimedMoney
                            from AttendanceSum S
                            left join  TOrganization T on S.wkshop_code=T.torg_code
                            left join  TUser U on S.usercode=U.usercode
                            where 1=1 " + search+ " group by T.torg_name,U.username";
                var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
                mes.code = "200";
                mes.message = "查询成功!";
                mes.count = total;
                mes.data = data.ToList();
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
        #region[月计时工资报表导出]
        public static ToMessage MonthlyWageReportExcelSearch(string wkshop_code, string paydatestartdate, string paydateenddate)
        {
            var dynamicParams = new DynamicParameters();
            string search = "";
            try
            {
                if (wkshop_code != "" && wkshop_code != null)
                {
                    search += " and S.wkshop_code=@wkshop_code ";
                    dynamicParams.Add("@wkshop_code", wkshop_code);
                }
                if (paydatestartdate != "" && paydatestartdate != null)
                {
                    search += " and S.checkindate between @paydatestartdate and @paydateenddate ";
                    dynamicParams.Add("@paydatestartdate", paydatestartdate + " 00:00:00");
                    dynamicParams.Add("@paydateenddate", paydateenddate + " 23:59:59");
                }
                // --------------查询指定数据--------------
                var total = 0; //总条数
                var sql = @"select T.torg_name as '所属车间',U.username as '打卡人员',
                            sum(S.workcount) as '总工作时长(小时)',
                            avg(S.workprice) as '每小时单价(元)',
                            sum(S.overcount) as '总加班时长(小时)',
                            avg(S.overprice) as '加班每小时单价(元)',
                            (sum(S.workcount) * avg(S.workprice)) as '总工作工资(元)',
                            (sum(S.overcount) * avg(S.overprice)) as '总加班工资(元)',
                            sum(S.timimoney) AS '总计时工资(元)'
                            from AttendanceSum S
                            left join  TOrganization T on S.wkshop_code=T.torg_code
                            left join  TUser U on S.usercode=U.usercode
                            where 1=1 " + search + " group by T.torg_name,U.username";
                DataTable data = DapperHelper.selectdata(sql, dynamicParams);
                data.TableName = "Table"; //设置DataTable的名称
                string msg = DownLoad.DataTableToExcel(data, "月计时工资报表");
                mes.code = "200";
                mes.message = "查询成功!";
                mes.count = total;
                mes.data = msg;
            }
            catch (Exception e)
            {
                mes.code = "300";
                mes.count = 0;
                mes.message = e.Message;
                mes.data = null;
            }
            return mes;
        }
        #endregion
    }
}
VueWebCoreApi/DLL/DAL/ReportManagerDAL.cs
@@ -20,7 +20,7 @@
        #region[生产进度报表]
        public static ToMessage ProductionScheduleReportSearch(string wkshopcode, string status, string wocode, string partcode, string partname, string partspec, string opendate, string closedate, int startNum, int endNum, string prop, string order)
        public static ToMessage ProductionScheduleReportSearch(string wkshopcode, string status,string socode, string wocode, string partcode, string partname, string partspec, string opendate, string closedate, int startNum, int endNum, string prop, string order)
        {
            var dynamicParams = new DynamicParameters();
            string search = "";
@@ -45,6 +45,11 @@
                            search += "and AA.status='未开始' ";
                            break;
                    }
                }
                if (socode != "" && socode != null)
                {
                    search += "and AA.saleOrderCode like '%'+@socode+'%' ";
                    dynamicParams.Add("@socode", socode);
                }
                if (wocode != "" && wocode != null)
                {
@@ -72,11 +77,6 @@
                    dynamicParams.Add("@opendate", opendate + " 00:00:00");
                    dynamicParams.Add("@closedate", closedate + " 23:59:59");
                }
                if (search == "")
                {
                    search = "and 1=1 ";
                }
                search = search.Substring(3);//截取索引2后面的字符
                // --------------查询指定数据--------------
                var total = 0; //总条数
                var sql = @"select top 100 percent AA.saleOrderCode,AA.m_po,AA.wkshp_code,AA.wkshp_name,AA.wo_code,AA.status,AA.lm_date,
@@ -99,7 +99,7 @@
                                 left join TMateriel_Info P on W.materiel_code=p.partcode
                                 left join  TOrganization F on W.wkshp_code=F.torg_code
                                 group by E.saleOrderCode,W.m_po,W.wo_code,W.wkshp_code,F.torg_name,W.status,W.lm_date,P.partcode,P.partname,P.partspec,W.plan_qty
                            ) as AA where " + search;
                            ) as AA where AA.concat_name is not null " + search;
                var data = DapperHelper.GetPageList<object>(sql, dynamicParams, prop, order, startNum, endNum, out total);
                mes.code = "200";
                mes.message = "查询成功!";
@@ -118,7 +118,7 @@
        #endregion
        #region[生产进度报表导出]
        public static ToMessage ProductionScheduleReportExcelSearch(string wkshopcode, string status, string wocode,string partcode, string partname, string partspec, string opendate, string closedate)
        public static ToMessage ProductionScheduleReportExcelSearch(string wkshopcode, string status,string socode, string wocode,string partcode, string partname, string partspec, string opendate, string closedate)
        {
            var dynamicParams = new DynamicParameters();
            string search = "";
@@ -143,6 +143,11 @@
                            search += "and AA.status='未开始' ";
                            break;
                    }
                }
                if (socode != "" && socode != null)
                {
                    search += "and AA.saleOrderCode like '%'+@socode+'%' ";
                    dynamicParams.Add("@socode", socode);
                }
                if (wocode != "" && wocode != null)
                {
@@ -170,11 +175,6 @@
                    dynamicParams.Add("@opendate", opendate + " 00:00:00");
                    dynamicParams.Add("@closedate", closedate + " 23:59:59");
                }
                if (search == "")
                {
                    search = "and 1=1 ";
                }
                search = search.Substring(3);//截取索引2后面的字符
                // --------------查询指定数据--------------
                var total = 0; //总条数
@@ -200,7 +200,7 @@
                                 left join  TOrganization F on W.wkshp_code=F.torg_code
                                 group by E.saleOrderCode,W.m_po,W.wo_code,W.wkshp_code,F.torg_name,W.status,W.lm_date,P.partcode,P.partname,P.partspec,W.plan_qty
                            ) as AA
                            where " + search;
                            where where AA.concat_name is not null " + search;
                DataTable data = DapperHelper.selectdata(sql, dynamicParams);
                data.TableName = "Table"; //设置DataTable的名称
                string msg = DownLoad.DataTableToExcel(data, "生产进度报表");
@@ -222,7 +222,7 @@
        #region[班组工资报表记录查询]
        public static ToMessage GroupSalaryReportSearch(string compute,string wkshopcode, string wocode, string partcode, string partname, string partspec, string stepname, string groupcode, string username, string operopendate, string operclosedate, int startNum, int endNum, string prop, string order)
        public static ToMessage GroupSalaryReportSearch(string compute,string wkshopcode,string socode, string wocode, string partcode, string partname, string partspec, string stepname, string groupcode, string username, string operopendate, string operclosedate, int startNum, int endNum, string prop, string order)
        {
            var dynamicParams = new DynamicParameters();
            string search = "";
@@ -237,6 +237,11 @@
                {
                    search += "and K.wkshp_code=@wkshopcode ";
                    dynamicParams.Add("@wkshopcode", wkshopcode);
                }
                if (socode != "" && socode != null)
                {
                    search += "and K.saleOrderCode like '%'+@socode+'%' ";
                    dynamicParams.Add("@socode", socode);
                }
                if (wocode != "" && wocode != null)
                {
@@ -286,7 +291,7 @@
                //search = search.Substring(3);//截取索引2后面的字符
                // --------------查询指定数据--------------
                var total = 0; //总条数
                var sql = @"select distinct A.id,K.wkshp_code,F.torg_name as wkshp_name,A.wo_code,M.partcode,M.partname,M.partspec,T.stepcode,T.stepname,A.task_qty,G.usergroupcode,G.usergroupname,A.good_qty,
                var sql = @"select distinct A.id,K.wkshp_code,F.torg_name as wkshp_name,K.saleOrderCode,A.wo_code,M.partcode,M.partname,M.partspec,T.stepcode,T.stepname,A.task_qty,G.usergroupcode,G.usergroupname,A.good_qty,
                            isnull(A.step_price,0) as unprice,A.good_qty*isnull(A.step_price,0) as usermoney,U.username as lm_user,A.lm_date,B.report_date   
                            from TK_Wrk_Record A
                            inner join TK_Wrk_RecordSub B on A.id=B.m_id
@@ -348,7 +353,7 @@
        #endregion
        #region[班组工资报表记录导出]
        public static ToMessage GroupSalaryReportExcelSearch(string compute,string wkshopcode, string wocode, string partcode, string partname, string partspec, string stepname, string groupcode, string username, string operopendate, string operclosedate)
        public static ToMessage GroupSalaryReportExcelSearch(string compute,string wkshopcode,string socode, string wocode, string partcode, string partname, string partspec, string stepname, string groupcode, string username, string operopendate, string operclosedate)
        {
            var dynamicParams = new DynamicParameters();
            string search = "";
@@ -363,6 +368,11 @@
                {
                    search += "and K.wkshp_code=@wkshopcode ";
                    dynamicParams.Add("@wkshopcode", wkshopcode);
                }
                if (socode != "" && socode != null)
                {
                    search += "and K.saleOrderCode like '%'+@socode+'%' ";
                    dynamicParams.Add("@socode", socode);
                }
                if (wocode != "" && wocode != null)
                {
@@ -411,7 +421,7 @@
                }
                // --------------查询指定数据--------------
                var total = 0; //总条数
                var sql = @"select distinct K.wkshp_code as è½¦é—´ç¼–码,F.torg_name as è½¦é—´åç§°, A.wo_code as å·¥å•编号,M.partcode as äº§å“ç¼–码,M.partname as äº§å“åç§°,M.partspec as äº§å“è§„æ ¼,
                var sql = @"select distinct K.wkshp_code as è½¦é—´ç¼–码,F.torg_name as è½¦é—´åç§°,K.saleOrderCode as '销售单号',A.wo_code as å·¥å•编号,M.partcode as äº§å“ç¼–码,M.partname as äº§å“åç§°,M.partspec as äº§å“è§„æ ¼,
                            T.stepcode as å·¥åºç¼–码,T.stepname as å·¥åºåç§°,A.task_qty as ä»»åŠ¡æ•°é‡,G.usergroupcode as ç­ç»„编码,G.usergroupname as ç­ç»„名称,
                            A.good_qty as æŠ¥å·¥æ•°é‡,isnull(A.step_price,0) as å·¥åºå•ä»·,A.good_qty*isnull(A.step_price,0) as è®¡ä»¶å·¥èµ„,U.username as æ“ä½œäººå‘˜,A.lm_date as æ“ä½œæ—¶é—´,B.report_date as æŠ¥å·¥æ—¶é—´ 
                            from TK_Wrk_Record A
@@ -445,7 +455,7 @@
        #region[人员工资明细报表]
        public static ToMessage PeopleSalaryReportSearch(string compute,string wkshopcode, string wocode, string partcode, string partname, string partspec,string stepcode, string stepname, string reportname, string reportopendate, string reportclosedate, int startNum, int endNum, string prop, string order)
        public static ToMessage PeopleSalaryReportSearch(string compute,string wkshopcode,string socode, string wocode, string partcode, string partname, string partspec,string stepcode, string stepname, string reportname, string reportopendate, string reportclosedate, int startNum, int endNum, string prop, string order)
        {
            var dynamicParams = new DynamicParameters();
            string search = "";
@@ -460,6 +470,11 @@
                {
                    search += "and AA.wkshp_code=@wkshopcode ";
                    dynamicParams.Add("@wkshopcode", wkshopcode);
                }
                if (socode != "" && socode != null)
                {
                    search += "and AA.saleOrderCode like '%'+@socode+'%' ";
                    dynamicParams.Add("@socode", socode);
                }
                if (wocode != "" && wocode != null)
                {
@@ -510,7 +525,7 @@
                // --------------查询指定数据--------------
                var total = 0; //总条数
                var sql = @"select *  from(
                            select M.wkshp_code,F.torg_name as wkshp_name,A.wo_code,A.materiel_code as partcode,P.partname,P.partspec,A.step_seq,A.step_code,S.stepname,S.flwtype as steptype,K.isend,
                            select M.wkshp_code,F.torg_name as wkshp_name,M.saleOrderCode,A.wo_code,A.materiel_code as partcode,P.partname,P.partspec,A.step_seq,A.step_code,S.stepname,S.flwtype as steptype,K.isend,
                            A.task_qty,B.report_qty,isnull(A.step_price,0) as step_price,(B.report_qty*isnull(A.step_price,0)) as moneys,
                            B.report_person as usercode,
                             STUFF((SELECT ',' + U.username
@@ -527,7 +542,7 @@
                            left join  TOrganization F on M.wkshp_code=F.torg_code
                            where A.style='B' and B.style='B' and A.verify='Y' and B.usergroup_code=''
                            union all
                            select M.wkshp_code,F.torg_name as wkshp_name,A.wo_code,A.materiel_code as partcode,P.partname,P.partspec,A.step_seq,A.step_code,S.stepname,S.flwtype as steptype,K.isend,
                            select M.wkshp_code,F.torg_name as wkshp_name,M.saleOrderCode,A.wo_code,A.materiel_code as partcode,P.partname,P.partspec,A.step_seq,A.step_code,S.stepname,S.flwtype as steptype,K.isend,
                            M.plan_qty as task_qty,B.sqty as report_qty,isnull(A.step_price,0) as step_price,(B.sqty*isnull(A.step_price,0)) as moneys,
                            B.in_person as usercode,
                            STUFF((SELECT ',' + U.username
@@ -563,7 +578,7 @@
        #endregion
        #region[人员工资明细报表导出]
        public static ToMessage PeopleSalaryReportSearch(string compute,string wkshopcode, string wocode, string partcode, string partname, string partspec, string stepcode, string stepname, string reportname, string reportopendate, string reportclosedate)
        public static ToMessage PeopleSalaryReportSearch(string compute,string wkshopcode,string socode, string wocode, string partcode, string partname, string partspec, string stepcode, string stepname, string reportname, string reportopendate, string reportclosedate)
        {
            var dynamicParams = new DynamicParameters();
            string search = "";
@@ -578,6 +593,11 @@
                {
                    search += "and AA.wkshp_code=@wkshopcode ";
                    dynamicParams.Add("@wkshopcode", wkshopcode);
                }
                if (socode != "" && socode != null)
                {
                    search += "and AA.saleOrderCode like '%'+@socode+'%' ";
                    dynamicParams.Add("@socode", socode);
                }
                if (wocode != "" && wocode != null)
                {
@@ -627,11 +647,11 @@
                search = search.Substring(3);//截取索引2后面的字符
                // --------------查询指定数据--------------
                var total = 0; //总条数
                var sql = @"select AA.wkshp_code as è½¦é—´ç¼–码,AA.wkshp_name as è½¦é—´åç§°,AA.wo_code as '工单号',AA.partcode as '产品编码',AA.partname '产品名称',AA.partspec as '规格型号',AA.step_seq as '工序序号',
                var sql = @"select AA.wkshp_code as è½¦é—´ç¼–码,AA.wkshp_name as è½¦é—´åç§°,AA.saleOrderCode as '销售单号',AA.wo_code as '工单号',AA.partcode as '产品编码',AA.partname '产品名称',AA.partspec as '规格型号',AA.step_seq as '工序序号',
                            AA.step_code as '工序编码',AA.stepname as '工序名称',(case when AA.steptype='Z' then '自制' else '外协' end) as '工序类型',AA.task_qty as '任务数量',AA.report_qty as '报工数量',
                            AA.step_price as '工序单价',AA.moneys as '计件工资',AA.usercode as '报工人员编号',AA.username as '报工人员名称',AA.report_date as '报工时间'  
                            from(
                            select M.wkshp_code,F.torg_name as wkshp_name,A.wo_code,A.materiel_code as partcode,P.partname,P.partspec,A.step_seq,A.step_code,S.stepname,S.flwtype as steptype,K.isend,
                            select M.wkshp_code,F.torg_name as wkshp_name,M.saleOrderCode,A.wo_code,A.materiel_code as partcode,P.partname,P.partspec,A.step_seq,A.step_code,S.stepname,S.flwtype as steptype,K.isend,
                            A.task_qty,B.report_qty,isnull(A.step_price,0) as step_price,(B.report_qty*isnull(A.step_price,0)) as moneys,
                            B.report_person as usercode,
                             STUFF((SELECT ',' + U.username
@@ -648,7 +668,7 @@
                            left join  TOrganization F on M.wkshp_code=F.torg_code
                            where A.style='B' and B.style='B' and A.verify='Y' and B.usergroup_code=''
                            union all
                            select M.wkshp_code,F.torg_name as wkshp_name,A.wo_code,A.materiel_code as partcode,P.partname,P.partspec,A.step_seq,A.step_code,S.stepname,S.flwtype as steptype,K.isend,
                            select M.wkshp_code,F.torg_name as wkshp_name,M.saleOrderCode,A.wo_code,A.materiel_code as partcode,P.partname,P.partspec,A.step_seq,A.step_code,S.stepname,S.flwtype as steptype,K.isend,
                            M.plan_qty as task_qty,B.sqty as report_qty,isnull(A.step_price,0) as step_price,(B.sqty*isnull(A.step_price,0)) as moneys,
                            B.in_person as usercode,
                            STUFF((SELECT ',' + U.username
VueWebCoreApi/Models/AttendanceSetting/Attendance.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace VueWebCoreApi.Models.AttendanceSetting
{
    public class Attendance
    {
        public string wkshop_code { get; set; }
        public string user_code { get; set; }
    }
}
VueWebCoreApi/Models/AttendanceSetting/AttendanceRecord.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace VueWebCoreApi.Models.AttendanceSetting
{
    public class AttendanceRecord
    {
        /// <summary>
        /// æŠ¥å·¥è®°å½•id
        /// </summary>
        public string id { get; set; }
        /// <summary>
        /// è½¦é—´ç¼–码
        /// </summary>
        public string wkshop_code { get; set; }
        /// <summary>
        /// æ‰“卡人员编码
        /// </summary>
        public string creatusercode { get; set; }
        /// <summary>
        /// æ‰“卡日期
        /// </summary>
        public string creatdate { get; set; }
        /// <summary>
        /// æ ¸ç®—状态
        /// </summary>
        public string status { get; set; }
    }
}
VueWebCoreApi/Models/AttendanceSetting/AttendanceSave.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace VueWebCoreApi.Models.AttendanceSetting
{
    public class AttendanceSave
    {
        /// <summary>
        /// è½¦é—´ç¼–码
        /// </summary>
        public string wkshop_code { get; set; }
        /// <summary>
        /// æ‰“卡人员编码
        /// </summary>
        public string creatusercode { get; set; }
        /// <summary>
        /// æ‰“卡日期
        /// </summary>
        public string creatdate { get; set; }
        /// <summary>
        /// æ ¸ç®—状态
        /// </summary>
        public string status { get; set; }
    }
}
VueWebCoreApi/Models/AttendanceSetting/AttendanceSett.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace VueWebCoreApi.Models.AttendanceSetting
{
    public class AttendanceSett
    {
        /// <summary>
        /// è½¦é—´ç¼–码
        /// </summary>
        public string wkshop_code { get; set; }
        /// <summary>
        /// ä¸Šç­æ—¶é—´
        /// </summary>
        public string workhouse { get; set; }
        /// <summary>
        /// ä¸‹ç­æ—¶é—´
        /// </summary>
        public string closehouse { get; set; }
        /// <summary>
        /// æ­£å¸¸ä¸Šç­å·¥ä»·
        /// </summary>
        public string workprice { get; set; }
        /// <summary>
        /// åŠ ç­å·¥ä»·
        /// </summary>
        public string overprice { get; set; }
        /// <summary>
        /// ä¸Šç­æ‰“卡有效范围/小时
        /// </summary>
        public string uphouse { get; set; }
        /// <summary>
        /// ä¸‹ç­æ‰“开有效范围/小时
        /// </summary>
        public string downhouse { get; set; }
    }
}
VueWebCoreApi/Models/AttendanceSetting/DailyWageReport.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace VueWebCoreApi.Models.AttendanceSetting
{
    public class DailyWageReport
    {
        /// <summary>
        /// id
        /// </summary>
        public string id { get; set; }
        /// <summary>
        /// è½¦é—´ç¼–码
        /// </summary>
        public string whshop_code { get; set; }
        /// <summary>
        /// æ‰“卡日期
        /// </summary>
        public string checkindate { get; set; }
        /// <summary>
        /// æ‰“卡人员
        /// </summary>
        public string usercode { get; set; }
        /// <summary>
        /// å·¥ä½œæ—¶é•¿(小时)
        /// </summary>
        public string workcount { get; set; }
        /// <summary>
        /// è®¡æ—¶å·¥ä»·(元/小时)
        /// </summary>
        public string workprice { get; set; }
        /// <summary>
        /// åŠ ç­æ—¶é•¿(小时)
        /// </summary>
        public string overcount { get; set; }
        /// <summary>
        /// åŠ ç­å·¥ä»·(元/小时)
        /// </summary>
        public string overprice { get; set; }
        /// <summary>
        /// æ‰£é™¤æ—¶é•¿(小时)
        /// </summary>
        public string deductcount { get; set; }
        /// <summary>
        /// æ‰£é™¤è–ªèµ„(元)
        /// </summary>
        public string deductmoney { get; set; }
        /// <summary>
        /// è®¡æ—¶å·¥èµ„(元)
        /// </summary>
        public string timimoney { get; set; }
    }
}
VueWebCoreApi/Startup.cs
@@ -73,7 +73,7 @@
                {
                    c.SwaggerDoc(version, new OpenApiInfo()
                    {
                        Title = $"新凯迪产品-MesApi文档:{version}",
                        Title = $"桥下工贸-MesApi文档:{version}",
                        Version = version,
                        Description = $"Panda.Sewerage :  {version}  ",
                    });
VueWebCoreApi/Tools/DapperHelper.cs
@@ -477,6 +477,40 @@
        /// <param name="sql">存储过程名</param>
        /// <param name="parm">参数</param>
        /// <returns></returns>
        public static bool selectProcedureTable(string sql, Object parm, out DataTable table)
        {
            bool result;
            //sql语句
            using (IDbConnection conn = sqlConnection())
            {
                try
                {
                    var res = conn.ExecuteReader(sql, parm, commandType: CommandType.StoredProcedure);//sql å­˜å‚¨è¿‡ç¨‹
                    table= (DataTable)res;
                    result = true;
                }
                catch (Exception ex)
                {
                    //创建日志记录组件实例
                    LogHelper.WriteLog(ex);
                    throw ex;
                }
                finally
                {
                    conn.Dispose();
                    conn.Close();
                }
                return result;
            }
        }
        /// <summary>
        /// Dapper执行存储过程返回datatable数据(带参数)
        /// </summary>
        /// <param name="sql">存储过程名</param>
        /// <param name="parm">参数</param>
        /// <returns></returns>
        public static bool IsProcedure(string sql, Object parm)
        {
            bool result;
VueWebCoreApi/appsettings.json
@@ -9,7 +9,7 @@
  "AllowedHosts": "*",
  //服务器环境
  "ConnectionStrings": {
    "DBServer": "Data Source=121.196.36.24,1533;Initial Catalog=xkdvmes;User ID=sa;Password=xkd@20230101;pooling=false",
    "DBServer": "Data Source=121.196.36.24,1533;Initial Catalog=vmes_qx;User ID=sa;Password=xkd@20230101;pooling=false",
    //企业编码
    "CompanyCode": "000",
    //企业名称