Commit b31159d8c26d8266a9a0cdbcf191230bd56d0f10

Authored by “wangming”
1 parent d3b83486

feat: 删除考勤汇总表相关功能并更新LqKdKdjlbService

- 删除LqKqhzbService及相关DTO、Mapper和接口,移除考勤汇总表的所有功能
- 在LqKdKdjlbService中添加补缴开单ID的处理逻辑,更新已缴欠款的计算
- 修改DTO字段命名为小写,以保持一致性
- 新增根据开单ID获取当前开单欠款信息的接口
- 优化异常处理,提供更详细的错误信息
Showing 26 changed files with 1065 additions and 1759 deletions
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqAttendanceSummary/LqAttendanceSummaryCrInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqAttendanceSummary
  5 +{
  6 + /// <summary>
  7 + /// 考勤汇总创建输入
  8 + /// </summary>
  9 + public class LqAttendanceSummaryCrInput
  10 + {
  11 + /// <summary>
  12 + /// 用户ID(员工ID)
  13 + /// </summary>
  14 + [Required(ErrorMessage = "用户ID不能为空")]
  15 + [Display(Name = "用户ID", Description = "员工ID")]
  16 + public string UserId { get; set; }
  17 +
  18 + /// <summary>
  19 + /// 年份
  20 + /// </summary>
  21 + [Required(ErrorMessage = "年份不能为空")]
  22 + [Range(2020, 2030, ErrorMessage = "年份必须在2020-2030之间")]
  23 + [Display(Name = "年份", Description = "考勤年份")]
  24 + public int Year { get; set; }
  25 +
  26 + /// <summary>
  27 + /// 月份
  28 + /// </summary>
  29 + [Required(ErrorMessage = "月份不能为空")]
  30 + [Range(1, 12, ErrorMessage = "月份必须在1-12之间")]
  31 + [Display(Name = "月份", Description = "考勤月份")]
  32 + public int Month { get; set; }
  33 +
  34 + /// <summary>
  35 + /// 员工状态(1-在职,2-离职,3-停薪留职)
  36 + /// </summary>
  37 + [Required(ErrorMessage = "员工状态不能为空")]
  38 + [Range(1, 3, ErrorMessage = "员工状态必须在1-3之间")]
  39 + [Display(Name = "员工状态", Description = "1-在职,2-离职,3-停薪留职")]
  40 + public int EmployeeStatus { get; set; }
  41 +
  42 + /// <summary>
  43 + /// 出勤天数
  44 + /// </summary>
  45 + [Range(0, 31, ErrorMessage = "出勤天数必须在0-31之间")]
  46 + [Display(Name = "出勤天数", Description = "当月出勤天数")]
  47 + public decimal WorkDays { get; set; }
  48 +
  49 + /// <summary>
  50 + /// 请假天数
  51 + /// </summary>
  52 + [Range(0, 31, ErrorMessage = "请假天数必须在0-31之间")]
  53 + [Display(Name = "请假天数", Description = "当月请假天数")]
  54 + public decimal LeaveDays { get; set; }
  55 +
  56 + /// <summary>
  57 + /// 休息天数
  58 + /// </summary>
  59 + [Range(0, 31, ErrorMessage = "休息天数必须在0-31之间")]
  60 + [Display(Name = "休息天数", Description = "当月休息天数")]
  61 + public decimal RestDays { get; set; }
  62 +
  63 + /// <summary>
  64 + /// 备注
  65 + /// </summary>
  66 + [StringLength(2000, ErrorMessage = "备注长度不能超过2000个字符")]
  67 + [Display(Name = "备注", Description = "考勤备注信息")]
  68 + public string Remark { get; set; }
  69 + }
  70 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqAttendanceSummary/LqAttendanceSummaryImportInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqAttendanceSummary
  5 +{
  6 + /// <summary>
  7 + /// 考勤汇总导入输入
  8 + /// </summary>
  9 + public class LqAttendanceSummaryImportInput
  10 + {
  11 + /// <summary>
  12 + /// 员工姓名
  13 + /// </summary>
  14 + [Required(ErrorMessage = "员工姓名不能为空")]
  15 + [Display(Name = "员工姓名", Description = "员工真实姓名")]
  16 + public string EmployeeName { get; set; }
  17 +
  18 + /// <summary>
  19 + /// 员工电话
  20 + /// </summary>
  21 + [Required(ErrorMessage = "员工电话不能为空")]
  22 + [Display(Name = "员工电话", Description = "员工手机号码")]
  23 + public string EmployeePhone { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 年份
  27 + /// </summary>
  28 + [Required(ErrorMessage = "年份不能为空")]
  29 + [Range(2020, 2030, ErrorMessage = "年份必须在2020-2030之间")]
  30 + [Display(Name = "年份", Description = "考勤年份")]
  31 + public int Year { get; set; }
  32 +
  33 + /// <summary>
  34 + /// 月份
  35 + /// </summary>
  36 + [Required(ErrorMessage = "月份不能为空")]
  37 + [Range(1, 12, ErrorMessage = "月份必须在1-12之间")]
  38 + [Display(Name = "月份", Description = "考勤月份")]
  39 + public int Month { get; set; }
  40 +
  41 + /// <summary>
  42 + /// 出勤天数
  43 + /// </summary>
  44 + [Range(0, 31, ErrorMessage = "出勤天数必须在0-31之间")]
  45 + [Display(Name = "出勤天数", Description = "当月出勤天数")]
  46 + public decimal WorkDays { get; set; }
  47 +
  48 + /// <summary>
  49 + /// 请假天数
  50 + /// </summary>
  51 + [Range(0, 31, ErrorMessage = "请假天数必须在0-31之间")]
  52 + [Display(Name = "请假天数", Description = "当月请假天数")]
  53 + public decimal LeaveDays { get; set; }
  54 +
  55 + /// <summary>
  56 + /// 休息天数
  57 + /// </summary>
  58 + [Range(0, 31, ErrorMessage = "休息天数必须在0-31之间")]
  59 + [Display(Name = "休息天数", Description = "当月休息天数")]
  60 + public decimal RestDays { get; set; }
  61 +
  62 + /// <summary>
  63 + /// 备注
  64 + /// </summary>
  65 + [StringLength(2000, ErrorMessage = "备注长度不能超过2000个字符")]
  66 + [Display(Name = "备注", Description = "考勤备注信息")]
  67 + public string Remark { get; set; }
  68 + }
  69 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqAttendanceSummary/LqAttendanceSummaryInfoOutput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqAttendanceSummary
  5 +{
  6 + /// <summary>
  7 + /// 考勤汇总详情输出
  8 + /// </summary>
  9 + public class LqAttendanceSummaryInfoOutput
  10 + {
  11 + /// <summary>
  12 + /// 考勤汇总ID
  13 + /// </summary>
  14 + [Display(Name = "考勤汇总ID")]
  15 + public string id { get; set; }
  16 +
  17 + /// <summary>
  18 + /// 用户ID(员工ID)
  19 + /// </summary>
  20 + [Display(Name = "用户ID")]
  21 + public string userId { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 员工姓名
  25 + /// </summary>
  26 + [Display(Name = "员工姓名")]
  27 + public string userName { get; set; }
  28 +
  29 + /// <summary>
  30 + /// 年份
  31 + /// </summary>
  32 + [Display(Name = "年份")]
  33 + public int year { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 月份
  37 + /// </summary>
  38 + [Display(Name = "月份")]
  39 + public int month { get; set; }
  40 +
  41 + /// <summary>
  42 + /// 员工状态
  43 + /// </summary>
  44 + [Display(Name = "员工状态")]
  45 + public int employeeStatus { get; set; }
  46 +
  47 + /// <summary>
  48 + /// 员工状态名称
  49 + /// </summary>
  50 + [Display(Name = "员工状态名称")]
  51 + public string employeeStatusName { get; set; }
  52 +
  53 + /// <summary>
  54 + /// 出勤天数
  55 + /// </summary>
  56 + [Display(Name = "出勤天数")]
  57 + public decimal workDays { get; set; }
  58 +
  59 + /// <summary>
  60 + /// 请假天数
  61 + /// </summary>
  62 + [Display(Name = "请假天数")]
  63 + public decimal leaveDays { get; set; }
  64 +
  65 + /// <summary>
  66 + /// 休息天数
  67 + /// </summary>
  68 + [Display(Name = "休息天数")]
  69 + public decimal restDays { get; set; }
  70 +
  71 + /// <summary>
  72 + /// 备注
  73 + /// </summary>
  74 + [Display(Name = "备注")]
  75 + public string remark { get; set; }
  76 +
  77 + /// <summary>
  78 + /// 创建人ID
  79 + /// </summary>
  80 + [Display(Name = "创建人ID")]
  81 + public string createUser { get; set; }
  82 +
  83 + /// <summary>
  84 + /// 创建人姓名
  85 + /// </summary>
  86 + [Display(Name = "创建人姓名")]
  87 + public string createUserName { get; set; }
  88 +
  89 + /// <summary>
  90 + /// 创建时间
  91 + /// </summary>
  92 + [Display(Name = "创建时间")]
  93 + public DateTime createTime { get; set; }
  94 +
  95 + /// <summary>
  96 + /// 更新人ID
  97 + /// </summary>
  98 + [Display(Name = "更新人ID")]
  99 + public string updateUser { get; set; }
  100 +
  101 + /// <summary>
  102 + /// 更新人姓名
  103 + /// </summary>
  104 + [Display(Name = "更新人姓名")]
  105 + public string updateUserName { get; set; }
  106 +
  107 + /// <summary>
  108 + /// 更新时间
  109 + /// </summary>
  110 + [Display(Name = "更新时间")]
  111 + public DateTime updateTime { get; set; }
  112 +
  113 + /// <summary>
  114 + /// 是否有效
  115 + /// </summary>
  116 + [Display(Name = "是否有效")]
  117 + public int isEffective { get; set; }
  118 + }
  119 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqAttendanceSummary/LqAttendanceSummaryListOutput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqAttendanceSummary
  5 +{
  6 + /// <summary>
  7 + /// 考勤汇总列表输出
  8 + /// </summary>
  9 + public class LqAttendanceSummaryListOutput
  10 + {
  11 + /// <summary>
  12 + /// 考勤汇总ID
  13 + /// </summary>
  14 + [Display(Name = "考勤汇总ID")]
  15 + public string id { get; set; }
  16 +
  17 + /// <summary>
  18 + /// 用户ID(员工ID)
  19 + /// </summary>
  20 + [Display(Name = "用户ID")]
  21 + public string userId { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 员工姓名
  25 + /// </summary>
  26 + [Display(Name = "员工姓名")]
  27 + public string userName { get; set; }
  28 +
  29 + /// <summary>
  30 + /// 年份
  31 + /// </summary>
  32 + [Display(Name = "年份")]
  33 + public int year { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 月份
  37 + /// </summary>
  38 + [Display(Name = "月份")]
  39 + public int month { get; set; }
  40 +
  41 + /// <summary>
  42 + /// 员工状态
  43 + /// </summary>
  44 + [Display(Name = "员工状态")]
  45 + public int employeeStatus { get; set; }
  46 +
  47 + // /// <summary>
  48 + // /// 员工状态名称
  49 + // /// </summary>
  50 + // [Display(Name = "员工状态名称")]
  51 + // public string employeeStatusName { get; set; }
  52 +
  53 + /// <summary>
  54 + /// 出勤天数
  55 + /// </summary>
  56 + [Display(Name = "出勤天数")]
  57 + public decimal workDays { get; set; }
  58 +
  59 + /// <summary>
  60 + /// 请假天数
  61 + /// </summary>
  62 + [Display(Name = "请假天数")]
  63 + public decimal leaveDays { get; set; }
  64 +
  65 + /// <summary>
  66 + /// 休息天数
  67 + /// </summary>
  68 + [Display(Name = "休息天数")]
  69 + public decimal restDays { get; set; }
  70 +
  71 + /// <summary>
  72 + /// 备注
  73 + /// </summary>
  74 + [Display(Name = "备注")]
  75 + public string remark { get; set; }
  76 +
  77 + /// <summary>
  78 + /// 创建人ID
  79 + /// </summary>
  80 + [Display(Name = "创建人ID")]
  81 + public string createUser { get; set; }
  82 +
  83 + /// <summary>
  84 + /// 创建人姓名
  85 + /// </summary>
  86 + [Display(Name = "创建人姓名")]
  87 + public string createUserName { get; set; }
  88 +
  89 + /// <summary>
  90 + /// 创建时间
  91 + /// </summary>
  92 + [Display(Name = "创建时间")]
  93 + public DateTime createTime { get; set; }
  94 +
  95 + /// <summary>
  96 + /// 更新人ID
  97 + /// </summary>
  98 + [Display(Name = "更新人ID")]
  99 + public string updateUser { get; set; }
  100 +
  101 + /// <summary>
  102 + /// 更新人姓名
  103 + /// </summary>
  104 + [Display(Name = "更新人姓名")]
  105 + public string updateUserName { get; set; }
  106 +
  107 + /// <summary>
  108 + /// 更新时间
  109 + /// </summary>
  110 + [Display(Name = "更新时间")]
  111 + public DateTime updateTime { get; set; }
  112 +
  113 + /// <summary>
  114 + /// 是否有效
  115 + /// </summary>
  116 + [Display(Name = "是否有效")]
  117 + public int isEffective { get; set; }
  118 + }
  119 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqAttendanceSummary/LqAttendanceSummaryListQueryInput.cs 0 → 100644
  1 +using NCC.Common.Filter;
  2 +using System;
  3 +using System.ComponentModel.DataAnnotations;
  4 +
  5 +namespace NCC.Extend.Entitys.Dto.LqAttendanceSummary
  6 +{
  7 + /// <summary>
  8 + /// 考勤汇总列表查询输入
  9 + /// </summary>
  10 + public class LqAttendanceSummaryListQueryInput : PageInputBase
  11 + {
  12 + /// <summary>
  13 + /// 用户ID(员工ID)
  14 + /// </summary>
  15 + [Display(Name = "用户ID", Description = "根据员工ID筛选")]
  16 + public string UserId { get; set; }
  17 +
  18 + /// <summary>
  19 + /// 年份
  20 + /// </summary>
  21 + [Display(Name = "年份", Description = "根据年份筛选")]
  22 + public int? Year { get; set; }
  23 +
  24 + /// <summary>
  25 + /// 月份
  26 + /// </summary>
  27 + [Display(Name = "月份", Description = "根据月份筛选")]
  28 + public int? Month { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 员工状态
  32 + /// </summary>
  33 + [Display(Name = "员工状态", Description = "根据员工状态筛选")]
  34 + public int? EmployeeStatus { get; set; }
  35 +
  36 + /// <summary>
  37 + /// 开始时间
  38 + /// </summary>
  39 + [Display(Name = "开始时间", Description = "创建时间的开始范围")]
  40 + public DateTime? StartTime { get; set; }
  41 +
  42 + /// <summary>
  43 + /// 结束时间
  44 + /// </summary>
  45 + [Display(Name = "结束时间", Description = "创建时间的结束范围")]
  46 + public DateTime? EndTime { get; set; }
  47 + }
  48 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqAttendanceSummary/LqAttendanceSummaryUpInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqAttendanceSummary
  5 +{
  6 + /// <summary>
  7 + /// 考勤汇总更新输入
  8 + /// </summary>
  9 + public class LqAttendanceSummaryUpInput : LqAttendanceSummaryCrInput
  10 + {
  11 + /// <summary>
  12 + /// 考勤汇总ID
  13 + /// </summary>
  14 + [Required(ErrorMessage = "考勤汇总ID不能为空")]
  15 + [Display(Name = "考勤汇总ID", Description = "要更新的考勤汇总记录ID")]
  16 + public new string id { get; set; }
  17 + }
  18 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdJksyj/LqKdJksyjInfoOutput.cs
... ... @@ -56,6 +56,6 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
56 56 /// <summary>
57 57 /// 是否有效
58 58 /// </summary>
59   - public int IsEffective { get; set; }
  59 + public int isEffective { get; set; }
60 60 }
61 61 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbInfoOutput.cs
... ... @@ -134,33 +134,33 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
134 134 /// <summary>
135 135 /// 方案其他
136 136 /// </summary>
137   - public string F_FIleUrl { get; set; }
  137 + public string fileUrl { get; set; }
138 138  
139 139 /// <summary>
140 140 /// 是否有效
141 141 /// </summary>
142   - public int IsEffective { get; set; }
  142 + public int isEffective { get; set; }
143 143  
144 144 /// <summary>
145 145 /// 补缴开单ID
146 146 /// </summary>
147   - public string SupplementBillingId { get; set; }
  147 + public string supplementBillingId { get; set; }
148 148  
149 149 /// <summary>
150 150 /// 补缴金额
151 151 /// </summary>
152   - public decimal SupplementAmount { get; set; }
  152 + public decimal supplementAmount { get; set; }
153 153  
154 154 /// <summary>
155 155 /// 已缴欠款
156 156 /// </summary>
157   - public decimal PaidDebt { get; set; }
  157 + public decimal paidDebt { get; set; }
158 158  
159 159  
160 160 /// <summary>
161 161 /// 作废关联备注
162 162 /// </summary>
163   - public string CancelRefRemarks { get; set; }
  163 + public string cancelRefRemarks { get; set; }
164 164  
165 165 /// <summary>
166 166 /// 健康师业绩
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbListOutput.cs
... ... @@ -56,7 +56,7 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
56 56 /// <summary>
57 57 /// 已缴欠款
58 58 /// </summary>
59   - public decimal PaidDebt { get; set; }
  59 + public decimal paidDebt { get; set; }
60 60  
61 61 /// <summary>
62 62 /// 储扣方式
... ... @@ -126,22 +126,37 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
126 126 /// <summary>
127 127 /// 方案其他
128 128 /// </summary>
129   - public string F_FIleUrl { get; set; }
  129 + public string fileUrl { get; set; }
130 130  
131 131 /// <summary>
132 132 /// 是否有效
133 133 /// </summary>
134   - public int IsEffective { get; set; }
  134 + public int isEffective { get; set; }
135 135  
136 136 /// <summary>
137 137 /// 开单用户
138 138 /// </summary>
139   - public string CreateUser { get; set; }
  139 + public string createUser { get; set; }
  140 +
  141 + /// <summary>
  142 + /// 作废备注
  143 + /// </summary>
  144 + public string cancelRefRemarks { get; set; }
  145 +
  146 +
  147 + /// <summary>
  148 + /// 补缴开单ID
  149 + /// </summary>
  150 + public string supplementBillingId { get; set; }
  151 + /// <summary>
  152 + /// 补缴金额
  153 + /// </summary>
  154 + public decimal supplementAmount { get; set; }
140 155  
141 156 /// <summary>
142 157 /// 开单用户名称
143 158 /// </summary>
144   - public string CreateUserName { get; set; }
  159 + public string createUserName { get; set; }
145 160  
146 161 /// <summary>
147 162 /// 开单品项明细列表
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKjbsyj/LqKdKjbsyjInfoOutput.cs
... ... @@ -51,6 +51,6 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
51 51 /// <summary>
52 52 /// 是否有效
53 53 /// </summary>
54   - public int IsEffective { get; set; }
  54 + public int isEffective { get; set; }
55 55 }
56 56 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKqhzb/LqKqhzbCrInput.cs deleted
1   -using System;
2   -using System.Collections.Generic;
3   -
4   -namespace NCC.Extend.Entitys.Dto.LqKqhzb
5   -{
6   - /// <summary>
7   - /// 考勤汇总表修改输入参数
8   - /// </summary>
9   - public class LqKqhzbCrInput
10   - {
11   - /// <summary>
12   - /// 考勤编号
13   - /// </summary>
14   - public string id { get; set; }
15   -
16   - /// <summary>
17   - /// 门店编号
18   - /// </summary>
19   - public string mdbh { get; set; }
20   -
21   - /// <summary>
22   - /// 门店名称
23   - /// </summary>
24   - public string mdmc { get; set; }
25   -
26   - /// <summary>
27   - /// 职位
28   - /// </summary>
29   - public string zw { get; set; }
30   -
31   - /// <summary>
32   - /// 岗位分类1
33   - /// </summary>
34   - public string gwfl1 { get; set; }
35   -
36   - /// <summary>
37   - /// 员工编号
38   - /// </summary>
39   - public string ygbh { get; set; }
40   -
41   - /// <summary>
42   - /// 姓名
43   - /// </summary>
44   - public string xm { get; set; }
45   -
46   - /// <summary>
47   - /// 在职情况
48   - /// </summary>
49   - public string zzqk { get; set; }
50   -
51   - /// <summary>
52   - /// 岗位分类2
53   - /// </summary>
54   - public string gwfl2 { get; set; }
55   -
56   - /// <summary>
57   - /// 发放月份
58   - /// </summary>
59   - public string ffyf { get; set; }
60   -
61   - /// <summary>
62   - /// 在岗天数
63   - /// </summary>
64   - public string zgts { get; set; }
65   -
66   - /// <summary>
67   - /// 当月标准休息天数
68   - /// </summary>
69   - public string dybzxxts { get; set; }
70   -
71   - /// <summary>
72   - /// 实际休息天数
73   - /// </summary>
74   - public string sjxxts { get; set; }
75   -
76   - /// <summary>
77   - /// 休息
78   - /// </summary>
79   - public string xx { get; set; }
80   -
81   - /// <summary>
82   - /// 请假
83   - /// </summary>
84   - public string qj { get; set; }
85   -
86   - /// <summary>
87   - /// 福利假
88   - /// </summary>
89   - public string flj { get; set; }
90   -
91   - /// <summary>
92   - /// 丧假
93   - /// </summary>
94   - public string sj { get; set; }
95   -
96   - /// <summary>
97   - /// 年假
98   - /// </summary>
99   - public string nj { get; set; }
100   -
101   - /// <summary>
102   - /// 出勤
103   - /// </summary>
104   - public string cq { get; set; }
105   -
106   - /// <summary>
107   - /// 出勤加休息
108   - /// </summary>
109   - public string cqjxx { get; set; }
110   -
111   - /// <summary>
112   - /// 应休
113   - /// </summary>
114   - public string yx { get; set; }
115   -
116   - /// <summary>
117   - /// 不扣天数
118   - /// </summary>
119   - public string bkts { get; set; }
120   -
121   - /// <summary>
122   - /// 调减休息
123   - /// </summary>
124   - public string tjxx { get; set; }
125   -
126   - /// <summary>
127   - /// 实际请假
128   - /// </summary>
129   - public string sjqj { get; set; }
130   -
131   - /// <summary>
132   - /// 少休天数
133   - /// </summary>
134   - public string sxts { get; set; }
135   -
136   - /// <summary>
137   - /// 少休补贴
138   - /// </summary>
139   - public string sxbt { get; set; }
140   -
141   - /// <summary>
142   - /// 缺卡
143   - /// </summary>
144   - public string qk { get; set; }
145   -
146   - /// <summary>
147   - /// 迟到
148   - /// </summary>
149   - public string cd { get; set; }
150   -
151   - /// <summary>
152   - /// 全勤
153   - /// </summary>
154   - public string qq { get; set; }
155   -
156   - /// <summary>
157   - /// 交通补助
158   - /// </summary>
159   - public string jtbz { get; set; }
160   -
161   - /// <summary>
162   - /// 学习期扣款
163   - /// </summary>
164   - public string xxqkk { get; set; }
165   -
166   - /// <summary>
167   - /// 住宿
168   - /// </summary>
169   - public string zs { get; set; }
170   -
171   - /// <summary>
172   - /// 工作服
173   - /// </summary>
174   - public string gzf { get; set; }
175   -
176   - /// <summary>
177   - /// 手机押金
178   - /// </summary>
179   - public string sjyj { get; set; }
180   -
181   - /// <summary>
182   - /// 宿舍押金
183   - /// </summary>
184   - public string ssyj { get; set; }
185   -
186   - /// <summary>
187   - /// 其他奖励
188   - /// </summary>
189   - public string qtjl { get; set; }
190   -
191   - /// <summary>
192   - /// 保底已核算金额
193   - /// </summary>
194   - public string bdyhsje { get; set; }
195   -
196   - /// <summary>
197   - /// 当月培训
198   - /// </summary>
199   - public string dypx { get; set; }
200   -
201   - /// <summary>
202   - /// 当月交通补贴
203   - /// </summary>
204   - public string dyjtbt { get; set; }
205   -
206   - /// <summary>
207   - /// 应发上月
208   - /// </summary>
209   - public string yfsy { get; set; }
210   -
211   - /// <summary>
212   - /// 应发次月
213   - /// </summary>
214   - public string yfcy { get; set; }
215   -
216   - /// <summary>
217   - /// 在店天数
218   - /// </summary>
219   - public string zdts { get; set; }
220   -
221   - /// <summary>
222   - /// 跨月天数
223   - /// </summary>
224   - public string kyts { get; set; }
225   -
226   - /// <summary>
227   - /// 上月工资有
228   - /// </summary>
229   - public string sygzy { get; set; }
230   -
231   - /// <summary>
232   - /// 当月在店加正常休天数
233   - /// </summary>
234   - public string dyzdjzcxts { get; set; }
235   -
236   - /// <summary>
237   - /// 当月是否核算
238   - /// </summary>
239   - public string dysfhs { get; set; }
240   -
241   - }
242   -}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKqhzb/LqKqhzbInfoOutput.cs deleted
1   -using System;
2   -using System.Collections.Generic;
3   -
4   -namespace NCC.Extend.Entitys.Dto.LqKqhzb
5   -{
6   - /// <summary>
7   - /// 考勤汇总表输出参数
8   - /// </summary>
9   - public class LqKqhzbInfoOutput
10   - {
11   - /// <summary>
12   - /// 考勤编号
13   - /// </summary>
14   - public string id { get; set; }
15   -
16   - /// <summary>
17   - /// 门店编号
18   - /// </summary>
19   - public string mdbh { get; set; }
20   -
21   - /// <summary>
22   - /// 门店名称
23   - /// </summary>
24   - public string mdmc { get; set; }
25   -
26   - /// <summary>
27   - /// 职位
28   - /// </summary>
29   - public string zw { get; set; }
30   -
31   - /// <summary>
32   - /// 岗位分类1
33   - /// </summary>
34   - public string gwfl1 { get; set; }
35   -
36   - /// <summary>
37   - /// 员工编号
38   - /// </summary>
39   - public string ygbh { get; set; }
40   -
41   - /// <summary>
42   - /// 姓名
43   - /// </summary>
44   - public string xm { get; set; }
45   -
46   - /// <summary>
47   - /// 在职情况
48   - /// </summary>
49   - public string zzqk { get; set; }
50   -
51   - /// <summary>
52   - /// 岗位分类2
53   - /// </summary>
54   - public string gwfl2 { get; set; }
55   -
56   - /// <summary>
57   - /// 发放月份
58   - /// </summary>
59   - public string ffyf { get; set; }
60   -
61   - /// <summary>
62   - /// 在岗天数
63   - /// </summary>
64   - public string zgts { get; set; }
65   -
66   - /// <summary>
67   - /// 当月标准休息天数
68   - /// </summary>
69   - public string dybzxxts { get; set; }
70   -
71   - /// <summary>
72   - /// 实际休息天数
73   - /// </summary>
74   - public string sjxxts { get; set; }
75   -
76   - /// <summary>
77   - /// 休息
78   - /// </summary>
79   - public string xx { get; set; }
80   -
81   - /// <summary>
82   - /// 请假
83   - /// </summary>
84   - public string qj { get; set; }
85   -
86   - /// <summary>
87   - /// 福利假
88   - /// </summary>
89   - public string flj { get; set; }
90   -
91   - /// <summary>
92   - /// 丧假
93   - /// </summary>
94   - public string sj { get; set; }
95   -
96   - /// <summary>
97   - /// 年假
98   - /// </summary>
99   - public string nj { get; set; }
100   -
101   - /// <summary>
102   - /// 出勤
103   - /// </summary>
104   - public string cq { get; set; }
105   -
106   - /// <summary>
107   - /// 出勤加休息
108   - /// </summary>
109   - public string cqjxx { get; set; }
110   -
111   - /// <summary>
112   - /// 应休
113   - /// </summary>
114   - public string yx { get; set; }
115   -
116   - /// <summary>
117   - /// 不扣天数
118   - /// </summary>
119   - public string bkts { get; set; }
120   -
121   - /// <summary>
122   - /// 调减休息
123   - /// </summary>
124   - public string tjxx { get; set; }
125   -
126   - /// <summary>
127   - /// 实际请假
128   - /// </summary>
129   - public string sjqj { get; set; }
130   -
131   - /// <summary>
132   - /// 少休天数
133   - /// </summary>
134   - public string sxts { get; set; }
135   -
136   - /// <summary>
137   - /// 少休补贴
138   - /// </summary>
139   - public string sxbt { get; set; }
140   -
141   - /// <summary>
142   - /// 缺卡
143   - /// </summary>
144   - public string qk { get; set; }
145   -
146   - /// <summary>
147   - /// 迟到
148   - /// </summary>
149   - public string cd { get; set; }
150   -
151   - /// <summary>
152   - /// 全勤
153   - /// </summary>
154   - public string qq { get; set; }
155   -
156   - /// <summary>
157   - /// 交通补助
158   - /// </summary>
159   - public string jtbz { get; set; }
160   -
161   - /// <summary>
162   - /// 学习期扣款
163   - /// </summary>
164   - public string xxqkk { get; set; }
165   -
166   - /// <summary>
167   - /// 住宿
168   - /// </summary>
169   - public string zs { get; set; }
170   -
171   - /// <summary>
172   - /// 工作服
173   - /// </summary>
174   - public string gzf { get; set; }
175   -
176   - /// <summary>
177   - /// 手机押金
178   - /// </summary>
179   - public string sjyj { get; set; }
180   -
181   - /// <summary>
182   - /// 宿舍押金
183   - /// </summary>
184   - public string ssyj { get; set; }
185   -
186   - /// <summary>
187   - /// 其他奖励
188   - /// </summary>
189   - public string qtjl { get; set; }
190   -
191   - /// <summary>
192   - /// 保底已核算金额
193   - /// </summary>
194   - public string bdyhsje { get; set; }
195   -
196   - /// <summary>
197   - /// 当月培训
198   - /// </summary>
199   - public string dypx { get; set; }
200   -
201   - /// <summary>
202   - /// 当月交通补贴
203   - /// </summary>
204   - public string dyjtbt { get; set; }
205   -
206   - /// <summary>
207   - /// 应发上月
208   - /// </summary>
209   - public string yfsy { get; set; }
210   -
211   - /// <summary>
212   - /// 应发次月
213   - /// </summary>
214   - public string yfcy { get; set; }
215   -
216   - /// <summary>
217   - /// 在店天数
218   - /// </summary>
219   - public string zdts { get; set; }
220   -
221   - /// <summary>
222   - /// 跨月天数
223   - /// </summary>
224   - public string kyts { get; set; }
225   -
226   - /// <summary>
227   - /// 上月工资有
228   - /// </summary>
229   - public string sygzy { get; set; }
230   -
231   - /// <summary>
232   - /// 当月在店加正常休天数
233   - /// </summary>
234   - public string dyzdjzcxts { get; set; }
235   -
236   - /// <summary>
237   - /// 当月是否核算
238   - /// </summary>
239   - public string dysfhs { get; set; }
240   -
241   - }
242   -}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKqhzb/LqKqhzbListOutput.cs deleted
1   -using System;
2   -
3   -namespace NCC.Extend.Entitys.Dto.LqKqhzb
4   -{
5   - /// <summary>
6   - /// 考勤汇总表输入参数
7   - /// </summary>
8   - public class LqKqhzbListOutput
9   - {
10   - /// <summary>
11   - /// 考勤编号
12   - /// </summary>
13   - public string id { get; set; }
14   -
15   - /// <summary>
16   - /// 门店编号
17   - /// </summary>
18   - public string mdbh { get; set; }
19   -
20   - /// <summary>
21   - /// 门店名称
22   - /// </summary>
23   - public string mdmc { get; set; }
24   -
25   - /// <summary>
26   - /// 职位
27   - /// </summary>
28   - public string zw { get; set; }
29   -
30   - /// <summary>
31   - /// 岗位分类1
32   - /// </summary>
33   - public string gwfl1 { get; set; }
34   -
35   - /// <summary>
36   - /// 员工编号
37   - /// </summary>
38   - public string ygbh { get; set; }
39   -
40   - /// <summary>
41   - /// 姓名
42   - /// </summary>
43   - public string xm { get; set; }
44   -
45   - /// <summary>
46   - /// 在职情况
47   - /// </summary>
48   - public string zzqk { get; set; }
49   -
50   - /// <summary>
51   - /// 岗位分类2
52   - /// </summary>
53   - public string gwfl2 { get; set; }
54   -
55   - /// <summary>
56   - /// 发放月份
57   - /// </summary>
58   - public string ffyf { get; set; }
59   -
60   - /// <summary>
61   - /// 在岗天数
62   - /// </summary>
63   - public string zgts { get; set; }
64   -
65   - /// <summary>
66   - /// 当月标准休息天数
67   - /// </summary>
68   - public string dybzxxts { get; set; }
69   -
70   - /// <summary>
71   - /// 实际休息天数
72   - /// </summary>
73   - public string sjxxts { get; set; }
74   -
75   - /// <summary>
76   - /// 休息
77   - /// </summary>
78   - public string xx { get; set; }
79   -
80   - /// <summary>
81   - /// 请假
82   - /// </summary>
83   - public string qj { get; set; }
84   -
85   - /// <summary>
86   - /// 福利假
87   - /// </summary>
88   - public string flj { get; set; }
89   -
90   - /// <summary>
91   - /// 丧假
92   - /// </summary>
93   - public string sj { get; set; }
94   -
95   - /// <summary>
96   - /// 年假
97   - /// </summary>
98   - public string nj { get; set; }
99   -
100   - /// <summary>
101   - /// 出勤
102   - /// </summary>
103   - public string cq { get; set; }
104   -
105   - /// <summary>
106   - /// 出勤加休息
107   - /// </summary>
108   - public string cqjxx { get; set; }
109   -
110   - /// <summary>
111   - /// 应休
112   - /// </summary>
113   - public string yx { get; set; }
114   -
115   - /// <summary>
116   - /// 不扣天数
117   - /// </summary>
118   - public string bkts { get; set; }
119   -
120   - /// <summary>
121   - /// 调减休息
122   - /// </summary>
123   - public string tjxx { get; set; }
124   -
125   - /// <summary>
126   - /// 实际请假
127   - /// </summary>
128   - public string sjqj { get; set; }
129   -
130   - /// <summary>
131   - /// 少休天数
132   - /// </summary>
133   - public string sxts { get; set; }
134   -
135   - /// <summary>
136   - /// 少休补贴
137   - /// </summary>
138   - public string sxbt { get; set; }
139   -
140   - /// <summary>
141   - /// 缺卡
142   - /// </summary>
143   - public string qk { get; set; }
144   -
145   - /// <summary>
146   - /// 迟到
147   - /// </summary>
148   - public string cd { get; set; }
149   -
150   - /// <summary>
151   - /// 全勤
152   - /// </summary>
153   - public string qq { get; set; }
154   -
155   - /// <summary>
156   - /// 交通补助
157   - /// </summary>
158   - public string jtbz { get; set; }
159   -
160   - /// <summary>
161   - /// 学习期扣款
162   - /// </summary>
163   - public string xxqkk { get; set; }
164   -
165   - /// <summary>
166   - /// 住宿
167   - /// </summary>
168   - public string zs { get; set; }
169   -
170   - /// <summary>
171   - /// 工作服
172   - /// </summary>
173   - public string gzf { get; set; }
174   -
175   - /// <summary>
176   - /// 手机押金
177   - /// </summary>
178   - public string sjyj { get; set; }
179   -
180   - /// <summary>
181   - /// 宿舍押金
182   - /// </summary>
183   - public string ssyj { get; set; }
184   -
185   - /// <summary>
186   - /// 其他奖励
187   - /// </summary>
188   - public string qtjl { get; set; }
189   -
190   - /// <summary>
191   - /// 保底已核算金额
192   - /// </summary>
193   - public string bdyhsje { get; set; }
194   -
195   - /// <summary>
196   - /// 当月培训
197   - /// </summary>
198   - public string dypx { get; set; }
199   -
200   - /// <summary>
201   - /// 当月交通补贴
202   - /// </summary>
203   - public string dyjtbt { get; set; }
204   -
205   - /// <summary>
206   - /// 应发上月
207   - /// </summary>
208   - public string yfsy { get; set; }
209   -
210   - /// <summary>
211   - /// 应发次月
212   - /// </summary>
213   - public string yfcy { get; set; }
214   -
215   - /// <summary>
216   - /// 在店天数
217   - /// </summary>
218   - public string zdts { get; set; }
219   -
220   - /// <summary>
221   - /// 跨月天数
222   - /// </summary>
223   - public string kyts { get; set; }
224   -
225   - /// <summary>
226   - /// 上月工资有
227   - /// </summary>
228   - public string sygzy { get; set; }
229   -
230   - /// <summary>
231   - /// 当月在店加正常休天数
232   - /// </summary>
233   - public string dyzdjzcxts { get; set; }
234   -
235   - /// <summary>
236   - /// 当月是否核算
237   - /// </summary>
238   - public string dysfhs { get; set; }
239   -
240   - }
241   -}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKqhzb/LqKqhzbListQueryInput.cs deleted
1   -using NCC.Common.Filter;
2   -using System.Collections.Generic;
3   -
4   -namespace NCC.Extend.Entitys.Dto.LqKqhzb
5   -{
6   - /// <summary>
7   - /// 考勤汇总表列表查询输入
8   - /// </summary>
9   - public class LqKqhzbListQueryInput : PageInputBase
10   - {
11   - /// <summary>
12   - /// 选择导出数据key
13   - /// </summary>
14   - public string selectKey { get; set; }
15   -
16   - /// <summary>
17   - ///
18   - /// </summary>
19   - public int dataType { get; set; }
20   -
21   -
22   - /// <summary>
23   - /// 考勤编号
24   - /// </summary>
25   - public string id { get; set; }
26   -
27   - /// <summary>
28   - /// 门店编号
29   - /// </summary>
30   - public string mdbh { get; set; }
31   -
32   - /// <summary>
33   - /// 门店名称
34   - /// </summary>
35   - public string mdmc { get; set; }
36   -
37   - /// <summary>
38   - /// 职位
39   - /// </summary>
40   - public string zw { get; set; }
41   -
42   - /// <summary>
43   - /// 岗位分类1
44   - /// </summary>
45   - public string gwfl1 { get; set; }
46   -
47   - /// <summary>
48   - /// 员工编号
49   - /// </summary>
50   - public string ygbh { get; set; }
51   -
52   - /// <summary>
53   - /// 姓名
54   - /// </summary>
55   - public string xm { get; set; }
56   -
57   - /// <summary>
58   - /// 在职情况
59   - /// </summary>
60   - public string zzqk { get; set; }
61   -
62   - /// <summary>
63   - /// 岗位分类2
64   - /// </summary>
65   - public string gwfl2 { get; set; }
66   -
67   - /// <summary>
68   - /// 发放月份
69   - /// </summary>
70   - public string ffyf { get; set; }
71   -
72   - /// <summary>
73   - /// 在岗天数
74   - /// </summary>
75   - public string zgts { get; set; }
76   -
77   - /// <summary>
78   - /// 当月标准休息天数
79   - /// </summary>
80   - public string dybzxxts { get; set; }
81   -
82   - /// <summary>
83   - /// 实际休息天数
84   - /// </summary>
85   - public string sjxxts { get; set; }
86   -
87   - /// <summary>
88   - /// 休息
89   - /// </summary>
90   - public string xx { get; set; }
91   -
92   - /// <summary>
93   - /// 请假
94   - /// </summary>
95   - public string qj { get; set; }
96   -
97   - /// <summary>
98   - /// 福利假
99   - /// </summary>
100   - public string flj { get; set; }
101   -
102   - /// <summary>
103   - /// 丧假
104   - /// </summary>
105   - public string sj { get; set; }
106   -
107   - /// <summary>
108   - /// 年假
109   - /// </summary>
110   - public string nj { get; set; }
111   -
112   - /// <summary>
113   - /// 出勤
114   - /// </summary>
115   - public string cq { get; set; }
116   -
117   - /// <summary>
118   - /// 出勤加休息
119   - /// </summary>
120   - public string cqjxx { get; set; }
121   -
122   - /// <summary>
123   - /// 应休
124   - /// </summary>
125   - public string yx { get; set; }
126   -
127   - /// <summary>
128   - /// 不扣天数
129   - /// </summary>
130   - public string bkts { get; set; }
131   -
132   - /// <summary>
133   - /// 调减休息
134   - /// </summary>
135   - public string tjxx { get; set; }
136   -
137   - /// <summary>
138   - /// 实际请假
139   - /// </summary>
140   - public string sjqj { get; set; }
141   -
142   - /// <summary>
143   - /// 少休天数
144   - /// </summary>
145   - public string sxts { get; set; }
146   -
147   - /// <summary>
148   - /// 少休补贴
149   - /// </summary>
150   - public string sxbt { get; set; }
151   -
152   - /// <summary>
153   - /// 缺卡
154   - /// </summary>
155   - public string qk { get; set; }
156   -
157   - /// <summary>
158   - /// 迟到
159   - /// </summary>
160   - public string cd { get; set; }
161   -
162   - /// <summary>
163   - /// 全勤
164   - /// </summary>
165   - public string qq { get; set; }
166   -
167   - /// <summary>
168   - /// 交通补助
169   - /// </summary>
170   - public string jtbz { get; set; }
171   -
172   - /// <summary>
173   - /// 学习期扣款
174   - /// </summary>
175   - public string xxqkk { get; set; }
176   -
177   - /// <summary>
178   - /// 住宿
179   - /// </summary>
180   - public string zs { get; set; }
181   -
182   - /// <summary>
183   - /// 工作服
184   - /// </summary>
185   - public string gzf { get; set; }
186   -
187   - /// <summary>
188   - /// 手机押金
189   - /// </summary>
190   - public string sjyj { get; set; }
191   -
192   - /// <summary>
193   - /// 宿舍押金
194   - /// </summary>
195   - public string ssyj { get; set; }
196   -
197   - /// <summary>
198   - /// 其他奖励
199   - /// </summary>
200   - public string qtjl { get; set; }
201   -
202   - /// <summary>
203   - /// 保底已核算金额
204   - /// </summary>
205   - public string bdyhsje { get; set; }
206   -
207   - /// <summary>
208   - /// 当月培训
209   - /// </summary>
210   - public string dypx { get; set; }
211   -
212   - /// <summary>
213   - /// 当月交通补贴
214   - /// </summary>
215   - public string dyjtbt { get; set; }
216   -
217   - /// <summary>
218   - /// 应发上月
219   - /// </summary>
220   - public string yfsy { get; set; }
221   -
222   - /// <summary>
223   - /// 应发次月
224   - /// </summary>
225   - public string yfcy { get; set; }
226   -
227   - /// <summary>
228   - /// 在店天数
229   - /// </summary>
230   - public string zdts { get; set; }
231   -
232   - /// <summary>
233   - /// 跨月天数
234   - /// </summary>
235   - public string kyts { get; set; }
236   -
237   - /// <summary>
238   - /// 上月工资有
239   - /// </summary>
240   - public string sygzy { get; set; }
241   -
242   - /// <summary>
243   - /// 当月在店加正常休天数
244   - /// </summary>
245   - public string dyzdjzcxts { get; set; }
246   -
247   - /// <summary>
248   - /// 当月是否核算
249   - /// </summary>
250   - public string dysfhs { get; set; }
251   -
252   - }
253   -}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKqhzb/LqKqhzbUpInput.cs deleted
1   -using System;
2   -using System.Collections.Generic;
3   -
4   -namespace NCC.Extend.Entitys.Dto.LqKqhzb
5   -{
6   - /// <summary>
7   - /// 考勤汇总表更新输入参数
8   - /// </summary>
9   - public class LqKqhzbUpInput : LqKqhzbCrInput
10   - {
11   - /// <summary>
12   - /// 考勤编号
13   - /// </summary>
14   - public string id { get; set; }
15   -
16   - }
17   -}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlCrInput.cs
... ... @@ -12,97 +12,97 @@ namespace NCC.Extend.Entitys.Dto.LqXmzl
12 12 /// 主键
13 13 /// </summary>
14 14 public string id { get; set; }
15   -
  15 +
16 16 /// <summary>
17 17 /// 项目编号
18 18 /// </summary>
19 19 public string xmbh { get; set; }
20   -
  20 +
21 21 /// <summary>
22 22 /// 项目名称
23 23 /// </summary>
24 24 public string xmmc { get; set; }
25   -
  25 +
26 26 /// <summary>
27 27 /// 标准价格
28 28 /// </summary>
29 29 public decimal bzjg { get; set; }
30   -
  30 +
31 31 /// <summary>
32 32 /// 项目时长(分钟)
33 33 /// </summary>
34 34 public int? xmsc { get; set; }
35   -
  35 +
36 36 /// <summary>
37 37 /// 基础服务提成
38 38 /// </summary>
39 39 public decimal jcfwtc { get; set; }
40   -
  40 +
41 41 /// <summary>
42 42 /// 分类①-汇总表
43 43 /// </summary>
44 44 public string fl1 { get; set; }
45   -
  45 +
46 46 /// <summary>
47 47 /// 分类②-汇总表
48 48 /// </summary>
49 49 public string fl2 { get; set; }
50   -
  50 +
51 51 /// <summary>
52 52 /// 分类③-工资用
53 53 /// </summary>
54 54 public string fl3 { get; set; }
55   -
  55 +
56 56 /// <summary>
57 57 /// 分类④-统计品项用
58 58 /// </summary>
59 59 public string fl4 { get; set; }
60   -
  60 +
61 61 /// <summary>
62 62 /// 统计类别
63 63 /// </summary>
64 64 public string tjlb { get; set; }
65   -
  65 +
66 66 /// <summary>
67 67 /// 折扣类别
68 68 /// </summary>
69 69 public string zklb { get; set; }
70   -
  70 +
71 71 /// <summary>
72 72 /// 分类
73 73 /// </summary>
74 74 public string fl { get; set; }
75   -
  75 +
76 76 /// <summary>
77 77 /// 其它1
78 78 /// </summary>
79 79 public string qt1 { get; set; }
80   -
  80 +
81 81 /// <summary>
82 82 /// 其它2
83 83 /// </summary>
84 84 public string qt2 { get; set; }
85   -
  85 +
86 86 /// <summary>
87 87 /// 溯源金额
88 88 /// </summary>
89 89 public decimal? syje { get; set; }
90   -
  90 +
91 91 /// <summary>
92 92 /// Cell金额
93 93 /// </summary>
94 94 public decimal? cellje { get; set; }
95   -
  95 +
96 96 /// <summary>
97 97 /// 手工费
98 98 /// </summary>
99 99 public decimal? sgf { get; set; }
100   -
  100 +
101 101 /// <summary>
102 102 /// 项目次数
103 103 /// </summary>
104 104 public int? projectNumber { get; set; }
105   -
  105 +
106 106 /// <summary>
107 107 /// 来源类型
108 108 /// </summary>
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/README.md
... ... @@ -58,7 +58,7 @@
58 58 - `lq_jlmxb/` - 奖励明细表
59 59 - `lq_jsfa/` - 总经理经理核算方案
60 60 - `lq_khxx/` - 客户信息
61   -- `lq_kqhzb/` - 考勤汇总表
  61 +- (已删除) `lq_kqhzb/` - 考勤汇总表
62 62 - `lq_lssj/` - 历史数据
63 63 - `lq_sbtjb/` - 社保统计表
64 64 - `lq_skzh/` - 收款账号
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_attendance_summary/LqAttendanceSummaryEntity.cs 0 → 100644
  1 +using SqlSugar;
  2 +using System;
  3 +using NCC.Common.Enum;
  4 +
  5 +namespace NCC.Extend.Entitys.lq_attendance_summary
  6 +{
  7 + /// <summary>
  8 + /// 考勤汇总表
  9 + /// </summary>
  10 + [SugarTable("lq_attendance_summary")]
  11 + public class LqAttendanceSummaryEntity
  12 + {
  13 + /// <summary>
  14 + /// 考勤汇总ID
  15 + /// </summary>
  16 + [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
  17 + public string Id { get; set; }
  18 +
  19 + /// <summary>
  20 + /// 用户ID(员工ID)
  21 + /// </summary>
  22 + [SugarColumn(ColumnName = "F_UserId")]
  23 + public string UserId { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 年份
  27 + /// </summary>
  28 + [SugarColumn(ColumnName = "F_Year")]
  29 + public int Year { get; set; }
  30 +
  31 + /// <summary>
  32 + /// 月份
  33 + /// </summary>
  34 + [SugarColumn(ColumnName = "F_Month")]
  35 + public int Month { get; set; }
  36 +
  37 + /// <summary>
  38 + /// 员工状态(1-在职,2-离职,3-停薪留职)
  39 + /// </summary>
  40 + [SugarColumn(ColumnName = "F_EmployeeStatus")]
  41 + public int EmployeeStatus { get; set; }
  42 +
  43 + /// <summary>
  44 + /// 出勤天数
  45 + /// </summary>
  46 + [SugarColumn(ColumnName = "F_WorkDays", ColumnDataType = "decimal(5,2)")]
  47 + public decimal WorkDays { get; set; }
  48 +
  49 + /// <summary>
  50 + /// 请假天数
  51 + /// </summary>
  52 + [SugarColumn(ColumnName = "F_LeaveDays", ColumnDataType = "decimal(5,2)")]
  53 + public decimal LeaveDays { get; set; }
  54 +
  55 + /// <summary>
  56 + /// 休息天数
  57 + /// </summary>
  58 + [SugarColumn(ColumnName = "F_RestDays", ColumnDataType = "decimal(5,2)")]
  59 + public decimal RestDays { get; set; }
  60 +
  61 + /// <summary>
  62 + /// 备注
  63 + /// </summary>
  64 + [SugarColumn(ColumnName = "F_Remark", ColumnDataType = "varchar(2000)")]
  65 + public string Remark { get; set; }
  66 +
  67 + /// <summary>
  68 + /// 创建人ID
  69 + /// </summary>
  70 + [SugarColumn(ColumnName = "F_CreateUser")]
  71 + public string CreateUser { get; set; }
  72 +
  73 + /// <summary>
  74 + /// 创建时间
  75 + /// </summary>
  76 + [SugarColumn(ColumnName = "F_CreateTime")]
  77 + public DateTime CreateTime { get; set; }
  78 +
  79 + /// <summary>
  80 + /// 更新人ID
  81 + /// </summary>
  82 + [SugarColumn(ColumnName = "F_UpdateUser")]
  83 + public string UpdateUser { get; set; }
  84 +
  85 + /// <summary>
  86 + /// 更新时间
  87 + /// </summary>
  88 + [SugarColumn(ColumnName = "F_UpdateTime")]
  89 + public DateTime UpdateTime { get; set; }
  90 +
  91 + /// <summary>
  92 + /// 是否有效(1-有效,-1-无效)
  93 + /// </summary>
  94 + [SugarColumn(ColumnName = "F_IsEffective")]
  95 + public int IsEffective { get; set; }
  96 + }
  97 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kqhzb/LqKqhzbEntity.cs deleted
1   -using NCC.Common.Const;
2   -using SqlSugar;
3   -using System;
4   -
5   -namespace NCC.Extend.Entitys.lq_kqhzb
6   -{
7   - /// <summary>
8   - /// 考勤汇总表
9   - /// </summary>
10   - [SugarTable("lq_kqhzb")]
11   - [Tenant(ClaimConst.TENANT_ID)]
12   - public class LqKqhzbEntity
13   - {
14   - /// <summary>
15   - /// 考勤编号
16   - /// </summary>
17   - [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
18   - public string Id { get; set; }
19   -
20   - /// <summary>
21   - /// 门店编号
22   - /// </summary>
23   - [SugarColumn(ColumnName = "mdbh")]
24   - public string Mdbh { get; set; }
25   -
26   - /// <summary>
27   - /// 门店名称
28   - /// </summary>
29   - [SugarColumn(ColumnName = "mdmc")]
30   - public string Mdmc { get; set; }
31   -
32   - /// <summary>
33   - /// 职位
34   - /// </summary>
35   - [SugarColumn(ColumnName = "zw")]
36   - public string Zw { get; set; }
37   -
38   - /// <summary>
39   - /// 岗位分类1
40   - /// </summary>
41   - [SugarColumn(ColumnName = "gwfl1")]
42   - public string Gwfl1 { get; set; }
43   -
44   - /// <summary>
45   - /// 员工编号
46   - /// </summary>
47   - [SugarColumn(ColumnName = "ygbh")]
48   - public string Ygbh { get; set; }
49   -
50   - /// <summary>
51   - /// 姓名
52   - /// </summary>
53   - [SugarColumn(ColumnName = "xm")]
54   - public string Xm { get; set; }
55   -
56   - /// <summary>
57   - /// 在职情况
58   - /// </summary>
59   - [SugarColumn(ColumnName = "zzqk")]
60   - public string Zzqk { get; set; }
61   -
62   - /// <summary>
63   - /// 岗位分类2
64   - /// </summary>
65   - [SugarColumn(ColumnName = "gwfl2")]
66   - public string Gwfl2 { get; set; }
67   -
68   - /// <summary>
69   - /// 发放月份
70   - /// </summary>
71   - [SugarColumn(ColumnName = "ffyf")]
72   - public string Ffyf { get; set; }
73   -
74   - /// <summary>
75   - /// 在岗天数
76   - /// </summary>
77   - [SugarColumn(ColumnName = "zgts")]
78   - public string Zgts { get; set; }
79   -
80   - /// <summary>
81   - /// 当月标准休息天数
82   - /// </summary>
83   - [SugarColumn(ColumnName = "dybzxxts")]
84   - public string Dybzxxts { get; set; }
85   -
86   - /// <summary>
87   - /// 实际休息天数
88   - /// </summary>
89   - [SugarColumn(ColumnName = "sjxxts")]
90   - public string Sjxxts { get; set; }
91   -
92   - /// <summary>
93   - /// 休息
94   - /// </summary>
95   - [SugarColumn(ColumnName = "xx")]
96   - public string Xx { get; set; }
97   -
98   - /// <summary>
99   - /// 请假
100   - /// </summary>
101   - [SugarColumn(ColumnName = "qj")]
102   - public string Qj { get; set; }
103   -
104   - /// <summary>
105   - /// 福利假
106   - /// </summary>
107   - [SugarColumn(ColumnName = "flj")]
108   - public string Flj { get; set; }
109   -
110   - /// <summary>
111   - /// 丧假
112   - /// </summary>
113   - [SugarColumn(ColumnName = "sj")]
114   - public string Sj { get; set; }
115   -
116   - /// <summary>
117   - /// 年假
118   - /// </summary>
119   - [SugarColumn(ColumnName = "nj")]
120   - public string Nj { get; set; }
121   -
122   - /// <summary>
123   - /// 出勤
124   - /// </summary>
125   - [SugarColumn(ColumnName = "cq")]
126   - public string Cq { get; set; }
127   -
128   - /// <summary>
129   - /// 出勤加休息
130   - /// </summary>
131   - [SugarColumn(ColumnName = "cqjxx")]
132   - public string Cqjxx { get; set; }
133   -
134   - /// <summary>
135   - /// 应休
136   - /// </summary>
137   - [SugarColumn(ColumnName = "yx")]
138   - public string Yx { get; set; }
139   -
140   - /// <summary>
141   - /// 不扣天数
142   - /// </summary>
143   - [SugarColumn(ColumnName = "bkts")]
144   - public string Bkts { get; set; }
145   -
146   - /// <summary>
147   - /// 调减休息
148   - /// </summary>
149   - [SugarColumn(ColumnName = "tjxx")]
150   - public string Tjxx { get; set; }
151   -
152   - /// <summary>
153   - /// 实际请假
154   - /// </summary>
155   - [SugarColumn(ColumnName = "sjqj")]
156   - public string Sjqj { get; set; }
157   -
158   - /// <summary>
159   - /// 少休天数
160   - /// </summary>
161   - [SugarColumn(ColumnName = "sxts")]
162   - public string Sxts { get; set; }
163   -
164   - /// <summary>
165   - /// 少休补贴
166   - /// </summary>
167   - [SugarColumn(ColumnName = "sxbt")]
168   - public string Sxbt { get; set; }
169   -
170   - /// <summary>
171   - /// 缺卡
172   - /// </summary>
173   - [SugarColumn(ColumnName = "qk")]
174   - public string Qk { get; set; }
175   -
176   - /// <summary>
177   - /// 迟到
178   - /// </summary>
179   - [SugarColumn(ColumnName = "cd")]
180   - public string Cd { get; set; }
181   -
182   - /// <summary>
183   - /// 全勤
184   - /// </summary>
185   - [SugarColumn(ColumnName = "qq")]
186   - public string Qq { get; set; }
187   -
188   - /// <summary>
189   - /// 交通补助
190   - /// </summary>
191   - [SugarColumn(ColumnName = "jtbz")]
192   - public string Jtbz { get; set; }
193   -
194   - /// <summary>
195   - /// 学习期扣款
196   - /// </summary>
197   - [SugarColumn(ColumnName = "xxqkk")]
198   - public string Xxqkk { get; set; }
199   -
200   - /// <summary>
201   - /// 住宿
202   - /// </summary>
203   - [SugarColumn(ColumnName = "zs")]
204   - public string Zs { get; set; }
205   -
206   - /// <summary>
207   - /// 工作服
208   - /// </summary>
209   - [SugarColumn(ColumnName = "gzf")]
210   - public string Gzf { get; set; }
211   -
212   - /// <summary>
213   - /// 手机押金
214   - /// </summary>
215   - [SugarColumn(ColumnName = "sjyj")]
216   - public string Sjyj { get; set; }
217   -
218   - /// <summary>
219   - /// 宿舍押金
220   - /// </summary>
221   - [SugarColumn(ColumnName = "ssyj")]
222   - public string Ssyj { get; set; }
223   -
224   - /// <summary>
225   - /// 其他奖励
226   - /// </summary>
227   - [SugarColumn(ColumnName = "qtjl")]
228   - public string Qtjl { get; set; }
229   -
230   - /// <summary>
231   - /// 保底已核算金额
232   - /// </summary>
233   - [SugarColumn(ColumnName = "bdyhsje")]
234   - public string Bdyhsje { get; set; }
235   -
236   - /// <summary>
237   - /// 当月培训
238   - /// </summary>
239   - [SugarColumn(ColumnName = "dypx")]
240   - public string Dypx { get; set; }
241   -
242   - /// <summary>
243   - /// 当月交通补贴
244   - /// </summary>
245   - [SugarColumn(ColumnName = "dyjtbt")]
246   - public string Dyjtbt { get; set; }
247   -
248   - /// <summary>
249   - /// 应发上月
250   - /// </summary>
251   - [SugarColumn(ColumnName = "yfsy")]
252   - public string Yfsy { get; set; }
253   -
254   - /// <summary>
255   - /// 应发次月
256   - /// </summary>
257   - [SugarColumn(ColumnName = "yfcy")]
258   - public string Yfcy { get; set; }
259   -
260   - /// <summary>
261   - /// 在店天数
262   - /// </summary>
263   - [SugarColumn(ColumnName = "zdts")]
264   - public string Zdts { get; set; }
265   -
266   - /// <summary>
267   - /// 跨月天数
268   - /// </summary>
269   - [SugarColumn(ColumnName = "kyts")]
270   - public string Kyts { get; set; }
271   -
272   - /// <summary>
273   - /// 上月工资有
274   - /// </summary>
275   - [SugarColumn(ColumnName = "sygzy")]
276   - public string Sygzy { get; set; }
277   -
278   - /// <summary>
279   - /// 当月在店加正常休天数
280   - /// </summary>
281   - [SugarColumn(ColumnName = "dyzdjzcxts")]
282   - public string Dyzdjzcxts { get; set; }
283   -
284   - /// <summary>
285   - /// 当月是否核算
286   - /// </summary>
287   - [SugarColumn(ColumnName = "dysfhs")]
288   - public string Dysfhs { get; set; }
289   -
290   - }
291   -}
292 0 \ No newline at end of file
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Mapper/LqKqhzbMapper.cs deleted
1   -using NCC.Common.Helper;
2   -using NCC.Extend.Entitys.Dto.LqKqhzb;
3   -using Mapster;
4   -using System.Collections.Generic;
5   -
6   -namespace NCC.Extend.Entitys.Mapper.LqKqhzb
7   -{
8   - public class Mapper : IRegister
9   - {
10   - public void Register(TypeAdapterConfig config)
11   - {
12   - }
13   - }
14   -}
netcore/src/Modularity/Extend/NCC.Extend.Interfaces/ILqKqhzbService.cs deleted
1   -namespace NCC.Extend.Interfaces.LqKqhzb
2   -{
3   - public interface ILqKqhzbService
4   - {
5   - }
6   -}
7 0 \ No newline at end of file
netcore/src/Modularity/Extend/NCC.Extend.Interfaces/LqAttendanceSummary/ILqAttendanceSummaryService.cs 0 → 100644
  1 +using Microsoft.AspNetCore.Http;
  2 +using NCC.Dependency;
  3 +using NCC.Extend.Entitys.Dto.LqAttendanceSummary;
  4 +using System.Collections.Generic;
  5 +using System.Threading.Tasks;
  6 +
  7 +namespace NCC.Extend.Interfaces.LqAttendanceSummary
  8 +{
  9 + /// <summary>
  10 + /// 考勤汇总服务接口
  11 + /// </summary>
  12 + public interface ILqAttendanceSummaryService : ITransient
  13 + {
  14 + }
  15 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqAttendanceSummaryService.cs 0 → 100644
  1 +using System;
  2 +using System.Collections.Generic;
  3 +using System.IO;
  4 +using System.Linq;
  5 +using System.Threading.Tasks;
  6 +using Mapster;
  7 +using Microsoft.AspNetCore.Http;
  8 +using Microsoft.AspNetCore.Mvc;
  9 +using Microsoft.Extensions.Logging;
  10 +using NCC.Common.Core.Manager;
  11 +using NCC.Common.Enum;
  12 +using NCC.Common.Extension;
  13 +using NCC.Common.Filter;
  14 +using NCC.Common.Helper;
  15 +using NCC.Dependency;
  16 +using NCC.DynamicApiController;
  17 +using NCC.Extend.Entitys.Dto.LqAttendanceSummary;
  18 +using NCC.Extend.Entitys.Enum;
  19 +using NCC.Extend.Entitys.lq_attendance_summary;
  20 +using NCC.Extend.Interfaces.LqAttendanceSummary;
  21 +using NCC.FriendlyException;
  22 +using NCC.System.Entitys.Permission;
  23 +using SqlSugar;
  24 +using Yitter.IdGenerator;
  25 +
  26 +namespace NCC.Extend
  27 +{
  28 + /// <summary>
  29 + /// 考勤汇总服务
  30 + /// </summary>
  31 + [ApiDescriptionSettings(Tag = "绿纤考勤汇总服务", Name = "LqAttendanceSummary", Order = 200)]
  32 + [Route("api/Extend/[controller]")]
  33 + public class LqAttendanceSummaryService : ILqAttendanceSummaryService, IDynamicApiController, ITransient
  34 + {
  35 + private readonly ISqlSugarClient _db;
  36 + private readonly IUserManager _userManager;
  37 + private readonly ILogger<LqAttendanceSummaryService> _logger;
  38 +
  39 + /// <summary>
  40 + /// 构造函数
  41 + /// </summary>
  42 + /// <param name="db">数据库客户端</param>
  43 + /// <param name="userManager">用户管理器</param>
  44 + /// <param name="logger">日志记录器</param>
  45 + public LqAttendanceSummaryService(ISqlSugarClient db, IUserManager userManager, ILogger<LqAttendanceSummaryService> logger)
  46 + {
  47 + _db = db;
  48 + _userManager = userManager;
  49 + _logger = logger;
  50 + }
  51 +
  52 + #region 上传Excel文件导入考勤汇总数据
  53 + /// <summary>
  54 + /// 上传Excel文件导入考勤汇总数据
  55 + /// </summary>
  56 + /// <remarks>
  57 + /// 上传Excel文件批量导入考勤汇总数据
  58 + ///
  59 + /// Excel文件格式要求:
  60 + /// - 第一行必须是标题行
  61 + /// - 列顺序:员工姓名、员工电话、年份、月份、出勤天数、请假天数、休息天数、备注
  62 + /// - 支持.xlsx和.xls格式
  63 + ///
  64 + /// 示例请求:
  65 + /// POST /api/Extend/LqAttendanceSummary/ImportAttendanceDataFromExcel
  66 + /// Content-Type: multipart/form-data
  67 + ///
  68 + /// 参数说明:
  69 + /// - file: Excel文件(必填)
  70 + /// </remarks>
  71 + /// <param name="file">Excel文件</param>
  72 + /// <returns>导入结果</returns>
  73 + /// <response code="200">导入成功</response>
  74 + /// <response code="400">文件格式错误</response>
  75 + /// <response code="500">服务器错误</response>
  76 + [HttpPost("ImportAttendanceDataFromExcel")]
  77 + public async Task<dynamic> ImportAttendanceDataFromExcel(IFormFile file)
  78 + {
  79 + try
  80 + {
  81 + if (file == null || file.Length == 0)
  82 + {
  83 + throw NCCException.Oh("请选择要上传的Excel文件");
  84 + }
  85 +
  86 + // 检查文件格式
  87 + var allowedExtensions = new[] { ".xlsx", ".xls" };
  88 + var fileExtension = Path.GetExtension(file.FileName).ToLowerInvariant();
  89 + if (!allowedExtensions.Contains(fileExtension))
  90 + {
  91 + throw NCCException.Oh("只支持.xlsx和.xls格式的Excel文件");
  92 + }
  93 +
  94 + var importData = new List<LqAttendanceSummaryImportInput>();
  95 +
  96 + // 保存临时文件
  97 + var tempFilePath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + Path.GetExtension(file.FileName));
  98 + try
  99 + {
  100 + using (var stream = new FileStream(tempFilePath, FileMode.Create))
  101 + {
  102 + await file.CopyToAsync(stream);
  103 + }
  104 +
  105 + // 使用ExcelImportHelper读取Excel文件
  106 + var dataTable = ExcelImportHelper.ToDataTable(tempFilePath, 0, 0);
  107 +
  108 + if (dataTable.Rows.Count == 0)
  109 + {
  110 + throw NCCException.Oh("Excel文件中没有数据行");
  111 + }
  112 +
  113 + // 从第1行开始读取数据(跳过标题行)
  114 + for (int i = 1; i < dataTable.Rows.Count; i++)
  115 + {
  116 + try
  117 + {
  118 + var row = dataTable.Rows[i];
  119 + var employeeName = row[0]?.ToString()?.Trim();
  120 + var employeePhone = row[1]?.ToString()?.Trim();
  121 + var yearText = row[2]?.ToString()?.Trim();
  122 + var monthText = row[3]?.ToString()?.Trim();
  123 + var workDaysText = row[4]?.ToString()?.Trim();
  124 + var leaveDaysText = row[5]?.ToString()?.Trim();
  125 + var restDaysText = row[6]?.ToString()?.Trim();
  126 + var remark = row[7]?.ToString()?.Trim();
  127 +
  128 + // 跳过空行
  129 + if (string.IsNullOrEmpty(employeeName) && string.IsNullOrEmpty(employeePhone))
  130 + {
  131 + continue;
  132 + }
  133 +
  134 + // 验证必填字段
  135 + if (string.IsNullOrEmpty(employeeName))
  136 + {
  137 + throw new Exception($"第{i + 1}行:员工姓名不能为空");
  138 + }
  139 + if (string.IsNullOrEmpty(employeePhone))
  140 + {
  141 + throw new Exception($"第{i + 1}行:员工电话不能为空");
  142 + }
  143 +
  144 + // 解析数值字段
  145 + if (!int.TryParse(yearText, out int year))
  146 + {
  147 + throw new Exception($"第{i + 1}行:年份格式错误");
  148 + }
  149 + if (!int.TryParse(monthText, out int month))
  150 + {
  151 + throw new Exception($"第{i + 1}行:月份格式错误");
  152 + }
  153 +
  154 + decimal.TryParse(workDaysText, out decimal workDays);
  155 + decimal.TryParse(leaveDaysText, out decimal leaveDays);
  156 + decimal.TryParse(restDaysText, out decimal restDays);
  157 +
  158 + var item = new LqAttendanceSummaryImportInput
  159 + {
  160 + EmployeeName = employeeName,
  161 + EmployeePhone = employeePhone,
  162 + Year = year,
  163 + Month = month,
  164 + WorkDays = workDays,
  165 + LeaveDays = leaveDays,
  166 + RestDays = restDays,
  167 + Remark = remark
  168 + };
  169 +
  170 + importData.Add(item);
  171 + }
  172 + catch (Exception ex)
  173 + {
  174 + throw new Exception($"第{i + 1}行数据解析失败: {ex.Message}");
  175 + }
  176 + }
  177 + }
  178 + finally
  179 + {
  180 + // 清理临时文件
  181 + if (File.Exists(tempFilePath))
  182 + {
  183 + File.Delete(tempFilePath);
  184 + }
  185 + }
  186 +
  187 + if (!importData.Any())
  188 + {
  189 + throw NCCException.Oh("Excel文件中没有有效的数据行");
  190 + }
  191 +
  192 + // 处理导入数据
  193 + return await ProcessImportData(importData);
  194 + }
  195 + catch (Exception ex)
  196 + {
  197 + _logger.LogError(ex, "上传Excel文件导入考勤汇总数据失败");
  198 + throw NCCException.Oh($"上传Excel文件导入考勤汇总数据失败: {ex.Message}");
  199 + }
  200 + }
  201 + #endregion
  202 +
  203 + #region 处理导入数据
  204 + /// <summary>
  205 + /// 处理导入数据
  206 + /// </summary>
  207 + /// <param name="importData">导入数据列表</param>
  208 + /// <returns>导入结果</returns>
  209 + private async Task<dynamic> ProcessImportData(List<LqAttendanceSummaryImportInput> importData)
  210 + {
  211 + var successCount = 0;
  212 + var failCount = 0;
  213 + var errorMessages = new List<string>();
  214 + var entitiesToInsert = new List<LqAttendanceSummaryEntity>();
  215 + var entitiesToUpdate = new List<LqAttendanceSummaryEntity>();
  216 +
  217 + foreach (var item in importData)
  218 + {
  219 + try
  220 + {
  221 + // 1. 根据员工姓名和电话查找用户ID
  222 + var user = await _db.Queryable<UserEntity>()
  223 + .Where(u => u.RealName == item.EmployeeName && u.MobilePhone == item.EmployeePhone)
  224 + .FirstAsync();
  225 +
  226 + if (user == null)
  227 + {
  228 + errorMessages.Add($"员工 {item.EmployeeName}({item.EmployeePhone}) 不存在");
  229 + failCount++;
  230 + continue;
  231 + }
  232 +
  233 + // 2. 检查是否已存在相同记录
  234 + var existingRecord = await _db.Queryable<LqAttendanceSummaryEntity>()
  235 + .Where(a => a.UserId == user.Id && a.Year == item.Year && a.Month == item.Month)
  236 + .FirstAsync();
  237 +
  238 + if (existingRecord != null)
  239 + {
  240 + // 更新现有记录
  241 + existingRecord.EmployeeStatus = 1; // 默认在职
  242 + existingRecord.WorkDays = item.WorkDays;
  243 + existingRecord.LeaveDays = item.LeaveDays;
  244 + existingRecord.RestDays = item.RestDays;
  245 + existingRecord.Remark = item.Remark;
  246 + existingRecord.UpdateUser = _userManager.UserId;
  247 + existingRecord.UpdateTime = DateTime.Now;
  248 + entitiesToUpdate.Add(existingRecord);
  249 + }
  250 + else
  251 + {
  252 + // 创建新记录
  253 + var entity = new LqAttendanceSummaryEntity
  254 + {
  255 + Id = YitIdHelper.NextId().ToString(),
  256 + UserId = user.Id,
  257 + Year = item.Year,
  258 + Month = item.Month,
  259 + EmployeeStatus = 1, // 默认在职
  260 + WorkDays = item.WorkDays,
  261 + LeaveDays = item.LeaveDays,
  262 + RestDays = item.RestDays,
  263 + Remark = item.Remark,
  264 + CreateUser = _userManager.UserId,
  265 + CreateTime = DateTime.Now,
  266 + UpdateUser = _userManager.UserId,
  267 + UpdateTime = DateTime.Now,
  268 + IsEffective = 1
  269 + };
  270 + entitiesToInsert.Add(entity);
  271 + }
  272 +
  273 + successCount++;
  274 + }
  275 + catch (Exception ex)
  276 + {
  277 + errorMessages.Add($"处理员工 {item.EmployeeName} 数据失败: {ex.Message}");
  278 + failCount++;
  279 + _logger.LogError(ex, $"导入考勤数据失败 - 员工: {item.EmployeeName}");
  280 + }
  281 + }
  282 +
  283 + // 批量插入和更新
  284 + if (entitiesToInsert.Any())
  285 + {
  286 + await _db.Insertable(entitiesToInsert).ExecuteCommandAsync();
  287 + }
  288 +
  289 + if (entitiesToUpdate.Any())
  290 + {
  291 + await _db.Updateable(entitiesToUpdate).ExecuteCommandAsync();
  292 + }
  293 +
  294 + return new
  295 + {
  296 + success = true,
  297 + message = "导入完成",
  298 + data = new
  299 + {
  300 + totalCount = importData.Count,
  301 + successCount = successCount,
  302 + failCount = failCount,
  303 + insertCount = entitiesToInsert.Count,
  304 + updateCount = entitiesToUpdate.Count,
  305 + errorMessages = errorMessages
  306 + }
  307 + };
  308 + }
  309 + #endregion
  310 +
  311 + #region 获取考勤汇总列表
  312 + /// <summary>
  313 + /// 获取考勤汇总列表
  314 + /// </summary>
  315 + /// <param name="input">请求参数</param>
  316 + /// <returns></returns>
  317 + [HttpGet("")]
  318 + public async Task<dynamic> GetList([FromQuery] LqAttendanceSummaryListQueryInput input)
  319 + {
  320 + var sidx = input.sidx == null ? "id" : input.sidx;
  321 + var sord = input.sort == null ? "desc" : input.sort;
  322 + var data = await _db.Queryable<LqAttendanceSummaryEntity>()
  323 + .Where(a => a.IsEffective == StatusEnum.有效.GetHashCode())
  324 + .WhereIF(!string.IsNullOrEmpty(input.UserId), a => a.UserId == input.UserId)
  325 + .WhereIF(input.Year.HasValue, a => a.Year == input.Year)
  326 + .WhereIF(input.Month.HasValue, a => a.Month == input.Month)
  327 + .WhereIF(input.EmployeeStatus.HasValue, a => a.EmployeeStatus == input.EmployeeStatus)
  328 + .Select(a => new LqAttendanceSummaryListOutput
  329 + {
  330 + id = a.Id,
  331 + userId = a.UserId,
  332 + userName = SqlFunc.Subqueryable<UserEntity>().Where(u => u.Id == a.UserId).Select(u => u.RealName),
  333 + year = a.Year,
  334 + month = a.Month,
  335 + employeeStatus = a.EmployeeStatus,
  336 + workDays = a.WorkDays,
  337 + leaveDays = a.LeaveDays,
  338 + restDays = a.RestDays,
  339 + remark = a.Remark,
  340 + createUser = a.CreateUser,
  341 + createUserName = SqlFunc.Subqueryable<UserEntity>().Where(u => u.Id == a.CreateUser).Select(u => u.RealName),
  342 + createTime = a.CreateTime,
  343 + updateUser = a.UpdateUser,
  344 + updateUserName = SqlFunc.Subqueryable<UserEntity>().Where(u => u.Id == a.UpdateUser).Select(u => u.RealName),
  345 + updateTime = a.UpdateTime,
  346 + isEffective = a.IsEffective,
  347 + })
  348 + .MergeTable()
  349 + .OrderBy(sidx + " " + input.sort)
  350 + .ToPagedListAsync(input.currentPage, input.pageSize);
  351 + return PageResult<LqAttendanceSummaryListOutput>.SqlSugarPageResult(data);
  352 + }
  353 + #endregion
  354 +
  355 + #region 清空某一个月的数据
  356 +
  357 + #endregion
  358 + }
  359 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs
... ... @@ -240,15 +240,17 @@ namespace NCC.Extend.LqKdKdjlb
240 240 khly = it.Khly,
241 241 tjr = it.Tjr,
242 242 deductAmount = it.DeductAmount,
  243 + paidDebt = it.PaidDebt,
  244 + supplementBillingId = it.SupplementBillingId,
243 245 sfskdd = it.Sfskdd,
244 246 jj = it.Jj,
245 247 bz = it.Bz,
246 248 kdhy = it.Kdhy,
247 249 kdhyc = SqlFunc.Subqueryable<LqKhxxEntity>().Where(x => x.Id == it.Kdhy).Select(x => x.Khmc),
248 250 kdhysjh = SqlFunc.Subqueryable<LqKhxxEntity>().Where(x => x.Id == it.Kdhy).Select(x => x.Sjh),
249   - IsEffective = it.IsEffective,
250   - CreateUser = it.CreateUser,
251   - CreateUserName = SqlFunc.Subqueryable<UserEntity>().Where(x => x.Id == it.CreateUser).Select(x => x.RealName),
  251 + isEffective = it.IsEffective,
  252 + createUser = it.CreateUser,
  253 + createUserName = SqlFunc.Subqueryable<UserEntity>().Where(x => x.Id == it.CreateUser).Select(x => x.RealName),
252 254 })
253 255 .MergeTable()
254 256 .OrderBy(sidx + " " + input.sort)
... ... @@ -361,8 +363,8 @@ namespace NCC.Extend.LqKdKdjlb
361 363 //然后对之前的开单表的补缴金额进行累加
362 364 //需要判断补缴金额是否超过欠款金额,只记录应缴金额
363 365 var supplementAmount = supplementBillingEntity.Qk - supplementBillingEntity.PaidDebt;
364   - entity.PaidDebt += input.supplementAmount > supplementAmount ? supplementAmount : input.supplementAmount;
365   - await _db.Updateable(entity).ExecuteCommandAsync();
  366 + supplementBillingEntity.PaidDebt += input.supplementAmount > supplementAmount ? supplementAmount : input.supplementAmount;
  367 + await _db.Updateable(supplementBillingEntity).ExecuteCommandAsync();
366 368 }
367 369  
368 370 //新增开单记录表记录
... ... @@ -806,7 +808,7 @@ namespace NCC.Extend.LqKdKdjlb
806 808 kdhy = it.Kdhy,
807 809 kdhyc = it.Kdhyc,
808 810 kdhysjh = it.Kdhysjh,
809   - F_FIleUrl = it.F_FIleUrl,
  811 + fileUrl = it.F_FIleUrl,
810 812 })
811 813 .MergeTable()
812 814 .OrderBy(sidx + " " + input.sort)
... ... @@ -895,22 +897,26 @@ namespace NCC.Extend.LqKdKdjlb
895 897 //批量删除开单记录表
896 898 await _db.Deleteable<LqKdKdjlbEntity>().In(d => d.Id, ids).ExecuteCommandAsync();
897 899  
898   - //清空子表数据
  900 + //清空健康师业绩
899 901 await _db.Deleteable<LqKdJksyjEntity>().In(u => u.Glkdbh, ids).ExecuteCommandAsync();
900 902  
901   - //清空子表数据
  903 + //清空科技部老师业绩
902 904 await _db.Deleteable<LqKdKjbsyjEntity>().In(u => u.Glkdbh, ids).ExecuteCommandAsync();
903 905  
904   - //清空子表数据
  906 + //清空品项明细
905 907 await _db.Deleteable<LqKdPxmxEntity>().In(u => u.Glkdbh, ids).ExecuteCommandAsync();
  908 +
  909 + //清空扣款信息
  910 + await _db.Deleteable<LqKdDeductinfoEntity>().In(u => u.BillingId, ids).ExecuteCommandAsync();
  911 +
906 912 //关闭事务
907 913 _db.CommitTran();
908 914 }
909   - catch (Exception)
  915 + catch (Exception ex)
910 916 {
911 917 //回滚事务
912 918 _db.RollbackTran();
913   - throw NCCException.Oh(ErrorCode.COM1002);
  919 + throw NCCException.Oh($"批量删除开单记录表失败: {ex.Message}");
914 920 }
915 921 }
916 922 }
... ... @@ -1113,23 +1119,26 @@ namespace NCC.Extend.LqKdKdjlb
1113 1119 //删除开单记录表记录
1114 1120 await _db.Deleteable<LqKdKdjlbEntity>().Where(d => d.Id == id).ExecuteCommandAsync();
1115 1121  
1116   - //清空子表数据
  1122 + //清空健康师业绩
1117 1123 await _db.Deleteable<LqKdJksyjEntity>().Where(u => u.Glkdbh == id).ExecuteCommandAsync();
1118 1124  
1119   - //清空子表数据
  1125 + //清空科技部老师业绩
1120 1126 await _db.Deleteable<LqKdKjbsyjEntity>().Where(u => u.Glkdbh == id).ExecuteCommandAsync();
1121 1127  
1122   - //清空子表数据
  1128 + //清空品项明细
1123 1129 await _db.Deleteable<LqKdPxmxEntity>().Where(u => u.Glkdbh == id).ExecuteCommandAsync();
1124 1130  
  1131 + //清空扣款信息
  1132 + await _db.Deleteable<LqKdDeductinfoEntity>().Where(u => u.BillingId == id).ExecuteCommandAsync();
  1133 +
1125 1134 //关闭事务
1126 1135 _db.CommitTran();
1127 1136 }
1128   - catch (Exception)
  1137 + catch (Exception ex)
1129 1138 {
1130 1139 //回滚事务
1131 1140 _db.RollbackTran();
1132   - throw NCCException.Oh(ErrorCode.COM1002);
  1141 + throw NCCException.Oh($"删除开单记录表失败: {ex.Message}");
1133 1142 }
1134 1143 }
1135 1144 #endregion
... ... @@ -1211,8 +1220,23 @@ namespace NCC.Extend.LqKdKdjlb
1211 1220 }
1212 1221 //开启事务
1213 1222 _db.BeginTran();
  1223 + //查询是否有对应的补缴开单ID
  1224 + if (!string.IsNullOrEmpty(entity.SupplementBillingId))
  1225 + {
  1226 + //查询补缴开单ID
  1227 + var supplementBillingEntity = await _db.Queryable<LqKdKdjlbEntity>().FirstAsync(p => p.Id == entity.SupplementBillingId);//900,900
  1228 + if (supplementBillingEntity == null || supplementBillingEntity.IsEffective == StatusEnum.无效.GetHashCode())
  1229 + {
  1230 + throw NCCException.Oh("补缴开单记录不存在或已作废");
  1231 + }
  1232 + //查询当前开单已经补缴金额
  1233 + var OldSupplementAmount = await _db.Queryable<LqKdKdjlbEntity>().Where(p => p.Id == id).SumAsync(p => p.SupplementAmount);//900,0
  1234 + supplementBillingEntity.PaidDebt = supplementBillingEntity.PaidDebt - OldSupplementAmount + input.supplementAmount;
  1235 + await _db.Updateable(supplementBillingEntity).ExecuteCommandAsync();
  1236 + }
1214 1237 // 更新开单记录主表
1215 1238 await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).IgnoreColumns(x => x.CreateTime).ExecuteCommandAsync();
  1239 +
1216 1240 //清空原有品项明细
1217 1241 await _db.Deleteable<LqKdPxmxEntity>().Where(x => x.Glkdbh == id).ExecuteCommandAsync();
1218 1242 //清空原有健康师业绩
... ... @@ -1434,6 +1458,16 @@ namespace NCC.Extend.LqKdKdjlb
1434 1458 // 标记开单_储扣详细表为无效
1435 1459 await _db.Updateable<LqKdDeductinfoEntity>().SetColumns(it => new LqKdDeductinfoEntity { IsEffective = StatusEnum.无效.GetHashCode() }).Where(it => it.BillingId == input.Id).ExecuteCommandAsync();
1436 1460  
  1461 + //如果存在补缴开单ID,则将补缴开单ID的IsEffective设置为无效
  1462 + if (!string.IsNullOrEmpty(entity.SupplementBillingId))
  1463 + {
  1464 + var supplementBillingEntity = await _db.Queryable<LqKdKdjlbEntity>().FirstAsync(p => p.Id == entity.SupplementBillingId);
  1465 + if (supplementBillingEntity != null && supplementBillingEntity.IsEffective == StatusEnum.有效.GetHashCode())
  1466 + {
  1467 + supplementBillingEntity.PaidDebt = supplementBillingEntity.PaidDebt - entity.SupplementAmount;
  1468 + await _db.Updateable(supplementBillingEntity).ExecuteCommandAsync();
  1469 + }
  1470 + }
1437 1471 //关闭事务
1438 1472 _db.CommitTran();
1439 1473 }
... ... @@ -1683,7 +1717,7 @@ namespace NCC.Extend.LqKdKdjlb
1683 1717 sfyj = it.Sfyj,
1684 1718 qk = it.Qk,
1685 1719 ckfs = it.Ckfs,
1686   - PaidDebt = it.PaidDebt,
  1720 + paidDebt = it.PaidDebt,
1687 1721 fkfs = it.Fkfs,
1688 1722 fkyy = it.Fkyy,
1689 1723 fkpd = it.Fkpd,
... ... @@ -1696,9 +1730,9 @@ namespace NCC.Extend.LqKdKdjlb
1696 1730 kdhy = it.Kdhy,
1697 1731 kdhyc = SqlFunc.Subqueryable<LqKhxxEntity>().Where(x => x.Id == it.Kdhy).Select(x => x.Khmc),
1698 1732 kdhysjh = SqlFunc.Subqueryable<LqKhxxEntity>().Where(x => x.Id == it.Kdhy).Select(x => x.Sjh),
1699   - IsEffective = it.IsEffective,
1700   - CreateUser = it.CreateUser,
1701   - CreateUserName = SqlFunc.Subqueryable<UserEntity>().Where(x => x.Id == it.CreateUser).Select(x => x.RealName),
  1733 + isEffective = it.IsEffective,
  1734 + createUser = it.CreateUser,
  1735 + createUserName = SqlFunc.Subqueryable<UserEntity>().Where(x => x.Id == it.CreateUser).Select(x => x.RealName),
1702 1736 })
1703 1737 .MergeTable()
1704 1738 .OrderBy(sidx + " " + sort)
... ... @@ -1780,9 +1814,9 @@ namespace NCC.Extend.LqKdKdjlb
1780 1814 kdhy = it.Kdhy,
1781 1815 kdhyc = SqlFunc.Subqueryable<LqKhxxEntity>().Where(x => x.Id == it.Kdhy).Select(x => x.Khmc),
1782 1816 kdhysjh = SqlFunc.Subqueryable<LqKhxxEntity>().Where(x => x.Id == it.Kdhy).Select(x => x.Sjh),
1783   - IsEffective = it.IsEffective,
1784   - CreateUser = it.CreateUser,
1785   - CreateUserName = SqlFunc.Subqueryable<UserEntity>().Where(x => x.Id == it.CreateUser).Select(x => x.RealName),
  1817 + isEffective = it.IsEffective,
  1818 + createUser = it.CreateUser,
  1819 + createUserName = SqlFunc.Subqueryable<UserEntity>().Where(x => x.Id == it.CreateUser).Select(x => x.RealName),
1786 1820 })
1787 1821 .MergeTable()
1788 1822 .OrderBy(sidx + " " + input.sort)
... ... @@ -1837,6 +1871,31 @@ namespace NCC.Extend.LqKdKdjlb
1837 1871 }
1838 1872 #endregion
1839 1873  
  1874 + #region 根据开单id获取当前开单欠款信息
  1875 + /// <summary>
  1876 + /// 根据开单id获取当前开单欠款信息
  1877 + /// </summary>
  1878 + /// <param name="billingId">开单记录ID</param>
  1879 + /// <returns>当前开单欠款信息</returns>
  1880 + [HttpGet("GetBillingDebtInfo/{billingId}")]
  1881 + public async Task<dynamic> GetBillingDebtInfoByBillingId(string billingId)
  1882 + {
  1883 + //返回 整单金额、实付金额、欠款金额、已缴欠款金额
  1884 + var entity = await _db.Queryable<LqKdKdjlbEntity>().FirstAsync(p => p.Id == billingId);
  1885 + if (entity == null)
  1886 + {
  1887 + throw NCCException.Oh("开单记录不存在");
  1888 + }
  1889 + return new
  1890 + {
  1891 + zdyj = entity.Zdyj,
  1892 + sfyj = entity.Sfyj,
  1893 + qk = entity.Qk,
  1894 + PaidDebt = entity.PaidDebt,
  1895 + };
  1896 + }
  1897 + #endregion
  1898 +
1840 1899 #region 私有方法
1841 1900 /// <summary>
1842 1901 /// 检查开单记录是否可以操作
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqKqhzbService.cs deleted
1   -using NCC.Common.Core.Manager;
2   -using NCC.Common.Enum;
3   -using NCC.Common.Extension;
4   -using NCC.Common.Filter;
5   -using NCC.Dependency;
6   -using NCC.DynamicApiController;
7   -using NCC.FriendlyException;
8   -using NCC.Extend.Interfaces.LqKqhzb;
9   -using Mapster;
10   -using Microsoft.AspNetCore.Mvc;
11   -using SqlSugar;
12   -using System;
13   -using System.Collections.Generic;
14   -using System.Linq;
15   -using System.Threading.Tasks;
16   -using NCC.Extend.Entitys.lq_kqhzb;
17   -using NCC.Extend.Entitys.Dto.LqKqhzb;
18   -using Yitter.IdGenerator;
19   -using NCC.Common.Helper;
20   -using NCC.JsonSerialization;
21   -using NCC.Common.Model.NPOI;
22   -using NCC.Common.Configuration;
23   -using NCC.DataEncryption;
24   -using NCC.ClayObject;
25   -
26   -namespace NCC.Extend.LqKqhzb
27   -{
28   - /// <summary>
29   - /// 考勤汇总表服务
30   - /// </summary>
31   - [ApiDescriptionSettings(Tag = "Extend",Name = "LqKqhzb", Order = 200)]
32   - [Route("api/Extend/[controller]")]
33   - public class LqKqhzbService : ILqKqhzbService, IDynamicApiController, ITransient
34   - {
35   - private readonly ISqlSugarRepository<LqKqhzbEntity> _lqKqhzbRepository;
36   - private readonly SqlSugarScope _db;
37   - private readonly IUserManager _userManager;
38   -
39   - /// <summary>
40   - /// 初始化一个<see cref="LqKqhzbService"/>类型的新实例
41   - /// </summary>
42   - public LqKqhzbService(
43   - ISqlSugarRepository<LqKqhzbEntity> lqKqhzbRepository,
44   - IUserManager userManager)
45   - {
46   - _lqKqhzbRepository = lqKqhzbRepository;
47   - _db = _lqKqhzbRepository.Context;
48   - _userManager = userManager;
49   - }
50   -
51   - /// <summary>
52   - /// 获取考勤汇总表
53   - /// </summary>
54   - /// <param name="id">参数</param>
55   - /// <returns></returns>
56   - [HttpGet("{id}")]
57   - public async Task<dynamic> GetInfo(string id)
58   - {
59   - var entity = await _db.Queryable<LqKqhzbEntity>().FirstAsync(p => p.Id == id);
60   - var output = entity.Adapt<LqKqhzbInfoOutput>();
61   - return output;
62   - }
63   -
64   - /// <summary>
65   - /// 获取考勤汇总表列表
66   - /// </summary>
67   - /// <param name="input">请求参数</param>
68   - /// <returns></returns>
69   - [HttpGet("")]
70   - public async Task<dynamic> GetList([FromQuery] LqKqhzbListQueryInput input)
71   - {
72   - var sidx = input.sidx == null ? "id" : input.sidx;
73   - var data = await _db.Queryable<LqKqhzbEntity>()
74   - .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
75   - .WhereIF(!string.IsNullOrEmpty(input.mdbh), p => p.Mdbh.Contains(input.mdbh))
76   - .WhereIF(!string.IsNullOrEmpty(input.mdmc), p => p.Mdmc.Contains(input.mdmc))
77   - .WhereIF(!string.IsNullOrEmpty(input.zw), p => p.Zw.Contains(input.zw))
78   - .WhereIF(!string.IsNullOrEmpty(input.gwfl1), p => p.Gwfl1.Contains(input.gwfl1))
79   - .WhereIF(!string.IsNullOrEmpty(input.ygbh), p => p.Ygbh.Contains(input.ygbh))
80   - .WhereIF(!string.IsNullOrEmpty(input.xm), p => p.Xm.Contains(input.xm))
81   - .WhereIF(!string.IsNullOrEmpty(input.zzqk), p => p.Zzqk.Contains(input.zzqk))
82   - .WhereIF(!string.IsNullOrEmpty(input.gwfl2), p => p.Gwfl2.Contains(input.gwfl2))
83   - .WhereIF(!string.IsNullOrEmpty(input.ffyf), p => p.Ffyf.Contains(input.ffyf))
84   - .WhereIF(!string.IsNullOrEmpty(input.zgts), p => p.Zgts.Contains(input.zgts))
85   - .WhereIF(!string.IsNullOrEmpty(input.dybzxxts), p => p.Dybzxxts.Contains(input.dybzxxts))
86   - .WhereIF(!string.IsNullOrEmpty(input.sjxxts), p => p.Sjxxts.Contains(input.sjxxts))
87   - .WhereIF(!string.IsNullOrEmpty(input.xx), p => p.Xx.Contains(input.xx))
88   - .WhereIF(!string.IsNullOrEmpty(input.qj), p => p.Qj.Contains(input.qj))
89   - .WhereIF(!string.IsNullOrEmpty(input.flj), p => p.Flj.Contains(input.flj))
90   - .WhereIF(!string.IsNullOrEmpty(input.sj), p => p.Sj.Contains(input.sj))
91   - .WhereIF(!string.IsNullOrEmpty(input.nj), p => p.Nj.Contains(input.nj))
92   - .WhereIF(!string.IsNullOrEmpty(input.cq), p => p.Cq.Contains(input.cq))
93   - .WhereIF(!string.IsNullOrEmpty(input.cqjxx), p => p.Cqjxx.Contains(input.cqjxx))
94   - .WhereIF(!string.IsNullOrEmpty(input.yx), p => p.Yx.Contains(input.yx))
95   - .WhereIF(!string.IsNullOrEmpty(input.bkts), p => p.Bkts.Contains(input.bkts))
96   - .WhereIF(!string.IsNullOrEmpty(input.tjxx), p => p.Tjxx.Contains(input.tjxx))
97   - .WhereIF(!string.IsNullOrEmpty(input.sjqj), p => p.Sjqj.Contains(input.sjqj))
98   - .WhereIF(!string.IsNullOrEmpty(input.sxts), p => p.Sxts.Contains(input.sxts))
99   - .WhereIF(!string.IsNullOrEmpty(input.sxbt), p => p.Sxbt.Contains(input.sxbt))
100   - .WhereIF(!string.IsNullOrEmpty(input.qk), p => p.Qk.Contains(input.qk))
101   - .WhereIF(!string.IsNullOrEmpty(input.cd), p => p.Cd.Contains(input.cd))
102   - .WhereIF(!string.IsNullOrEmpty(input.qq), p => p.Qq.Contains(input.qq))
103   - .WhereIF(!string.IsNullOrEmpty(input.jtbz), p => p.Jtbz.Contains(input.jtbz))
104   - .WhereIF(!string.IsNullOrEmpty(input.xxqkk), p => p.Xxqkk.Contains(input.xxqkk))
105   - .WhereIF(!string.IsNullOrEmpty(input.zs), p => p.Zs.Contains(input.zs))
106   - .WhereIF(!string.IsNullOrEmpty(input.gzf), p => p.Gzf.Contains(input.gzf))
107   - .WhereIF(!string.IsNullOrEmpty(input.sjyj), p => p.Sjyj.Contains(input.sjyj))
108   - .WhereIF(!string.IsNullOrEmpty(input.ssyj), p => p.Ssyj.Contains(input.ssyj))
109   - .WhereIF(!string.IsNullOrEmpty(input.qtjl), p => p.Qtjl.Contains(input.qtjl))
110   - .WhereIF(!string.IsNullOrEmpty(input.bdyhsje), p => p.Bdyhsje.Contains(input.bdyhsje))
111   - .WhereIF(!string.IsNullOrEmpty(input.dypx), p => p.Dypx.Contains(input.dypx))
112   - .WhereIF(!string.IsNullOrEmpty(input.dyjtbt), p => p.Dyjtbt.Contains(input.dyjtbt))
113   - .WhereIF(!string.IsNullOrEmpty(input.yfsy), p => p.Yfsy.Contains(input.yfsy))
114   - .WhereIF(!string.IsNullOrEmpty(input.yfcy), p => p.Yfcy.Contains(input.yfcy))
115   - .WhereIF(!string.IsNullOrEmpty(input.zdts), p => p.Zdts.Contains(input.zdts))
116   - .WhereIF(!string.IsNullOrEmpty(input.kyts), p => p.Kyts.Contains(input.kyts))
117   - .WhereIF(!string.IsNullOrEmpty(input.sygzy), p => p.Sygzy.Contains(input.sygzy))
118   - .WhereIF(!string.IsNullOrEmpty(input.dyzdjzcxts), p => p.Dyzdjzcxts.Contains(input.dyzdjzcxts))
119   - .WhereIF(!string.IsNullOrEmpty(input.dysfhs), p => p.Dysfhs.Contains(input.dysfhs))
120   - .Select(it=> new LqKqhzbListOutput
121   - {
122   - id = it.Id,
123   - mdbh=it.Mdbh,
124   - mdmc=it.Mdmc,
125   - zw=it.Zw,
126   - gwfl1=it.Gwfl1,
127   - ygbh=it.Ygbh,
128   - xm=it.Xm,
129   - zzqk=it.Zzqk,
130   - gwfl2=it.Gwfl2,
131   - ffyf=it.Ffyf,
132   - zgts=it.Zgts,
133   - dybzxxts=it.Dybzxxts,
134   - sjxxts=it.Sjxxts,
135   - xx=it.Xx,
136   - qj=it.Qj,
137   - flj=it.Flj,
138   - sj=it.Sj,
139   - nj=it.Nj,
140   - cq=it.Cq,
141   - cqjxx=it.Cqjxx,
142   - yx=it.Yx,
143   - bkts=it.Bkts,
144   - tjxx=it.Tjxx,
145   - sjqj=it.Sjqj,
146   - sxts=it.Sxts,
147   - sxbt=it.Sxbt,
148   - qk=it.Qk,
149   - cd=it.Cd,
150   - qq=it.Qq,
151   - jtbz=it.Jtbz,
152   - xxqkk=it.Xxqkk,
153   - zs=it.Zs,
154   - gzf=it.Gzf,
155   - sjyj=it.Sjyj,
156   - ssyj=it.Ssyj,
157   - qtjl=it.Qtjl,
158   - bdyhsje=it.Bdyhsje,
159   - dypx=it.Dypx,
160   - dyjtbt=it.Dyjtbt,
161   - yfsy=it.Yfsy,
162   - yfcy=it.Yfcy,
163   - zdts=it.Zdts,
164   - kyts=it.Kyts,
165   - sygzy=it.Sygzy,
166   - dyzdjzcxts=it.Dyzdjzcxts,
167   - dysfhs=it.Dysfhs,
168   - }).MergeTable().OrderBy(sidx+" "+input.sort).ToPagedListAsync(input.currentPage, input.pageSize);
169   - return PageResult<LqKqhzbListOutput>.SqlSugarPageResult(data);
170   - }
171   -
172   - /// <summary>
173   - /// 新建考勤汇总表
174   - /// </summary>
175   - /// <param name="input">参数</param>
176   - /// <returns></returns>
177   - [HttpPost("")]
178   - public async Task Create([FromBody] LqKqhzbCrInput input)
179   - {
180   - var userInfo = await _userManager.GetUserInfo();
181   - var entity = input.Adapt<LqKqhzbEntity>();
182   - entity.Id = YitIdHelper.NextId().ToString();
183   - var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
184   - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1000);
185   - }
186   -
187   - /// <summary>
188   - /// 获取考勤汇总表无分页列表
189   - /// </summary>
190   - /// <param name="input">请求参数</param>
191   - /// <returns></returns>
192   - [NonAction]
193   - public async Task<dynamic> GetNoPagingList([FromQuery] LqKqhzbListQueryInput input)
194   - {
195   - var sidx = input.sidx == null ? "id" : input.sidx;
196   - var data = await _db.Queryable<LqKqhzbEntity>()
197   - .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
198   - .WhereIF(!string.IsNullOrEmpty(input.mdbh), p => p.Mdbh.Contains(input.mdbh))
199   - .WhereIF(!string.IsNullOrEmpty(input.mdmc), p => p.Mdmc.Contains(input.mdmc))
200   - .WhereIF(!string.IsNullOrEmpty(input.zw), p => p.Zw.Contains(input.zw))
201   - .WhereIF(!string.IsNullOrEmpty(input.gwfl1), p => p.Gwfl1.Contains(input.gwfl1))
202   - .WhereIF(!string.IsNullOrEmpty(input.ygbh), p => p.Ygbh.Contains(input.ygbh))
203   - .WhereIF(!string.IsNullOrEmpty(input.xm), p => p.Xm.Contains(input.xm))
204   - .WhereIF(!string.IsNullOrEmpty(input.zzqk), p => p.Zzqk.Contains(input.zzqk))
205   - .WhereIF(!string.IsNullOrEmpty(input.gwfl2), p => p.Gwfl2.Contains(input.gwfl2))
206   - .WhereIF(!string.IsNullOrEmpty(input.ffyf), p => p.Ffyf.Contains(input.ffyf))
207   - .WhereIF(!string.IsNullOrEmpty(input.zgts), p => p.Zgts.Contains(input.zgts))
208   - .WhereIF(!string.IsNullOrEmpty(input.dybzxxts), p => p.Dybzxxts.Contains(input.dybzxxts))
209   - .WhereIF(!string.IsNullOrEmpty(input.sjxxts), p => p.Sjxxts.Contains(input.sjxxts))
210   - .WhereIF(!string.IsNullOrEmpty(input.xx), p => p.Xx.Contains(input.xx))
211   - .WhereIF(!string.IsNullOrEmpty(input.qj), p => p.Qj.Contains(input.qj))
212   - .WhereIF(!string.IsNullOrEmpty(input.flj), p => p.Flj.Contains(input.flj))
213   - .WhereIF(!string.IsNullOrEmpty(input.sj), p => p.Sj.Contains(input.sj))
214   - .WhereIF(!string.IsNullOrEmpty(input.nj), p => p.Nj.Contains(input.nj))
215   - .WhereIF(!string.IsNullOrEmpty(input.cq), p => p.Cq.Contains(input.cq))
216   - .WhereIF(!string.IsNullOrEmpty(input.cqjxx), p => p.Cqjxx.Contains(input.cqjxx))
217   - .WhereIF(!string.IsNullOrEmpty(input.yx), p => p.Yx.Contains(input.yx))
218   - .WhereIF(!string.IsNullOrEmpty(input.bkts), p => p.Bkts.Contains(input.bkts))
219   - .WhereIF(!string.IsNullOrEmpty(input.tjxx), p => p.Tjxx.Contains(input.tjxx))
220   - .WhereIF(!string.IsNullOrEmpty(input.sjqj), p => p.Sjqj.Contains(input.sjqj))
221   - .WhereIF(!string.IsNullOrEmpty(input.sxts), p => p.Sxts.Contains(input.sxts))
222   - .WhereIF(!string.IsNullOrEmpty(input.sxbt), p => p.Sxbt.Contains(input.sxbt))
223   - .WhereIF(!string.IsNullOrEmpty(input.qk), p => p.Qk.Contains(input.qk))
224   - .WhereIF(!string.IsNullOrEmpty(input.cd), p => p.Cd.Contains(input.cd))
225   - .WhereIF(!string.IsNullOrEmpty(input.qq), p => p.Qq.Contains(input.qq))
226   - .WhereIF(!string.IsNullOrEmpty(input.jtbz), p => p.Jtbz.Contains(input.jtbz))
227   - .WhereIF(!string.IsNullOrEmpty(input.xxqkk), p => p.Xxqkk.Contains(input.xxqkk))
228   - .WhereIF(!string.IsNullOrEmpty(input.zs), p => p.Zs.Contains(input.zs))
229   - .WhereIF(!string.IsNullOrEmpty(input.gzf), p => p.Gzf.Contains(input.gzf))
230   - .WhereIF(!string.IsNullOrEmpty(input.sjyj), p => p.Sjyj.Contains(input.sjyj))
231   - .WhereIF(!string.IsNullOrEmpty(input.ssyj), p => p.Ssyj.Contains(input.ssyj))
232   - .WhereIF(!string.IsNullOrEmpty(input.qtjl), p => p.Qtjl.Contains(input.qtjl))
233   - .WhereIF(!string.IsNullOrEmpty(input.bdyhsje), p => p.Bdyhsje.Contains(input.bdyhsje))
234   - .WhereIF(!string.IsNullOrEmpty(input.dypx), p => p.Dypx.Contains(input.dypx))
235   - .WhereIF(!string.IsNullOrEmpty(input.dyjtbt), p => p.Dyjtbt.Contains(input.dyjtbt))
236   - .WhereIF(!string.IsNullOrEmpty(input.yfsy), p => p.Yfsy.Contains(input.yfsy))
237   - .WhereIF(!string.IsNullOrEmpty(input.yfcy), p => p.Yfcy.Contains(input.yfcy))
238   - .WhereIF(!string.IsNullOrEmpty(input.zdts), p => p.Zdts.Contains(input.zdts))
239   - .WhereIF(!string.IsNullOrEmpty(input.kyts), p => p.Kyts.Contains(input.kyts))
240   - .WhereIF(!string.IsNullOrEmpty(input.sygzy), p => p.Sygzy.Contains(input.sygzy))
241   - .WhereIF(!string.IsNullOrEmpty(input.dyzdjzcxts), p => p.Dyzdjzcxts.Contains(input.dyzdjzcxts))
242   - .WhereIF(!string.IsNullOrEmpty(input.dysfhs), p => p.Dysfhs.Contains(input.dysfhs))
243   - .Select(it=> new LqKqhzbListOutput
244   - {
245   - id = it.Id,
246   - mdbh=it.Mdbh,
247   - mdmc=it.Mdmc,
248   - zw=it.Zw,
249   - gwfl1=it.Gwfl1,
250   - ygbh=it.Ygbh,
251   - xm=it.Xm,
252   - zzqk=it.Zzqk,
253   - gwfl2=it.Gwfl2,
254   - ffyf=it.Ffyf,
255   - zgts=it.Zgts,
256   - dybzxxts=it.Dybzxxts,
257   - sjxxts=it.Sjxxts,
258   - xx=it.Xx,
259   - qj=it.Qj,
260   - flj=it.Flj,
261   - sj=it.Sj,
262   - nj=it.Nj,
263   - cq=it.Cq,
264   - cqjxx=it.Cqjxx,
265   - yx=it.Yx,
266   - bkts=it.Bkts,
267   - tjxx=it.Tjxx,
268   - sjqj=it.Sjqj,
269   - sxts=it.Sxts,
270   - sxbt=it.Sxbt,
271   - qk=it.Qk,
272   - cd=it.Cd,
273   - qq=it.Qq,
274   - jtbz=it.Jtbz,
275   - xxqkk=it.Xxqkk,
276   - zs=it.Zs,
277   - gzf=it.Gzf,
278   - sjyj=it.Sjyj,
279   - ssyj=it.Ssyj,
280   - qtjl=it.Qtjl,
281   - bdyhsje=it.Bdyhsje,
282   - dypx=it.Dypx,
283   - dyjtbt=it.Dyjtbt,
284   - yfsy=it.Yfsy,
285   - yfcy=it.Yfcy,
286   - zdts=it.Zdts,
287   - kyts=it.Kyts,
288   - sygzy=it.Sygzy,
289   - dyzdjzcxts=it.Dyzdjzcxts,
290   - dysfhs=it.Dysfhs,
291   - }).MergeTable().OrderBy(sidx+" "+input.sort).ToListAsync();
292   - return data;
293   - }
294   -
295   - /// <summary>
296   - /// 导出考勤汇总表
297   - /// </summary>
298   - /// <param name="input">请求参数</param>
299   - /// <returns></returns>
300   - [HttpGet("Actions/Export")]
301   - public async Task<dynamic> Export([FromQuery] LqKqhzbListQueryInput input)
302   - {
303   - var userInfo = await _userManager.GetUserInfo();
304   - var exportData = new List<LqKqhzbListOutput>();
305   - if (input.dataType == 0)
306   - {
307   - var data = Clay.Object(await this.GetList(input));
308   - exportData = data.Solidify<PageResult<LqKqhzbListOutput>>().list;
309   - }
310   - else
311   - {
312   - exportData = await this.GetNoPagingList(input);
313   - }
314   - List<ParamsModel> paramList = "[{\"value\":\"考勤编号\",\"field\":\"id\"},{\"value\":\"门店编号\",\"field\":\"mdbh\"},{\"value\":\"门店名称\",\"field\":\"mdmc\"},{\"value\":\"职位\",\"field\":\"zw\"},{\"value\":\"岗位分类1\",\"field\":\"gwfl1\"},{\"value\":\"员工编号\",\"field\":\"ygbh\"},{\"value\":\"姓名\",\"field\":\"xm\"},{\"value\":\"在职情况\",\"field\":\"zzqk\"},{\"value\":\"岗位分类2\",\"field\":\"gwfl2\"},{\"value\":\"发放月份\",\"field\":\"ffyf\"},{\"value\":\"在岗天数\",\"field\":\"zgts\"},{\"value\":\"当月休息天数\",\"field\":\"dybzxxts\"},{\"value\":\"实际休息天数\",\"field\":\"sjxxts\"},{\"value\":\"休息\",\"field\":\"xx\"},{\"value\":\"请假\",\"field\":\"qj\"},{\"value\":\"福利假\",\"field\":\"flj\"},{\"value\":\"丧假\",\"field\":\"sj\"},{\"value\":\"年假\",\"field\":\"nj\"},{\"value\":\"出勤\",\"field\":\"cq\"},{\"value\":\"出勤加休息\",\"field\":\"cqjxx\"},{\"value\":\"应休\",\"field\":\"yx\"},{\"value\":\"不扣天数\",\"field\":\"bkts\"},{\"value\":\"调减休息\",\"field\":\"tjxx\"},{\"value\":\"实际请假\",\"field\":\"sjqj\"},{\"value\":\"少休天数\",\"field\":\"sxts\"},{\"value\":\"少休补贴\",\"field\":\"sxbt\"},{\"value\":\"缺卡\",\"field\":\"qk\"},{\"value\":\"迟到\",\"field\":\"cd\"},{\"value\":\"全勤\",\"field\":\"qq\"},{\"value\":\"交通补助\",\"field\":\"jtbz\"},{\"value\":\"学习期扣款\",\"field\":\"xxqkk\"},{\"value\":\"住宿\",\"field\":\"zs\"},{\"value\":\"工作服\",\"field\":\"gzf\"},{\"value\":\"手机押金\",\"field\":\"sjyj\"},{\"value\":\"宿舍押金\",\"field\":\"ssyj\"},{\"value\":\"其他奖励\",\"field\":\"qtjl\"},{\"value\":\"保底核算金额\",\"field\":\"bdyhsje\"},{\"value\":\"当月培训\",\"field\":\"dypx\"},{\"value\":\"当月交通补贴\",\"field\":\"dyjtbt\"},{\"value\":\"应发上月\",\"field\":\"yfsy\"},{\"value\":\"应发次月\",\"field\":\"yfcy\"},{\"value\":\"在店天数\",\"field\":\"zdts\"},{\"value\":\"跨月天数\",\"field\":\"kyts\"},{\"value\":\"上月工资有\",\"field\":\"sygzy\"},{\"value\":\"在店加正常休\",\"field\":\"dyzdjzcxts\"},{\"value\":\"当月是否核算\",\"field\":\"dysfhs\"},]".ToList<ParamsModel>();
315   - ExcelConfig excelconfig = new ExcelConfig();
316   - excelconfig.FileName = "考勤汇总表.xls";
317   - excelconfig.HeadFont = "微软雅黑";
318   - excelconfig.HeadPoint = 10;
319   - excelconfig.IsAllSizeColumn = true;
320   - excelconfig.ColumnModel = new List<ExcelColumnModel>();
321   - List<string> selectKeyList = input.selectKey.Split(',').ToList();
322   - foreach (var item in selectKeyList)
323   - {
324   - var isExist = paramList.Find(p => p.field == item);
325   - if (isExist != null)
326   - {
327   - excelconfig.ColumnModel.Add(new ExcelColumnModel() { Column = isExist.field, ExcelColumn = isExist.value });
328   - }
329   - }
330   - var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName;
331   - ExcelExportHelper<LqKqhzbListOutput>.Export(exportData, excelconfig, addPath);
332   - var fileName = _userManager.UserId + "|" + addPath + "|xls";
333   - var output = new
334   - {
335   - name = excelconfig.FileName,
336   - url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC")
337   - };
338   - return output;
339   - }
340   -
341   - /// <summary>
342   - /// 批量删除考勤汇总表
343   - /// </summary>
344   - /// <param name="ids">主键数组</param>
345   - /// <returns></returns>
346   - [HttpPost("batchRemove")]
347   - public async Task BatchRemove([FromBody] List<string> ids)
348   - {
349   - var entitys = await _db.Queryable<LqKqhzbEntity>().In(it => it.Id, ids).ToListAsync();
350   - if (entitys.Count > 0)
351   - {
352   - try
353   - {
354   - //开启事务
355   - _db.BeginTran();
356   - //批量删除考勤汇总表
357   - await _db.Deleteable<LqKqhzbEntity>().In(d => d.Id,ids).ExecuteCommandAsync();
358   - //关闭事务
359   - _db.CommitTran();
360   - }
361   - catch (Exception)
362   - {
363   - //回滚事务
364   - _db.RollbackTran();
365   - throw NCCException.Oh(ErrorCode.COM1002);
366   - }
367   - }
368   - }
369   -
370   - /// <summary>
371   - /// 更新考勤汇总表
372   - /// </summary>
373   - /// <param name="id">主键</param>
374   - /// <param name="input">参数</param>
375   - /// <returns></returns>
376   - [HttpPut("{id}")]
377   - public async Task Update(string id, [FromBody] LqKqhzbUpInput input)
378   - {
379   - var entity = input.Adapt<LqKqhzbEntity>();
380   - var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
381   - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001);
382   - }
383   -
384   - /// <summary>
385   - /// 删除考勤汇总表
386   - /// </summary>
387   - /// <returns></returns>
388   - [HttpDelete("{id}")]
389   - public async Task Delete(string id)
390   - {
391   - var entity = await _db.Queryable<LqKqhzbEntity>().FirstAsync(p => p.Id == id);
392   - _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005);
393   - var isOk = await _db.Deleteable<LqKqhzbEntity>().Where(d => d.Id == id).ExecuteCommandAsync();
394   - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1002);
395   - }
396   - }
397   -}
创建考勤汇总表.sql 0 → 100644
  1 +CREATE TABLE `lq_attendance_summary` (
  2 + `F_Id` varchar(50) NOT NULL COMMENT '考勤汇总ID',
  3 + `F_UserId` varchar(50) NOT NULL COMMENT '用户ID(员工ID)',
  4 + `F_Year` int NOT NULL COMMENT '年份',
  5 + `F_Month` int NOT NULL COMMENT '月份',
  6 + `F_EmployeeStatus` int NOT NULL DEFAULT 1 COMMENT '员工状态(1-在职,2-离职,3-停薪留职)',
  7 + `F_WorkDays` decimal(5,2) NOT NULL DEFAULT 0.00 COMMENT '出勤天数',
  8 + `F_LeaveDays` decimal(5,2) NOT NULL DEFAULT 0.00 COMMENT '请假天数',
  9 + `F_RestDays` decimal(5,2) NOT NULL DEFAULT 0.00 COMMENT '休息天数',
  10 + `F_Remark` varchar(2000) COMMENT '备注',
  11 + `F_CreateUser` varchar(50) NOT NULL COMMENT '创建人ID',
  12 + `F_CreateTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  13 + `F_UpdateUser` varchar(50) COMMENT '更新人ID',
  14 + `F_UpdateTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  15 + `F_IsEffective` int NOT NULL DEFAULT 1 COMMENT '是否有效(1-有效,-1-无效)',
  16 + PRIMARY KEY (`F_Id`),
  17 + UNIQUE KEY `uk_user_year_month` (`F_UserId`, `F_Year`, `F_Month`),
  18 + KEY `idx_user_id` (`F_UserId`),
  19 + KEY `idx_year_month` (`F_Year`, `F_Month`),
  20 + KEY `idx_create_time` (`F_CreateTime`)
  21 +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='考勤汇总表';
... ...