using NCC.Common.Core.Manager; using NCC.Common.Enum; using NCC.Common.Extension; using NCC.Common.Filter; using NCC.Dependency; using NCC.DynamicApiController; using NCC.FriendlyException; using NCC.Extend.Interfaces.LqKdKdjlb; using Mapster; using Microsoft.AspNetCore.Mvc; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using NCC.Extend.Entitys.lq_kd_kdjlb; using NCC.Extend.Entitys.lq_kd_jksyj; using NCC.Extend.Entitys.lq_kd_kjbsyj; using NCC.Extend.Entitys.lq_kd_pxmx; using NCC.Extend.Entitys.Dto.LqKdKdjlb; using Yitter.IdGenerator; using NCC.Common.Helper; using NCC.JsonSerialization; using NCC.Common.Model.NPOI; using NCC.Common.Configuration; using NCC.DataEncryption; using NCC.ClayObject; using NCC.Extend.Utils; using System.Net.Http; namespace NCC.Extend.LqKdKdjlb { /// /// 开单记录表服务 /// [ApiDescriptionSettings(Tag = "Extend",Name = "LqKdKdjlb", Order = 200)] [Route("api/Extend/[controller]")] public class LqKdKdjlbService : ILqKdKdjlbService, IDynamicApiController, ITransient { private readonly ISqlSugarRepository _lqKdKdjlbRepository; private readonly ISqlSugarRepository _lqKdJksyjRepository; private readonly ISqlSugarRepository _lqKdKjbsyjRepository; private readonly ISqlSugarRepository _lqKdPxmxRepository; private readonly SqlSugarScope _db; private readonly IUserManager _userManager; private readonly WeChatBotService _weChatBotService; private readonly LqKdKdjlbStringGenerator _stringGenerator; /// /// 初始化一个类型的新实例 /// public LqKdKdjlbService( ISqlSugarRepository lqKdKdjlbRepository, ISqlSugarRepository lqKdJksyjRepository, ISqlSugarRepository lqKdKjbsyjRepository, ISqlSugarRepository lqKdPxmxRepository, IUserManager userManager, WeChatBotService weChatBotService, LqKdKdjlbStringGenerator stringGenerator) { _lqKdKdjlbRepository = lqKdKdjlbRepository; _db = _lqKdKdjlbRepository.Context; _lqKdJksyjRepository = lqKdJksyjRepository; _lqKdKjbsyjRepository = lqKdKjbsyjRepository; _lqKdPxmxRepository = lqKdPxmxRepository; _userManager = userManager; _weChatBotService = weChatBotService; _stringGenerator = stringGenerator; } /// /// 获取开单记录表 /// /// 参数 /// [HttpGet("{id}")] public async Task GetInfo(string id) { var entity = await _db.Queryable().FirstAsync(p => p.Id == id); var output = entity.Adapt(); var lqKdJksyjList = await _db.Queryable().Where(w => w.Glkdbh == entity.Id).ToListAsync(); output.lqKdJksyjList = lqKdJksyjList.Adapt>(); var lqKdKjbsyjList = await _db.Queryable().Where(w => w.Glkdbh == entity.Id).ToListAsync(); output.lqKdKjbsyjList = lqKdKjbsyjList.Adapt>(); var lqKdPxmxList = await _db.Queryable().Where(w => w.Glkdbh == entity.Id).ToListAsync(); output.lqKdPxmxList = lqKdPxmxList.Adapt>(); return output; } /// /// 获取开单记录表列表 /// /// 请求参数 /// [HttpGet("")] public async Task GetList([FromQuery] LqKdKdjlbListQueryInput input) { var sidx = input.sidx == null ? "id" : input.sidx; List queryKdrq = input.kdrq != null ? input.kdrq.Split(',').ToObeject>() : null; DateTime? startKdrq = queryKdrq != null ? Ext.GetDateTime(queryKdrq.First()) : null; DateTime? endKdrq = queryKdrq != null ? Ext.GetDateTime(queryKdrq.Last()) : null; var data = await _db.Queryable() .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id)) .WhereIF(!string.IsNullOrEmpty(input.djmd), p => p.Djmd.Equals(input.djmd)) .WhereIF(!string.IsNullOrEmpty(input.jsj), p => p.Jsj.Equals(input.jsj)) .WhereIF(queryKdrq != null, p => p.Kdrq >= new DateTime(startKdrq.ToDate().Year, startKdrq.ToDate().Month, startKdrq.ToDate().Day, 0, 0, 0)) .WhereIF(queryKdrq != null, p => p.Kdrq <= new DateTime(endKdrq.ToDate().Year, endKdrq.ToDate().Month, endKdrq.ToDate().Day, 23, 59, 59)) .WhereIF(!string.IsNullOrEmpty(input.gjlx), p => p.Gjlx.Equals(input.gjlx)) .WhereIF(!string.IsNullOrEmpty(input.hgjg), p => p.Hgjg.Equals(input.hgjg)) .WhereIF(!string.IsNullOrEmpty(input.zdyj), p => p.Zdyj.Equals(input.zdyj)) .WhereIF(!string.IsNullOrEmpty(input.sfyj), p => p.Sfyj.Equals(input.sfyj)) .WhereIF(!string.IsNullOrEmpty(input.qk), p => p.Qk.Equals(input.qk)) .WhereIF(!string.IsNullOrEmpty(input.ckfs), p => p.Ckfs.Equals(input.ckfs)) .WhereIF(!string.IsNullOrEmpty(input.ckmx), p => p.Ckmx.Contains(input.ckmx)) .WhereIF(!string.IsNullOrEmpty(input.fkfs), p => p.Fkfs.Equals(input.fkfs)) .WhereIF(!string.IsNullOrEmpty(input.fkyy), p => p.Fkyy.Equals(input.fkyy)) .WhereIF(!string.IsNullOrEmpty(input.fkpd), p => p.Fkpd.Contains(input.fkpd)) .WhereIF(!string.IsNullOrEmpty(input.khly), p => p.Khly.Equals(input.khly)) .WhereIF(!string.IsNullOrEmpty(input.tjr), p => p.Tjr.Contains(input.tjr)) .WhereIF(!string.IsNullOrEmpty(input.sfskdd), p => p.Sfskdd.Equals(input.sfskdd)) .WhereIF(!string.IsNullOrEmpty(input.jj), p => p.Jj.Contains(input.jj)) .WhereIF(!string.IsNullOrEmpty(input.bz), p => p.Bz.Contains(input.bz)) .WhereIF(!string.IsNullOrEmpty(input.kdhy), p => p.Kdhy.Equals(input.kdhy)) .WhereIF(!string.IsNullOrEmpty(input.kdhyc), p => p.Kdhyc.Contains(input.kdhyc)) .WhereIF(!string.IsNullOrEmpty(input.kdhysjh), p => p.Kdhysjh.Contains(input.kdhysjh)) .WhereIF(!string.IsNullOrEmpty(input.jksyj), p => p.Jksyj.Contains(input.jksyj)) .WhereIF(!string.IsNullOrEmpty(input.kjblsyj), p => p.Kjblsyj.Contains(input.kjblsyj)) .WhereIF(!string.IsNullOrEmpty(input.pxxx), p => p.Pxxx.Contains(input.pxxx)) .Select(it=> new LqKdKdjlbListOutput { id = it.Id, djmd=it.Djmd, jsj=it.Jsj, kdrq=it.Kdrq, gjlx=it.Gjlx, hgjg=it.Hgjg, zdyj=it.Zdyj, sfyj=it.Sfyj, qk=it.Qk, ckfs=it.Ckfs, ckmx=it.Ckmx, fkfs=it.Fkfs, fkyy=it.Fkyy, fkpd=it.Fkpd, khly=it.Khly, tjr=it.Tjr, sfskdd=it.Sfskdd, jj=it.Jj, bz=it.Bz, kdhy=it.Kdhy, kdhyc=it.Kdhyc, kdhysjh=it.Kdhysjh, jksyj=it.Jksyj, kjblsyj=it.Kjblsyj, pxxx=it.Pxxx, }).MergeTable().OrderBy(sidx+" "+input.sort).ToPagedListAsync(input.currentPage, input.pageSize); return PageResult.SqlSugarPageResult(data); } /// /// 新建开单记录表 /// /// 参数 /// [HttpPost("")] public async Task Create([FromBody] LqKdKdjlbCrInput input) { var userInfo = await _userManager.GetUserInfo(); var entity = input.Adapt(); entity.Id = YitIdHelper.NextId().ToString(); try { //开启事务 _db.BeginTran(); //新增开单记录表记录 var newEntity = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteReturnEntityAsync(); var lqKdJksyjEntityList = input.lqKdJksyjList.Adapt>(); if(lqKdJksyjEntityList != null) { foreach (var item in lqKdJksyjEntityList) { item.Id = YitIdHelper.NextId().ToString(); item.Glkdbh = newEntity.Id; } await _db.Insertable(lqKdJksyjEntityList).ExecuteCommandAsync(); } var lqKdKjbsyjEntityList = input.lqKdKjbsyjList.Adapt>(); if(lqKdKjbsyjEntityList != null) { foreach (var item in lqKdKjbsyjEntityList) { item.Id = YitIdHelper.NextId().ToString(); item.Glkdbh = newEntity.Id; } await _db.Insertable(lqKdKjbsyjEntityList).ExecuteCommandAsync(); } var lqKdPxmxEntityList = input.lqKdPxmxList.Adapt>(); if(lqKdPxmxEntityList != null) { foreach (var item in lqKdPxmxEntityList) { item.Id = YitIdHelper.NextId().ToString(); item.Glkdbh = newEntity.Id; } await _db.Insertable(lqKdPxmxEntityList).ExecuteCommandAsync(); } //关闭事务 _db.CommitTran(); // 生成开单记录字符串并发送到企业微信 try { var entityInfo = await GetInfo(newEntity.Id); if (entityInfo != null) { var orderRecordString = _stringGenerator.GenerateOrderRecordString(entityInfo); Console.WriteLine("开单记录字符串生成成功:"); Console.WriteLine(orderRecordString); // 发送到企业微信群 try { var sendResult = await _weChatBotService.SendOrderRecordMessage(orderRecordString); if (sendResult) { Console.WriteLine("开单记录已成功发送到企业微信群"); } else { Console.WriteLine("开单记录发送到企业微信群失败"); } } catch (Exception wechatEx) { Console.WriteLine($"发送企业微信消息异常: {wechatEx.Message}"); } } } catch (Exception ex) { // 字符串生成失败不影响主流程,只记录日志 Console.WriteLine($"生成开单记录字符串失败: {ex.Message}"); } } catch (Exception) { //回滚事务 _db.RollbackTran(); throw NCCException.Oh(ErrorCode.COM1000); } } /// /// 获取开单记录表无分页列表 /// /// 请求参数 /// [NonAction] public async Task GetNoPagingList([FromQuery] LqKdKdjlbListQueryInput input) { var sidx = input.sidx == null ? "id" : input.sidx; List queryKdrq = input.kdrq != null ? input.kdrq.Split(',').ToObeject>() : null; DateTime? startKdrq = queryKdrq != null ? Ext.GetDateTime(queryKdrq.First()) : null; DateTime? endKdrq = queryKdrq != null ? Ext.GetDateTime(queryKdrq.Last()) : null; var data = await _db.Queryable() .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id)) .WhereIF(!string.IsNullOrEmpty(input.djmd), p => p.Djmd.Equals(input.djmd)) .WhereIF(!string.IsNullOrEmpty(input.jsj), p => p.Jsj.Equals(input.jsj)) .WhereIF(queryKdrq != null, p => p.Kdrq >= new DateTime(startKdrq.ToDate().Year, startKdrq.ToDate().Month, startKdrq.ToDate().Day, 0, 0, 0)) .WhereIF(queryKdrq != null, p => p.Kdrq <= new DateTime(endKdrq.ToDate().Year, endKdrq.ToDate().Month, endKdrq.ToDate().Day, 23, 59, 59)) .WhereIF(!string.IsNullOrEmpty(input.gjlx), p => p.Gjlx.Equals(input.gjlx)) .WhereIF(!string.IsNullOrEmpty(input.hgjg), p => p.Hgjg.Equals(input.hgjg)) .WhereIF(!string.IsNullOrEmpty(input.zdyj), p => p.Zdyj.Equals(input.zdyj)) .WhereIF(!string.IsNullOrEmpty(input.sfyj), p => p.Sfyj.Equals(input.sfyj)) .WhereIF(!string.IsNullOrEmpty(input.qk), p => p.Qk.Equals(input.qk)) .WhereIF(!string.IsNullOrEmpty(input.ckfs), p => p.Ckfs.Equals(input.ckfs)) .WhereIF(!string.IsNullOrEmpty(input.ckmx), p => p.Ckmx.Contains(input.ckmx)) .WhereIF(!string.IsNullOrEmpty(input.fkfs), p => p.Fkfs.Equals(input.fkfs)) .WhereIF(!string.IsNullOrEmpty(input.fkyy), p => p.Fkyy.Equals(input.fkyy)) .WhereIF(!string.IsNullOrEmpty(input.fkpd), p => p.Fkpd.Contains(input.fkpd)) .WhereIF(!string.IsNullOrEmpty(input.khly), p => p.Khly.Equals(input.khly)) .WhereIF(!string.IsNullOrEmpty(input.tjr), p => p.Tjr.Contains(input.tjr)) .WhereIF(!string.IsNullOrEmpty(input.sfskdd), p => p.Sfskdd.Equals(input.sfskdd)) .WhereIF(!string.IsNullOrEmpty(input.jj), p => p.Jj.Contains(input.jj)) .WhereIF(!string.IsNullOrEmpty(input.bz), p => p.Bz.Contains(input.bz)) .WhereIF(!string.IsNullOrEmpty(input.kdhy), p => p.Kdhy.Equals(input.kdhy)) .WhereIF(!string.IsNullOrEmpty(input.kdhyc), p => p.Kdhyc.Contains(input.kdhyc)) .WhereIF(!string.IsNullOrEmpty(input.kdhysjh), p => p.Kdhysjh.Contains(input.kdhysjh)) .WhereIF(!string.IsNullOrEmpty(input.jksyj), p => p.Jksyj.Contains(input.jksyj)) .WhereIF(!string.IsNullOrEmpty(input.kjblsyj), p => p.Kjblsyj.Contains(input.kjblsyj)) .WhereIF(!string.IsNullOrEmpty(input.pxxx), p => p.Pxxx.Contains(input.pxxx)) .Select(it=> new LqKdKdjlbListOutput { id = it.Id, djmd=it.Djmd, jsj=it.Jsj, kdrq=it.Kdrq, gjlx=it.Gjlx, hgjg=it.Hgjg, zdyj=it.Zdyj, sfyj=it.Sfyj, qk=it.Qk, ckfs=it.Ckfs, ckmx=it.Ckmx, fkfs=it.Fkfs, fkyy=it.Fkyy, fkpd=it.Fkpd, khly=it.Khly, tjr=it.Tjr, sfskdd=it.Sfskdd, jj=it.Jj, bz=it.Bz, kdhy=it.Kdhy, kdhyc=it.Kdhyc, kdhysjh=it.Kdhysjh, jksyj=it.Jksyj, kjblsyj=it.Kjblsyj, pxxx=it.Pxxx, }).MergeTable().OrderBy(sidx+" "+input.sort).ToListAsync(); return data; } /// /// 导出开单记录表 /// /// 请求参数 /// [HttpGet("Actions/Export")] public async Task Export([FromQuery] LqKdKdjlbListQueryInput input) { var userInfo = await _userManager.GetUserInfo(); var exportData = new List(); if (input.dataType == 0) { var data = Clay.Object(await this.GetList(input)); exportData = data.Solidify>().list; } else { exportData = await this.GetNoPagingList(input); } List paramList = "[{\"value\":\"开单编号\",\"field\":\"id\"},{\"value\":\"开单会员\",\"field\":\"kdhy\"},{\"value\":\"开单会员名称\",\"field\":\"kdhyc\"},{\"value\":\"会员手机号\",\"field\":\"kdhysjh\"},{\"value\":\"单据门店\",\"field\":\"djmd\"},{\"value\":\"金三角\",\"field\":\"jsj\"},{\"value\":\"开单日期\",\"field\":\"kdrq\"},{\"value\":\"顾客类型\",\"field\":\"gjlx\"},{\"value\":\"合作机构\",\"field\":\"hgjg\"},{\"value\":\"整单业绩\",\"field\":\"zdyj\"},{\"value\":\"实付业绩\",\"field\":\"sfyj\"},{\"value\":\"欠款\",\"field\":\"qk\"},{\"value\":\"储扣方式\",\"field\":\"ckfs\"},{\"value\":\"储扣明细\",\"field\":\"ckmx\"},{\"value\":\"付款方式\",\"field\":\"fkfs\"},{\"value\":\"付款医院\",\"field\":\"fkyy\"},{\"value\":\"付款判断\",\"field\":\"fkpd\"},{\"value\":\"客户来源\",\"field\":\"khly\"},{\"value\":\"推荐人\",\"field\":\"tjr\"},{\"value\":\"是否首开订单\",\"field\":\"sfskdd\"},{\"value\":\"简介\",\"field\":\"jj\"},{\"value\":\"备注\",\"field\":\"bz\"},{\"value\":\"健康师业绩\",\"field\":\"jksyj\"},{\"value\":\"科技部老师业绩\",\"field\":\"kjblsyj\"},{\"value\":\"品项信息\",\"field\":\"pxxx\"},]".ToList(); ExcelConfig excelconfig = new ExcelConfig(); excelconfig.FileName = "开单记录表.xls"; excelconfig.HeadFont = "微软雅黑"; excelconfig.HeadPoint = 10; excelconfig.IsAllSizeColumn = true; excelconfig.ColumnModel = new List(); List selectKeyList = input.selectKey.Split(',').ToList(); foreach (var item in selectKeyList) { var isExist = paramList.Find(p => p.field == item); if (isExist != null) { excelconfig.ColumnModel.Add(new ExcelColumnModel() { Column = isExist.field, ExcelColumn = isExist.value }); } } var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName; ExcelExportHelper.Export(exportData, excelconfig, addPath); var fileName = _userManager.UserId + "|" + addPath + "|xls"; var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") }; return output; } /// /// 批量删除开单记录表 /// /// 主键数组 /// [HttpPost("batchRemove")] public async Task BatchRemove([FromBody] List ids) { var entitys = await _db.Queryable().In(it => it.Id, ids).ToListAsync(); if (entitys.Count > 0) { try { //开启事务 _db.BeginTran(); //批量删除开单记录表 await _db.Deleteable().In(d => d.Id,ids).ExecuteCommandAsync(); //清空子表数据 await _db.Deleteable().In(u => u.Glkdbh,ids).ExecuteCommandAsync(); //清空子表数据 await _db.Deleteable().In(u => u.Glkdbh,ids).ExecuteCommandAsync(); //清空子表数据 await _db.Deleteable().In(u => u.Glkdbh,ids).ExecuteCommandAsync(); //关闭事务 _db.CommitTran(); } catch (Exception) { //回滚事务 _db.RollbackTran(); throw NCCException.Oh(ErrorCode.COM1002); } } } /// /// 更新开单记录表 /// /// 主键 /// 参数 /// [HttpPut("{id}")] public async Task Update(string id, [FromBody] LqKdKdjlbUpInput input) { var entity = input.Adapt(); try { //开启事务 _db.BeginTran(); //更新开单记录表记录 await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); //清空原有数据 await _db.Deleteable().Where(u => u.Glkdbh == id).ExecuteCommandAsync(); //新增新数据 var lqKdJksyjEntityList = input.lqKdJksyjList.Adapt>(); if(lqKdJksyjEntityList != null) { foreach (var item in lqKdJksyjEntityList) { item.Id = YitIdHelper.NextId().ToString(); item.Glkdbh = entity.Id; } await _db.Insertable(lqKdJksyjEntityList).ExecuteCommandAsync(); } //清空原有数据 await _db.Deleteable().Where(u => u.Glkdbh == id).ExecuteCommandAsync(); //新增新数据 var lqKdKjbsyjEntityList = input.lqKdKjbsyjList.Adapt>(); if(lqKdKjbsyjEntityList != null) { foreach (var item in lqKdKjbsyjEntityList) { item.Id = YitIdHelper.NextId().ToString(); item.Glkdbh = entity.Id; } await _db.Insertable(lqKdKjbsyjEntityList).ExecuteCommandAsync(); } //清空原有数据 await _db.Deleteable().Where(u => u.Glkdbh == id).ExecuteCommandAsync(); //新增新数据 var lqKdPxmxEntityList = input.lqKdPxmxList.Adapt>(); if(lqKdPxmxEntityList != null) { foreach (var item in lqKdPxmxEntityList) { item.Id = YitIdHelper.NextId().ToString(); item.Glkdbh = entity.Id; } await _db.Insertable(lqKdPxmxEntityList).ExecuteCommandAsync(); } //关闭事务 _db.CommitTran(); } catch (Exception) { //回滚事务 _db.RollbackTran(); throw NCCException.Oh(ErrorCode.COM1001); } } /// /// 删除开单记录表 /// /// [HttpDelete("{id}")] public async Task Delete(string id) { var entity = await _db.Queryable().FirstAsync(p => p.Id == id); _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005); try { //开启事务 _db.BeginTran(); //删除开单记录表记录 await _db.Deleteable().Where(d => d.Id == id).ExecuteCommandAsync(); //清空子表数据 await _db.Deleteable().Where(u => u.Glkdbh == id).ExecuteCommandAsync(); //清空子表数据 await _db.Deleteable().Where(u => u.Glkdbh == id).ExecuteCommandAsync(); //清空子表数据 await _db.Deleteable().Where(u => u.Glkdbh == id).ExecuteCommandAsync(); //关闭事务 _db.CommitTran(); } catch (Exception) { //回滚事务 _db.RollbackTran(); throw NCCException.Oh(ErrorCode.COM1002); } } } }