Commit 1cf1bd86e006e9e18a852bd6e8f254428d5f6d75

Authored by “wangming”
1 parent e94f4f10

feat: 添加项目资料表手工费字段和陪同相关字段

- 项目资料表(lq_xmzl)添加四个手工费字段:
  * F_MedicalBeautyLaborCost - 医美手工费
  * F_TechBeautyLaborCost - 科美手工费
  * F_LifeBeautyLaborCost - 生美手工费
  * F_HealthCoachLaborCost - 健康师手工费
  * F_IsAllowAccompanied - 是否允许陪同

- 耗卡健康师业绩表(lq_xh_jksyj)添加陪同字段:
  * F_AccompaniedProjectNumber - 陪同项目数
  * F_IsAccompanied - 是否陪同

- 耗卡品项明细表(lq_xh_pxmx)添加字段:
  * F_IsNeedAccompanied - 是否需要陪同

- 更新相关实体类和DTO,支持新字段
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlCrInput.cs
... ... @@ -81,6 +81,31 @@ namespace NCC.Extend.Entitys.Dto.LqXmzl
81 81 public decimal? sgf { get; set; }
82 82  
83 83 /// <summary>
  84 + /// 医美手工费
  85 + /// </summary>
  86 + public decimal? medicalBeautyLaborCost { get; set; }
  87 +
  88 + /// <summary>
  89 + /// 科美手工费
  90 + /// </summary>
  91 + public decimal? techBeautyLaborCost { get; set; }
  92 +
  93 + /// <summary>
  94 + /// 生美手工费
  95 + /// </summary>
  96 + public decimal? lifeBeautyLaborCost { get; set; }
  97 +
  98 + /// <summary>
  99 + /// 健康师手工费
  100 + /// </summary>
  101 + public decimal? healthCoachLaborCost { get; set; }
  102 +
  103 + /// <summary>
  104 + /// 是否允许陪同
  105 + /// </summary>
  106 + public int? isAllowAccompanied { get; set; } = 0;
  107 +
  108 + /// <summary>
84 109 /// 科美类型
85 110 /// </summary>
86 111 public string beautyType { get; set; }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlInfoOutput.cs
... ... @@ -81,6 +81,31 @@ namespace NCC.Extend.Entitys.Dto.LqXmzl
81 81 public decimal? sgf { get; set; }
82 82  
83 83 /// <summary>
  84 + /// 医美手工费
  85 + /// </summary>
  86 + public decimal? medicalBeautyLaborCost { get; set; }
  87 +
  88 + /// <summary>
  89 + /// 科美手工费
  90 + /// </summary>
  91 + public decimal? techBeautyLaborCost { get; set; }
  92 +
  93 + /// <summary>
  94 + /// 生美手工费
  95 + /// </summary>
  96 + public decimal? lifeBeautyLaborCost { get; set; }
  97 +
  98 + /// <summary>
  99 + /// 健康师手工费
  100 + /// </summary>
  101 + public decimal? healthCoachLaborCost { get; set; }
  102 +
  103 + /// <summary>
  104 + /// 是否允许陪同
  105 + /// </summary>
  106 + public int? isAllowAccompanied { get; set; } = 0;
  107 +
  108 + /// <summary>
84 109 /// 科美类型
85 110 /// </summary>
86 111 public string beautyType { get; set; }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXmzl/LqXmzlListOutput.cs
... ... @@ -80,6 +80,31 @@ namespace NCC.Extend.Entitys.Dto.LqXmzl
80 80 public decimal? sgf { get; set; }
81 81  
82 82 /// <summary>
  83 + /// 医美手工费
  84 + /// </summary>
  85 + public decimal? medicalBeautyLaborCost { get; set; }
  86 +
  87 + /// <summary>
  88 + /// 科美手工费
  89 + /// </summary>
  90 + public decimal? techBeautyLaborCost { get; set; }
  91 +
  92 + /// <summary>
  93 + /// 生美手工费
  94 + /// </summary>
  95 + public decimal? lifeBeautyLaborCost { get; set; }
  96 +
  97 + /// <summary>
  98 + /// 健康师手工费
  99 + /// </summary>
  100 + public decimal? healthCoachLaborCost { get; set; }
  101 +
  102 + /// <summary>
  103 + /// 是否允许陪同
  104 + /// </summary>
  105 + public int? isAllowAccompanied { get; set; } = 0;
  106 +
  107 + /// <summary>
83 108 /// 科美类型
84 109 /// </summary>
85 110 public string beautyType { get; set; }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xmzl/LqXmzlEntity.cs
... ... @@ -98,6 +98,30 @@ namespace NCC.Extend.Entitys.lq_xmzl
98 98 public decimal? Sgf { get; set; }
99 99  
100 100 /// <summary>
  101 + /// 医美手工费
  102 + /// </summary>
  103 + [SugarColumn(ColumnName = "F_MedicalBeautyLaborCost")]
  104 + public decimal? MedicalBeautyLaborCost { get; set; }
  105 +
  106 + /// <summary>
  107 + /// 科美手工费
  108 + /// </summary>
  109 + [SugarColumn(ColumnName = "F_TechBeautyLaborCost")]
  110 + public decimal? TechBeautyLaborCost { get; set; }
  111 +
  112 + /// <summary>
  113 + /// 生美手工费
  114 + /// </summary>
  115 + [SugarColumn(ColumnName = "F_LifeBeautyLaborCost")]
  116 + public decimal? LifeBeautyLaborCost { get; set; }
  117 +
  118 + /// <summary>
  119 + /// 健康师手工费
  120 + /// </summary>
  121 + [SugarColumn(ColumnName = "F_HealthCoachLaborCost")]
  122 + public decimal? HealthCoachLaborCost { get; set; }
  123 +
  124 + /// <summary>
101 125 /// 科美类型
102 126 /// </summary>
103 127 [SugarColumn(ColumnName = "F_BeautyType")]
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs
... ... @@ -279,13 +279,11 @@ namespace NCC.Extend.LqKdKdjlb
279 279  
280 280 // 获取当前页的开单记录ID列表
281 281 var billingIds = data.list.Select(x => x.id).ToList();
282   -
283 282 // 批量查询品项明细
284 283 var itemDetails = new List<LqKdPxmxInfoOutput>();
285 284 if (billingIds.Any())
286 285 {
287   - itemDetails = await _db.Queryable<LqKdPxmxEntity>()
288   - .Where(x => billingIds.Contains(x.Glkdbh) && x.IsEffective == StatusEnum.有效.GetHashCode())
  286 + itemDetails = await _db.Queryable<LqKdPxmxEntity>().Where(x => billingIds.Contains(x.Glkdbh) && x.IsEffective == StatusEnum.有效.GetHashCode())
289 287 .Select(x => new LqKdPxmxInfoOutput
290 288 {
291 289 id = x.Id,
... ... @@ -575,199 +573,6 @@ namespace NCC.Extend.LqKdKdjlb
575 573 }
576 574 #endregion
577 575  
578   - #region 新建开单记录表_备份
579   - /// <summary>
580   - /// 新建开单记录表_备份
581   - /// </summary>
582   - /// <param name="input">参数</param>
583   - /// <returns></returns>
584   - [HttpPost("Create_Bak")]
585   - public async Task Create_Bak([FromBody] LqKdKdjlbCrInput input)
586   - {
587   - var userInfo = await _userManager.GetUserInfo();
588   - var entity = input.Adapt<LqKdKdjlbEntity>();
589   - var HealthInstructorNames = "";
590   - entity.Id = YitIdHelper.NextId().ToString();
591   - entity.CreateTime = DateTime.Now;
592   - entity.UpdateTime = DateTime.Now;
593   - try
594   - {
595   - //开启事务
596   - _db.BeginTran();
597   - //新增开单记录表记录
598   - entity.CreateUser = userInfo.userId;
599   - entity.DeductAmount = input.lqKdKdjlbDeductList.Sum(x => x.Amount ?? 0);//计算储扣总金额
600   - var newEntity = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteReturnEntityAsync();
601   - //循环品相信息
602   - // 收集所有需要插入的实体,然后批量插入
603   - var allPxmxEntities = new List<LqKdPxmxEntity>();
604   - var allJksyjEntities = new List<LqKdJksyjEntity>();
605   - var allKjbsyjEntities = new List<LqKdKjbsyjEntity>();
606   - var allDeductEntities = new List<LqKdDeductinfoEntity>();
607   - // 处理扣款信息列表
608   - foreach (var item in input.lqKdKdjlbDeductList)
609   - {
610   - var lqKdDeductEntity = new LqKdDeductinfoEntity
611   - {
612   - Id = YitIdHelper.NextId().ToString(),
613   - BillingId = newEntity.Id,
614   - DeductId = item.DeductId,
615   - DeductType = item.DeductType,
616   - Amount = item.Amount,
617   - };
618   - allDeductEntities.Add(lqKdDeductEntity);
619   - }
620   - // 处理品项明细列表
621   - foreach (var item in input.lqKdPxmxList)
622   - {
623   - // 创建品项明细实体
624   - var lqKdPxmxEntity = new LqKdPxmxEntity
625   - {
626   - Id = YitIdHelper.NextId().ToString(),
627   - Glkdbh = newEntity.Id,
628   - Yjsj = input.kdrq,
629   - CreateTIme = DateTime.Now,
630   - MemberId = entity.Kdhy,
631   - IsEnabled = 0,
632   - ProjectNumber = item.projectNumber,
633   - TotalPrice = (decimal)(item.pxjg * item.projectNumber),
634   - Px = item.px,
635   - Pxmc = item.pxmc,
636   - Pxjg = item.pxjg,
637   - SourceType = item.sourceType,
638   - ActualPrice = item.actualPrice,
639   - };
640   - allPxmxEntities.Add(lqKdPxmxEntity);
641   -
642   - // 收集该品项关联的健康师业绩
643   - if (item.lqKdJksyjList != null && item.lqKdJksyjList.Any())
644   - {
645   - //把jksxm保存到HealthInstructorNames
646   - foreach (var ijks_tem in item.lqKdJksyjList)
647   - {
648   - HealthInstructorNames += ijks_tem.jksxm + ",";
649   - allJksyjEntities.Add(new LqKdJksyjEntity
650   - {
651   - Id = YitIdHelper.NextId().ToString(),
652   - Glkdbh = newEntity.Id,
653   - Jks = ijks_tem.jks,
654   - Jksxm = ijks_tem.jksxm,
655   - Jkszh = ijks_tem.jkszh,
656   - Jksyj = ijks_tem.jksyj,
657   - Yjsj = input.kdrq,
658   - Jsj_id = ijks_tem.jsj_id,
659   - Kdpxid = lqKdPxmxEntity.Id,
660   - });
661   - }
662   - }
663   -
664   - // 收集该品项关联的科技部老师业绩
665   - if (item.lqKdKjbsyjList != null && item.lqKdKjbsyjList.Any())
666   - {
667   - foreach (var ikjbs_tem in item.lqKdKjbsyjList)
668   - {
669   - allKjbsyjEntities.Add(
670   - new LqKdKjbsyjEntity
671   - {
672   - Id = YitIdHelper.NextId().ToString(),
673   - Glkdbh = newEntity.Id,
674   - Kjbls = ikjbs_tem.kjbls,
675   - Kjblsxm = ikjbs_tem.kjblsxm,
676   - Kjblszh = ikjbs_tem.kjblszh,
677   - Kjblsyj = ikjbs_tem.kjblsyj,
678   - Yjsj = input.kdrq,
679   - Kdpxid = lqKdPxmxEntity.Id,
680   - }
681   - );
682   - }
683   - }
684   - }
685   -
686   -
687   - //通过会员id查询会员信息
688   - var memberInfo = await _db.Queryable<LqKhxxEntity>().Where(u => u.Id == entity.Kdhy).FirstAsync();
689   - //通过开单记录表查询这个会员开单金额
690   - var kdAmount = await _db.Queryable<LqKdKdjlbEntity>().Where(u => u.Kdhy == entity.Kdhy).SumAsync(u => u.Sfyj);
691   - //如果开单金额小于500,为散客,如果大于500,为会员
692   - if (kdAmount < 500)
693   - {
694   - memberInfo.Khlx = MemberTypeEnum.散客.GetHashCode().ToString();
695   - }
696   - else
697   - {
698   - memberInfo.Khlx = MemberTypeEnum.会员.GetHashCode().ToString();
699   - }
700   - await _db.Updateable(memberInfo).ExecuteCommandAsync();
701   - // 批量插入扣款信息
702   - if (allDeductEntities.Any())
703   - {
704   - await _db.Insertable(allDeductEntities).ExecuteCommandAsync();
705   - }
706   - // 批量插入品项明细
707   - if (allPxmxEntities.Any())
708   - {
709   - await _db.Insertable(allPxmxEntities).ExecuteCommandAsync();
710   - }
711   - // 批量插入健康师业绩
712   - if (allJksyjEntities.Any())
713   - {
714   - await _db.Insertable(allJksyjEntities).ExecuteCommandAsync();
715   - }
716   - // 批量插入科技部老师业绩
717   - if (allKjbsyjEntities.Any())
718   - {
719   - await _db.Insertable(allKjbsyjEntities).ExecuteCommandAsync();
720   - }
721   -
722   - //关闭事务
723   - _db.CommitTran();
724   -
725   - // 生成开单记录字符串并发送到企业微信
726   - try
727   - {
728   - var entityInfo = await GetInfo(newEntity.Id);
729   - if (entityInfo != null)
730   - {
731   - var orderRecordString = _stringGenerator.GenerateOrderRecordString(entityInfo, HealthInstructorNames);
732   - Console.WriteLine("开单记录字符串生成成功:");
733   - Console.WriteLine(orderRecordString);
734   -
735   - // 发送到企业微信群
736   - try
737   - {
738   - var sendResult = await _weChatBotService.SendOrderRecordMessage(orderRecordString);
739   - if (sendResult)
740   - {
741   - Console.WriteLine("开单记录已成功发送到企业微信群");
742   - }
743   - else
744   - {
745   - Console.WriteLine("开单记录发送到企业微信群失败");
746   - }
747   - }
748   - catch (Exception wechatEx)
749   - {
750   - Console.WriteLine($"发送企业微信消息异常: {wechatEx.Message}");
751   - }
752   - }
753   - }
754   - catch (Exception ex)
755   - {
756   - // 字符串生成失败不影响主流程,只记录日志
757   - Console.WriteLine($"生成开单记录字符串失败: {ex.Message}");
758   - }
759   - }
760   - catch (Exception ex)
761   - {
762   - //回滚事务
763   - _db.RollbackTran();
764   - Console.WriteLine($"开单创建失败: {ex.Message}");
765   - Console.WriteLine($"异常堆栈: {ex.StackTrace}");
766   - throw NCCException.Oh(ErrorCode.COM1000);
767   - }
768   - }
769   - #endregion
770   -
771 576 #region 获取开单记录表无分页列表
772 577 /// <summary>
773 578 /// 获取开单记录表无分页列表
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs
... ... @@ -672,26 +672,24 @@ namespace NCC.Extend.LqXhHyhk
672 672 {
673 673 foreach (var ikjbs_tem in item.lqXhKjbsyjList)
674 674 {
675   - allKjbsyjEntities.Add(
676   - new LqXhKjbsyjEntity
677   - {
678   - Id = YitIdHelper.NextId().ToString(),
679   - Glkdbh = input.id,
680   - Kjbls = ikjbs_tem.kjbls,
681   - Kjblsxm = ikjbs_tem.kjblsxm,
682   - Kjblszh = ikjbs_tem.kjblszh,
683   - Kjblsyj = ikjbs_tem.kjblsyj,
684   - Yjsj = DateTime.Now,
685   - Hkpxid = lqXhPxmxEntity.Id,
686   - OriginalHdpxNumber = ikjbs_tem.hdpxNumber,
687   - OvertimeHdpxNumber = (decimal)(entity.OvertimeCoefficient * (ikjbs_tem.hdpxNumber ?? 0)),
688   - HdpxNumber = (decimal)((ikjbs_tem.hdpxNumber ?? 0) + (entity.OvertimeCoefficient * (ikjbs_tem.hdpxNumber ?? 0))),
689   - OriginalLaborCost = ikjbs_tem.laborCost,
690   - OvertimeLaborCost = (decimal)(entity.OvertimeCoefficient * (ikjbs_tem.laborCost ?? 0)),
691   - LaborCost = (decimal)((ikjbs_tem.laborCost ?? 0) + (entity.OvertimeCoefficient * (ikjbs_tem.laborCost ?? 0))),
692   - IsEffective = StatusEnum.有效.GetHashCode(),
693   - }
694   - );
  675 + allKjbsyjEntities.Add(new LqXhKjbsyjEntity
  676 + {
  677 + Id = YitIdHelper.NextId().ToString(),
  678 + Glkdbh = input.id,
  679 + Kjbls = ikjbs_tem.kjbls,
  680 + Kjblsxm = ikjbs_tem.kjblsxm,
  681 + Kjblszh = ikjbs_tem.kjblszh,
  682 + Kjblsyj = ikjbs_tem.kjblsyj,
  683 + Yjsj = DateTime.Now,
  684 + Hkpxid = lqXhPxmxEntity.Id,
  685 + OriginalHdpxNumber = ikjbs_tem.hdpxNumber,
  686 + OvertimeHdpxNumber = (decimal)(entity.OvertimeCoefficient * (ikjbs_tem.hdpxNumber ?? 0)),
  687 + HdpxNumber = (decimal)((ikjbs_tem.hdpxNumber ?? 0) + (entity.OvertimeCoefficient * (ikjbs_tem.hdpxNumber ?? 0))),
  688 + OriginalLaborCost = ikjbs_tem.laborCost,
  689 + OvertimeLaborCost = (decimal)(entity.OvertimeCoefficient * (ikjbs_tem.laborCost ?? 0)),
  690 + LaborCost = (decimal)((ikjbs_tem.laborCost ?? 0) + (entity.OvertimeCoefficient * (ikjbs_tem.laborCost ?? 0))),
  691 + IsEffective = StatusEnum.有效.GetHashCode(),
  692 + });
695 693 }
696 694 }
697 695 }
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqXmzlService.cs
... ... @@ -28,6 +28,7 @@ using NCC.Common.Model.NPOI;
28 28 using NCC.Common.Configuration;
29 29 using NCC.DataEncryption;
30 30 using NCC.ClayObject;
  31 +using NCC.Extend.Entitys.Enum;
31 32  
32 33 namespace NCC.Extend.LqXmzl
33 34 {
... ... @@ -115,6 +116,10 @@ namespace NCC.Extend.LqXmzl
115 116 beautyType = it.BeautyType,
116 117 sourceType = it.SourceType,
117 118 isEffective = it.IsEffective,
  119 + medicalBeautyLaborCost = it.MedicalBeautyLaborCost,
  120 + techBeautyLaborCost = it.TechBeautyLaborCost,
  121 + lifeBeautyLaborCost = it.LifeBeautyLaborCost,
  122 + healthCoachLaborCost = it.HealthCoachLaborCost,
118 123 }).MergeTable().OrderBy(sidx + " " + input.sort).ToPagedListAsync(input.currentPage, input.pageSize);
119 124 return PageResult<LqXmzlListOutput>.SqlSugarPageResult(data);
120 125 }
... ... @@ -279,6 +284,23 @@ namespace NCC.Extend.LqXmzl
279 284 }
280 285 #endregion
281 286  
  287 + #region 设置品项作废
  288 + /// <summary>
  289 + /// 设置品项作废
  290 + /// </summary>
  291 + /// <param name="id">主键</param>
  292 + /// <returns></returns>
  293 + [HttpPut("SetInvalid/{id}")]
  294 + public async Task SetInvalid(string id)
  295 + {
  296 + var entity = await _db.Queryable<LqXmzlEntity>().FirstAsync(p => p.Id == id);
  297 + if (entity == null) throw NCCException.Oh("品项不存在");
  298 + entity.IsEffective = StatusEnum.无效.GetHashCode();
  299 + var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
  300 + if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001);
  301 + }
  302 + #endregion
  303 +
282 304 #region 删除品项资料
283 305 /// <summary>
284 306 /// 删除品项资料
... ... @@ -669,9 +691,7 @@ namespace NCC.Extend.LqXmzl
669 691 return result;
670 692 }
671 693 #endregion
672   -
673 694 }
674   -
675 695 /// <summary>
676 696 /// 品项统计数据(内部类)
677 697 /// </summary>
... ...
sql/添加耗卡健康师业绩表陪同字段.sql 0 → 100644
  1 +-- 给lq_xh_jksyj表添加两个陪同相关字段
  2 +-- 陪同项目数、是否陪同
  3 +
  4 +-- 添加陪同项目数字段
  5 +ALTER TABLE lq_xh_jksyj
  6 +ADD COLUMN F_AccompaniedProjectNumber DECIMAL(18,2) DEFAULT 0.00 COMMENT '陪同项目数' AFTER F_OvertimeLaborCost;
  7 +
  8 +-- 添加是否陪同字段
  9 +ALTER TABLE lq_xh_jksyj
  10 +ADD COLUMN F_IsAccompanied INT DEFAULT 0 COMMENT '是否陪同(0-否,1-是)' AFTER F_AccompaniedProjectNumber;
  11 +
... ...
sql/添加项目资料表手工费字段.sql 0 → 100644
  1 +-- 给lq_xmzl表添加四个手工费字段
  2 +-- 医美手工费、科美手工费、生美手工费、健康师手工费
  3 +
  4 +-- 添加医美手工费字段
  5 +ALTER TABLE lq_xmzl
  6 +ADD COLUMN F_MedicalBeautyLaborCost DECIMAL(18,2) DEFAULT 0.00 COMMENT '医美手工费' AFTER sgf;
  7 +
  8 +-- 添加科美手工费字段
  9 +ALTER TABLE lq_xmzl
  10 +ADD COLUMN F_TechBeautyLaborCost DECIMAL(18,2) DEFAULT 0.00 COMMENT '科美手工费' AFTER F_MedicalBeautyLaborCost;
  11 +
  12 +-- 添加生美手工费字段
  13 +ALTER TABLE lq_xmzl
  14 +ADD COLUMN F_LifeBeautyLaborCost DECIMAL(18,2) DEFAULT 0.00 COMMENT '生美手工费' AFTER F_TechBeautyLaborCost;
  15 +
  16 +-- 添加健康师手工费字段
  17 +ALTER TABLE lq_xmzl
  18 +ADD COLUMN F_HealthCoachLaborCost DECIMAL(18,2) DEFAULT 0.00 COMMENT '健康师手工费' AFTER F_LifeBeautyLaborCost;
  19 +
  20 +-- 更新已有数据:如果原有sgf字段有值,将值复制到四个新字段(可根据业务需求调整)
  21 +-- UPDATE lq_xmzl SET F_MedicalBeautyLaborCost = sgf, F_TechBeautyLaborCost = sgf, F_LifeBeautyLaborCost = sgf, F_HealthCoachLaborCost = sgf WHERE sgf IS NOT NULL AND sgf > 0;
  22 +
  23 +-- ============================================
  24 +-- 给lq_xmzl表添加是否允许陪同字段
  25 +-- ============================================
  26 +
  27 +-- 添加是否允许陪同字段
  28 +ALTER TABLE lq_xmzl
  29 +ADD COLUMN F_IsAllowAccompanied INT DEFAULT 0 COMMENT '是否允许陪同(0-否,1-是)' AFTER F_HealthCoachLaborCost;
  30 +
... ...