/*********************************************************************** * Project: baifenBinfa * ProjectName: 百分兵法管理系统 * Web: http://chuanyin.com * Author: * Email: * CreateTime: 2022/9/16 20:41:09 * Description: 暂无 ***********************************************************************/ using System; using System.ComponentModel; using System.IO; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using CoreCms.Net.Configuration; using CoreCms.Net.Model.Entities; using CoreCms.Net.Model.Entities.Expression; using CoreCms.Net.Model.FromBody; using CoreCms.Net.Model.ViewModels.UI; using CoreCms.Net.Filter; using CoreCms.Net.IServices; using CoreCms.Net.Utility.Helper; using CoreCms.Net.Utility.Extensions; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using SqlSugar; using Newtonsoft.Json; using CoreCms.Net.Model.ViewModels.YiLianYun; using CoreCms.Net.Web.Admin.Infrastructure; using Flurl.Http; namespace CoreCms.Net.Web.Admin.Controllers { /// /// 打印机列表 /// [Description("打印机列表")] [Route("api/[controller]/[action]")] [ApiController] [RequiredErrorForAdmin] [Authorize(Permissions.Name)] public class CoreCmsPrinterController : ControllerBase { private readonly IWebHostEnvironment _webHostEnvironment; private readonly ICoreCmsPrinterServices _coreCmsPrinterServices; private readonly ICoreCmsStoreServices _storeServices; /// /// 构造函数 /// public CoreCmsPrinterController(IWebHostEnvironment webHostEnvironment , ICoreCmsPrinterServices coreCmsPrinterServices, ICoreCmsStoreServices storeServices) { _webHostEnvironment = webHostEnvironment; _coreCmsPrinterServices = coreCmsPrinterServices; _storeServices = storeServices; } #region 获取列表============================================================ // POST: Api/CoreCmsPrinter/GetPageList /// /// 获取列表 /// /// [HttpPost] [Description("获取列表")] public async Task GetPageList() { var jm = new AdminUiCallBack(); var pageCurrent = Request.Form["page"].FirstOrDefault().ObjectToInt(1); var pageSize = Request.Form["limit"].FirstOrDefault().ObjectToInt(30); var where = PredicateBuilder.True(); //获取排序字段 var orderField = Request.Form["orderField"].FirstOrDefault(); Expression> orderEx = orderField switch { "id" => p => p.id, "name" => p => p.name, "code" => p => p.code, "clientId" => p => p.clientId, "clientSecret" => p => p.clientSecret, "machineCode" => p => p.machineCode, "msign" => p => p.msign, "printerName" => p => p.printerName, "phone" => p => p.phone, "accessToken" => p => p.accessToken, "refreshToken" => p => p.refreshToken, "expiresIn" => p => p.expiresIn, "expiressEndTime" => p => p.expiressEndTime, "parameters" => p => p.parameters, "createTime" => p => p.createTime, "isDefault" => p => p.isDefault, "isOpen" => p => p.isOpen, "storeId" => p => p.storeId, _ => p => p.id }; //设置排序方式 var orderDirection = Request.Form["orderDirection"].FirstOrDefault(); var orderBy = orderDirection switch { "asc" => OrderByType.Asc, "desc" => OrderByType.Desc, _ => OrderByType.Desc }; //查询筛选 //序列 int var id = Request.Form["id"].FirstOrDefault().ObjectToInt(0); if (id > 0) { where = where.And(p => p.id == id); } //应用名称 nvarchar var name = Request.Form["name"].FirstOrDefault(); if (!string.IsNullOrEmpty(name)) { where = where.And(p => p.name.Contains(name)); } //应用编码 nvarchar var code = Request.Form["code"].FirstOrDefault(); if (!string.IsNullOrEmpty(code)) { where = where.And(p => p.code.Contains(code)); } //易联云应用id nvarchar var clientId = Request.Form["clientId"].FirstOrDefault(); if (!string.IsNullOrEmpty(clientId)) { where = where.And(p => p.clientId.Contains(clientId)); } //易联云应用密钥 nvarchar var clientSecret = Request.Form["clientSecret"].FirstOrDefault(); if (!string.IsNullOrEmpty(clientSecret)) { where = where.And(p => p.clientSecret.Contains(clientSecret)); } //易联云终端号 nvarchar var machineCode = Request.Form["machineCode"].FirstOrDefault(); if (!string.IsNullOrEmpty(machineCode)) { where = where.And(p => p.machineCode.Contains(machineCode)); } //易联云终端密钥 nvarchar var msign = Request.Form["msign"].FirstOrDefault(); if (!string.IsNullOrEmpty(msign)) { where = where.And(p => p.msign.Contains(msign)); } //打印机名称 nvarchar var printerName = Request.Form["printerName"].FirstOrDefault(); if (!string.IsNullOrEmpty(printerName)) { where = where.And(p => p.printerName.Contains(printerName)); } //联系电话 nvarchar var phone = Request.Form["phone"].FirstOrDefault(); if (!string.IsNullOrEmpty(phone)) { where = where.And(p => p.phone.Contains(phone)); } //访问令牌,API调用时需要,令牌可以重复使用无失效时间,请开发者全局保存 nvarchar var accessToken = Request.Form["accessToken"].FirstOrDefault(); if (!string.IsNullOrEmpty(accessToken)) { where = where.And(p => p.accessToken.Contains(accessToken)); } //更新access_token所需,有效时间35天 nvarchar var refreshToken = Request.Form["refreshToken"].FirstOrDefault(); if (!string.IsNullOrEmpty(refreshToken)) { where = where.And(p => p.refreshToken.Contains(refreshToken)); } //令牌的有效时间,单位秒 (30天),注:该模式下可忽略此参数 int var expiresIn = Request.Form["expiresIn"].FirstOrDefault().ObjectToInt(0); if (expiresIn > 0) { where = where.And(p => p.expiresIn == expiresIn); } //有效期截止时间 datetime var expiressEndTime = Request.Form["expiressEndTime"].FirstOrDefault(); if (!string.IsNullOrEmpty(expiressEndTime)) { if (expiressEndTime.Contains("到")) { var dts = expiressEndTime.Split("到"); var dtStart = dts[0].Trim().ObjectToDate(); where = where.And(p => p.expiressEndTime > dtStart); var dtEnd = dts[1].Trim().ObjectToDate(); where = where.And(p => p.expiressEndTime < dtEnd); } else { var dt = expiressEndTime.ObjectToDate(); where = where.And(p => p.expiressEndTime > dt); } } //其他参数 nvarchar var parameters = Request.Form["parameters"].FirstOrDefault(); if (!string.IsNullOrEmpty(parameters)) { where = where.And(p => p.parameters.Contains(parameters)); } //创建时间 datetime var createTime = Request.Form["createTime"].FirstOrDefault(); if (!string.IsNullOrEmpty(createTime)) { if (createTime.Contains("到")) { var dts = createTime.Split("到"); var dtStart = dts[0].Trim().ObjectToDate(); where = where.And(p => p.createTime > dtStart); var dtEnd = dts[1].Trim().ObjectToDate(); where = where.And(p => p.createTime < dtEnd); } else { var dt = createTime.ObjectToDate(); where = where.And(p => p.createTime > dt); } } //是否默认 bit var isDefault = Request.Form["isDefault"].FirstOrDefault(); if (!string.IsNullOrEmpty(isDefault) && isDefault.ToLowerInvariant() == "true") { where = where.And(p => p.isDefault == true); } else if (!string.IsNullOrEmpty(isDefault) && isDefault.ToLowerInvariant() == "false") { where = where.And(p => p.isDefault == false); } //是否开启 bit var isOpen = Request.Form["isOpen"].FirstOrDefault(); if (!string.IsNullOrEmpty(isOpen) && isOpen.ToLowerInvariant() == "true") { where = where.And(p => p.isOpen == true); } else if (!string.IsNullOrEmpty(isOpen) && isOpen.ToLowerInvariant() == "false") { where = where.And(p => p.isOpen == false); } //绑定门店 int var storeId = Request.Form["storeId"].FirstOrDefault().ObjectToInt(0); if (storeId > 0) { where = where.And(p => p.storeId == storeId); } //获取数据 var list = await _coreCmsPrinterServices.QueryPageAsync(where, orderEx, orderBy, pageCurrent, pageSize, true); //返回数据 jm.data = list; jm.code = 0; jm.count = list.TotalCount; jm.msg = "数据调用成功!"; return jm; } #endregion #region 首页数据============================================================ // POST: Api/CoreCmsPrinter/GetIndex /// /// 首页数据 /// /// [HttpPost] [Description("首页数据")] public async Task GetIndex() { //返回数据 var jm = new AdminUiCallBack { code = 0 }; var stores = await _storeServices.QueryAsync(true, true); var thirdPartyEquipment = EnumHelper.EnumToList(); jm.data = new { stores, thirdPartyEquipment }; return jm; } #endregion #region 创建数据============================================================ // POST: Api/CoreCmsPrinter/GetCreate /// /// 创建数据 /// /// [HttpPost] [Description("创建数据")] public async Task GetCreate() { //返回数据 var jm = new AdminUiCallBack { code = 0 }; var stores = await _storeServices.QueryAsync(true, true); var thirdPartyEquipment = EnumHelper.EnumToList(); jm.data = new { stores, thirdPartyEquipment }; return jm; } #endregion #region 创建提交============================================================ // POST: Api/CoreCmsPrinter/DoCreate /// /// 创建提交 /// /// /// [HttpPost] [Description("创建提交")] public async Task DoCreate([FromBody] CoreCmsPrinter entity) { var jm = await _coreCmsPrinterServices.InsertAsync(entity); return jm; } #endregion #region 编辑数据============================================================ // POST: Api/CoreCmsPrinter/GetEdit /// /// 编辑数据 /// /// /// [HttpPost] [Description("编辑数据")] public async Task GetEdit([FromBody] FMIntId entity) { var jm = new AdminUiCallBack(); var model = await _coreCmsPrinterServices.QueryByIdAsync(entity.id, false); if (model == null) { jm.msg = "不存在此信息"; return jm; } jm.code = 0; var stores = await _storeServices.QueryAsync(true, true); var thirdPartyEquipment = EnumHelper.EnumToList(); jm.data = new { model, stores, thirdPartyEquipment }; return jm; } #endregion #region 编辑提交============================================================ // POST: Api/CoreCmsPrinter/Edit /// /// 编辑提交 /// /// /// [HttpPost] [Description("编辑提交")] public async Task DoEdit([FromBody] CoreCmsPrinter entity) { var jm = await _coreCmsPrinterServices.UpdateAsync(entity); return jm; } #endregion #region 删除数据============================================================ // POST: Api/CoreCmsPrinter/DoDelete/10 /// /// 单选删除 /// /// /// [HttpPost] [Description("单选删除")] public async Task DoDelete([FromBody] FMIntId entity) { var jm = new AdminUiCallBack(); var model = await _coreCmsPrinterServices.ExistsAsync(p => p.id == entity.id); if (!model) { jm.msg = GlobalConstVars.DataisNo; return jm; } jm = await _coreCmsPrinterServices.DeleteByIdAsync(entity.id); return jm; } #endregion #region 刷新Token============================================================ // POST: Api/CoreCmsPrinter/DoRefreshToken/10 /// /// 刷新Token /// /// /// [HttpPost] [Description("刷新Token")] public async Task DoRefreshToken([FromBody] FMIntId entity) { var jm = new AdminUiCallBack(); var model = await _coreCmsPrinterServices.QueryByClauseAsync(p => p.id == entity.id); if (model == null) { jm.msg = GlobalConstVars.DataisNo; return jm; } RefreshYiLianYunToken refreshToken = new RefreshYiLianYunToken { client_id = model.clientId, grant_type = "client_credentials", timestamp = CommonHelper.GetDateTimeStamp(DateTime.Now), scope = "all", id = Guid.NewGuid().ToString() }; refreshToken.sign = CommonHelper.Md5For32((refreshToken.client_id + refreshToken.timestamp + model.clientSecret).ToLowerInvariant()).ToLowerInvariant(); var resultData = await YiLianYunConfig.AuthUrl.PostJsonAsync(refreshToken).ReceiveJson(); //将获取到的数据存入数据库 if (resultData.error == "0") { model.accessToken = resultData.body.access_token; model.refreshToken = resultData.body.refresh_token; model.expiresIn = resultData.body.expires_in; model.expiressEndTime = DateTime.Now.AddSeconds(resultData.body.expires_in); await _coreCmsPrinterServices.UpdateAsync( p => new CoreCmsPrinter() { accessToken = resultData.body.access_token, refreshToken = resultData.body.refresh_token, expiresIn = resultData.body.expires_in, expiressEndTime = model.expiressEndTime, parameters = JsonConvert.SerializeObject(resultData.body) }, p => p.clientId == model.clientId && p.clientSecret == model.clientSecret, true); //await _coreCmsPrinterServices.UpdateAsync( // p => new CoreCmsPrinter() // { // accessToken = resultData.body.access_token, // refreshToken = resultData.body.refresh_token, // expiresIn = resultData.body.expires_in, // expiressEndTime = model.expiressEndTime, // parameters = JsonConvert.SerializeObject(resultData.body) // }, p => p.id == model.id, true); jm.code = 1; jm.msg = "刷新成功"; } else { jm.msg = "刷新AccessToken:" + resultData.error_description; return jm; } return jm; } #endregion #region 打印测试页============================================================ // POST: Api/CoreCmsPrinter/DoPrintTest/10 /// /// 打印测试页 /// /// /// [HttpPost] [Description("打印测试页")] public async Task DoPrintTest([FromBody] FMIntId entity) { var jm = new AdminUiCallBack(); var model = await _coreCmsPrinterServices.QueryByClauseAsync(p => p.id == entity.id); if (model == null) { jm.msg = GlobalConstVars.DataisNo; return jm; } var isNeedToken = false; if (string.IsNullOrEmpty(model.accessToken) || model.expiressEndTime == null) { isNeedToken = true; } else { //判断是否过期 var dt = DateTime.Now; if (dt >= model.expiressEndTime) { var ts = dt - Convert.ToDateTime(model.expiressEndTime); if (ts.Days > 35) { isNeedToken = true; } else { RefreshYiLianYunToken refreshToken = new RefreshYiLianYunToken { client_id = model.clientId, grant_type = "client_credentials", timestamp = CommonHelper.GetDateTimeStamp(DateTime.Now), scope = "all", id = Guid.NewGuid().ToString() }; refreshToken.sign = CommonHelper.Md5For32((refreshToken.client_id + refreshToken.timestamp + model.clientSecret).ToLowerInvariant()).ToLowerInvariant(); var resultData = await YiLianYunConfig.AuthUrl.PostJsonAsync(refreshToken).ReceiveJson(); //将获取到的数据存入数据库 if (resultData.error == "0") { model.accessToken = resultData.body.access_token; model.refreshToken = resultData.body.refresh_token; model.expiresIn = resultData.body.expires_in; model.expiressEndTime = DateTime.Now.AddSeconds(resultData.body.expires_in); //await _coreCmsPrinterServices.UpdateAsync( // p => new CoreCmsPrinter() // { // accessToken = resultData.body.access_token, // refreshToken = resultData.body.refresh_token, // expiresIn = resultData.body.expires_in, // expiressEndTime = model.expiressEndTime, // parameters = JsonConvert.SerializeObject(resultData.body) // }, p => p.id == model.id, true); await _coreCmsPrinterServices.UpdateAsync( p => new CoreCmsPrinter() { accessToken = resultData.body.access_token, refreshToken = resultData.body.refresh_token, expiresIn = resultData.body.expires_in, expiressEndTime = model.expiressEndTime, parameters = JsonConvert.SerializeObject(resultData.body) }, p => p.clientId == model.clientId && p.clientSecret == model.clientSecret, true); } else { jm.msg = "刷新AccessToken:" + resultData.error_description; return jm; } } } } if (isNeedToken) { var getToken = new YiLianYunParam { client_id = model.clientId, grant_type = "client_credentials", timestamp = CommonHelper.GetDateTimeStamp(DateTime.Now), scope = "all", id = Guid.NewGuid().ToString() }; getToken.sign = CommonHelper.Md5For32((getToken.client_id + getToken.timestamp + model.clientSecret).ToLowerInvariant()).ToLowerInvariant(); var resultData = await YiLianYunConfig.AuthUrl.PostJsonAsync(getToken).ReceiveJson(); //将获取到的数据存入数据库 if (resultData.error == "0") { model.accessToken = resultData.body.access_token; model.refreshToken = resultData.body.refresh_token; model.expiresIn = resultData.body.expires_in; model.expiressEndTime = DateTime.Now.AddSeconds(resultData.body.expires_in); //await _coreCmsPrinterServices.UpdateAsync( // p => new CoreCmsPrinter() // { // accessToken = resultData.body.access_token, // refreshToken = resultData.body.refresh_token, // expiresIn = resultData.body.expires_in, // expiressEndTime = model.expiressEndTime, // parameters = JsonConvert.SerializeObject(resultData.body) // }, p => p.id == model.id, true); await _coreCmsPrinterServices.UpdateAsync( p => new CoreCmsPrinter() { accessToken = resultData.body.access_token, refreshToken = resultData.body.refresh_token, expiresIn = resultData.body.expires_in, expiressEndTime = model.expiressEndTime, parameters = JsonConvert.SerializeObject(resultData.body) }, p => p.clientId == model.clientId && p.clientSecret == model.clientSecret, true); } else { jm.msg = "获取AccessToken:" + resultData.error_description; return jm; } } //获取打印机是否在线 var statusParam = new GetPrintStatusParam { client_id = model.clientId, access_token = model.accessToken, machine_code = model.machineCode, timestamp = CommonHelper.GetDateTimeStamp(DateTime.Now), id = Guid.NewGuid().ToString() }; statusParam.sign = CommonHelper.Md5For32((statusParam.client_id + statusParam.timestamp + model.clientSecret).ToLowerInvariant()).ToLowerInvariant(); var getPrintStatusResult = await YiLianYunConfig.GetPrintStatusUrl.PostJsonAsync(statusParam).ReceiveJson(); if (getPrintStatusResult.error != "0") { jm.msg = "获取打印机在线状态:" + getPrintStatusResult.error_description; return jm; } else { switch (getPrintStatusResult.body.state) { case "0": jm.msg = "机器未在线"; return jm; case "2": jm.msg = "机器缺纸"; return jm; default: { var order = new CoreCmsOrder() { createTime = DateTime.Now, orderId = DateTime.Now.ToLongDateString(), pointMoney = 10, orderDiscountAmount = 0, goodsDiscountAmount = 0, couponDiscountAmount = 0, orderAmount = 199, shipAreaName = "湖南省", shipAddress = "怀化市鹤城区迎丰中路佳慧中央商厦A栋1513-1514(南山田舍)", shipName = "大灰灰", shipMobile = "19145919666" }; var printStr = YiLianYunConfig.PrintTmpModel(order); //小票打印 WordPrintRespone wordPrintRespone = new WordPrintRespone { client_id = model.clientId, access_token = model.accessToken, machine_code = model.machineCode, content = printStr.ToString(), origin_id = order.orderId, timestamp = CommonHelper.GetDateTimeStamp(DateTime.Now) }; wordPrintRespone.sign = CommonHelper.Md5For32((wordPrintRespone.client_id + wordPrintRespone.timestamp + model.clientSecret).ToLowerInvariant()).ToLowerInvariant(); wordPrintRespone.id = Guid.NewGuid().ToString(); //打印文本:缺少参数!请检查参数信息!!或更改下请求头:Content-Type:application/x-www-form-urlencoded var resultData = await YiLianYunConfig.PrintTextUrl.WithHeader("Content-Type", "application/x-www-form-urlencoded").PostUrlEncodedAsync(wordPrintRespone).ReceiveJson(); //当token返回失败时 if (resultData.error != "0") { jm.msg = "打印文本:" + resultData.error_description; return jm; } else { jm.code = 1; jm.msg = "打印成功"; } break; } } } return jm; } #endregion #region 预览数据============================================================ // POST: Api/CoreCmsPrinter/GetDetails/10 /// /// 预览数据 /// /// /// [HttpPost] [Description("预览数据")] public async Task GetDetails([FromBody] FMIntId entity) { var jm = new AdminUiCallBack(); var model = await _coreCmsPrinterServices.QueryByIdAsync(entity.id, false); if (model == null) { jm.msg = "不存在此信息"; return jm; } jm.code = 0; var stores = await _storeServices.QueryAsync(true, true); var thirdPartyEquipment = EnumHelper.EnumToList(); jm.data = new { model, stores, thirdPartyEquipment }; return jm; } #endregion #region 设置是否默认============================================================ // POST: Api/CoreCmsPrinter/DoSetisDefault/10 /// /// 设置是否默认 /// /// /// [HttpPost] [Description("设置是否默认")] public async Task DoSetIsDefault([FromBody] FMUpdateBoolDataByIntId entity) { var jm = new AdminUiCallBack(); var oldModel = await _coreCmsPrinterServices.QueryByIdAsync(entity.id, false); if (oldModel == null) { jm.msg = "不存在此信息"; return jm; } oldModel.isDefault = (bool)entity.data; //判断是否除了自己其他都不是默认 var haveOtherDefault = await _coreCmsPrinterServices.ExistsAsync(p => p.isDefault == true && p.id != entity.id); if (haveOtherDefault == false && oldModel.isDefault == false) { jm.msg = "至少有一个要是默认打印机"; return jm; } var bl = await _coreCmsPrinterServices.UpdateAsync(p => new CoreCmsPrinter() { isDefault = oldModel.isDefault }, p => p.id == oldModel.id, true); //将其他打印机设置为非默认 if (bl && oldModel.isDefault == true) { await _coreCmsPrinterServices.UpdateAsync(p => new CoreCmsPrinter() { isDefault = false }, p => p.id != oldModel.id, true); } jm.code = bl ? 0 : 1; jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure; return jm; } #endregion #region 设置是否开启============================================================ // POST: Api/CoreCmsPrinter/DoSetisOpen/10 /// /// 设置是否开启 /// /// /// [HttpPost] [Description("设置是否开启")] public async Task DoSetIsOpen([FromBody] FMUpdateBoolDataByIntId entity) { var jm = new AdminUiCallBack(); var oldModel = await _coreCmsPrinterServices.QueryByIdAsync(entity.id, false); if (oldModel == null) { jm.msg = "不存在此信息"; return jm; } oldModel.isOpen = (bool)entity.data; var bl = await _coreCmsPrinterServices.UpdateAsync(p => new CoreCmsPrinter() { isOpen = oldModel.isOpen }, p => p.id == oldModel.id); jm.code = bl ? 0 : 1; jm.msg = bl ? GlobalConstVars.EditSuccess : GlobalConstVars.EditFailure; return jm; } #endregion } }