!114 发货方式调增为批量订单发货和单个订单发货。增加【门店自提】自动发货,并支持后台设置开启,当开启后【门店自提】订单将自动发货,并生成提货码,用户凭借提货码或手机号码到门店核销。增加自定发货定时任务。

* Merge branch 'master' into dahuihui/develop
* 【后端】发货方式调增为批量订单发货和单个订单发货;【后端】增加【门店自提】自动发货,并支持后台设置开启,当开启后【门店自提】订单将自动发货,…
* 调试商品展示页面
* 因mysql不支持一定格式数据排序,调整部分longtext字段为text格式,保持富文本字段为longtext格式
* Merge branch 'master' into dahuihui/develop
* 修复后台页面设计,导航组跳转问题 #I42RJ4   #I3VUZR
* 修复后台页面设计,导航组跳转问题 #I42RJ4
* Merge branch 'master' into dahuihui/develop
* Merge branch 'master' into dahuihui/develop
* 微信小程序登录获取手机号码不成功
* 修复代理商品池商品同步价格展示问题。
* Merge branch 'develop' into dahuihui/develop
* 修复sku删除单个货品后,未清理cache导致重复加载的问题。(感谢vikinghunter提供修改建议) #I44XMY
* 1、【后端】修复后台上传类型不同导致文件夹路径问题差异化问题。 #I45QKZ
* Merge branch 'develop' into dahuihui/develop
* 1、【后端】修复保存商品未更新sku序列问题。#I44OOG
* 修复更新pages主键无说明导致更新失败问题。
* 修复sku输入小写逗号,导致前端展示会被截断的问题。
* 修复代码生成器引用实体目录错误问题。
* Merge branch 'develop' into dahuihui/develop
* 修复redis提示端口号错误问题。
* 【接口】修复微信支付失败回调存储数据长度过短导致写入失败问题。
* 同步
* 增加消息转发类型
* 调整细节
* 修复github链接
* 1、【后端】移除业务逻辑中的【MediatR】及中介者模式,启用【Redis队列】处理。
* Merge branch 'develop' into dahuihui/develop
* 升级编辑器为CKEditor5
* Merge branch 'develop' into dahuihui/develop
* Merge branch 'develop' into dahuihui/develop
* 【后端】优化后端设置权限角色,反射controller和action的效率问题。
* 【后端】修复后端编辑商品问题。
* 【后端】修复腾讯云cos存储未调用bucket问题。#I42DF0
* Merge branch 'develop' into dahuihui/develop
* 启用新域名及演示平台
* Merge branch 'develop' into dahuihui/develop
* Merge branch 'develop' into dahuihui/develop
* 调整说明
* Merge branch 'develop' into dahuihui/develop
* 删除不需要的菜单
* 修复域名转发获取ip地址长度过长问题。
* 1、【后端】调整全局错误返回提示语。2、【数据库】修复20日删除3个表后,未清理干净问题。
* Merge branch 'develop' into dahuihui/develop
* Merge branch 'develop' into dahuihui/develop
* 调整全局错误返回提示语
* 修复商品批量处理报错的问题并优化展示界面。#I3X8PP
* Merge branch 'develop' into dahuihui/develop
* Merge branch 'develop' into dahuihui/develop
* 增加过滤敏感词的功能。#I3W6CM
* 增加Issue 和 Pull Request 模板
* 修复自定义上传路径上传至站点根目录,而非wwwroot的问题 #I41TD1
* Merge branch 'develop' into dahuihui/develop
* 修复自定义上传路径的表单命名异常问题
* 使用新数据库
* 【数据库】修复mysql数据库decimal类型未带小数的问题。#I3WAUY
* 更新数据库及脚本
* 2021-07-20
* Merge branch 'develop' into dahuihui/develop
* 修复webapi不进入调试断点的问题。
* Merge branch 'develop' into dahuihui/develop
* 修复后台前后端分离table面板启用自定义域名问题。
* 修复后台前后端分离域名未增加到html问题。
* Merge branch 'develop' into dahuihui/develop
* 【后端】修复修改登录用户真实姓名长度问题。
* 修复后台管理配送方式维护错误问题
* 1、修复小程序注册问题,导致交互事情。不然盛派的组件有bug,在不注册微信公众号只注册微信小程序的时候,进行小程序消息操作,默认还是走的是微…
* 修复消息模板不推送的问题
* Merge branch 'develop' into dahuihui/develop
* Merge branch 'develop' into dahuihui/develop
* 修复过期失效文档
* 调整代码生成器,增加初始化事务
* 调整接口端提示界面
* 修复弹窗不居中问题
* 调整一些命名方式
* 修复uni-app前端,用户订单列表【确认收货】按钮失效问题
* 1、修复mysql数据库下,报表统计sql的语法错误。2、为方便前端在不部署接口及后端的情况下测试uni-app前端,默认增加了测试接口地址…
* Merge branch 'develop' into dahuihui/develop
* 调整命名
* 增加docker-compose部署
* Merge branch 'develop' into dahuihui/develop
* 修复因linux下存在数据与文件名称大小写不对应,导致找不到数据库表的问题,特重新发布一份表名与实体名称一一对应脚本。
* 新mysql表名存在大小写问题
This commit is contained in:
大灰灰
2021-08-24 05:26:40 +00:00
parent d097a72778
commit 71497600a5
18 changed files with 1307 additions and 55 deletions
@@ -358,6 +358,10 @@
/// </summary>
public const string OrderFinishCommand = "OrderFinishCommandQueue";
/// <summary>
/// 订单完成时,门店订单自动发货
/// </summary>
public const string OrderAutomaticDelivery = "OrderAutomaticDeliveryQueue";
/// <summary>
/// 订单完结后走打印模块
/// </summary>
public const string OrderPrint = "OrderPrintQueue";
@@ -96,6 +96,10 @@ namespace CoreCms.Net.Configuration
/// </summary>
public const string RemindOrderTime = "remindOrderTime";
/// <summary>
/// 门店订单自动发货
/// </summary>
public const string StoreOrderAutomaticDelivery = "storeOrderAutomaticDelivery";
//分销功能(老分销)=============================================================
/// <summary>
@@ -73,6 +73,11 @@ namespace CoreCms.Net.Configuration
di.Add(SystemSettingConstVars.ReshipAddress, new DictionaryKeyValues() { sKey = "退货详细地址", sValue = "" });
di.Add(SystemSettingConstVars.ReshipCoordinate, new DictionaryKeyValues() { sKey = "退货坐标", sValue = "" });
di.Add(SystemSettingConstVars.StoreOrderAutomaticDelivery, new DictionaryKeyValues() { sKey = "门店自提自动发货", sValue = "2" });
//分销功能
di.Add(SystemSettingConstVars.OpenDistribution, new DictionaryKeyValues() { sKey = "是否开启三级分销", sValue = "1" });
@@ -226,5 +231,24 @@ namespace CoreCms.Net.Configuration
};
return list;
}
/// <summary>
/// 获取系统默认发货物流方式
/// </summary>
/// <returns></returns>
public static List<CommonKeyValues> GetSystemLogistics()
{
var list = new List<CommonKeyValues>
{
new CommonKeyValues() {sDescription = "本地同城配送", sValue = "无", sKey = "benditongcheng"},
new CommonKeyValues() {sDescription = "本地上门自提", sValue = "无", sKey = "shangmenziti"},
};
return list;
}
}
}
@@ -29,6 +29,7 @@ namespace CoreCms.Net.Core.Config
//对应的订阅者类,需要new一个实例对象,当然你也可以传参,比如日志对象
m.ListSubscribe = new List<Type>() {
typeof(OrderAgentOrDistributionSubscribe),
typeof(OrderAutomaticDeliverySubscribe),
typeof(OrderFinishCommandSubscribe),
typeof(OrderPrintSubscribe),
@@ -47,6 +47,27 @@ namespace CoreCms.Net.IServices
string memo = "");
/// <summary>
/// 发货,单个订单发货
/// </summary>
/// <param name="orderId">英文逗号分隔的订单号</param>
/// <param name="logiCode">物流公司编码</param>
/// <param name="logiNo">物流单号</param>
/// <param name="items">发货明细</param>
/// <param name="storeId">店铺收货地址</param>
/// <param name="shipName">收货人姓名</param>
/// <param name="shipMobile">收货人电话</param>
/// <param name="shipAreaId">省市区id</param>
/// <param name="shipAddress">收货地址</param>
/// <param name="memo">发货描述</param>
/// <returns></returns>
Task<WebApiCallBack> Ship(string orderId, string logiCode, string logiNo, Dictionary<int, int> items,
int storeId = 0, string shipName = "", string shipMobile = "", int shipAreaId = 0, string shipAddress = "",
string memo = "");
/// <summary>
/// 物流信息查询根据快递编码和单号查询(快递100)未使用
/// </summary>
@@ -148,6 +148,11 @@ namespace CoreCms.Net.IServices
/// <returns></returns>
Task<WebApiCallBack> GetOrderShipInfo(string[] ids);
/// <summary>
/// 构建单个需要发货的数据,和发货单密切关联
/// </summary>
/// <returns></returns>
Task<WebApiCallBack> GetOrderShipInfo(string orderId);
/// <summary>
/// 发货改状态
@@ -158,6 +163,24 @@ namespace CoreCms.Net.IServices
Task<WebApiCallBack> EditShipStatus(string orderId, Dictionary<int, int> items);
/// <summary>
/// 批量订单发货
/// </summary>
/// <param name="ids">订单标号</param>
/// <param name="logiCode">物流公司编码</param>
/// <param name="logiNo">物流单号</param>
/// <param name="items">发货明细</param>
/// <param name="shipName">收货人姓名</param>
/// <param name="shipMobile">收货人电话</param>
/// <param name="shipAddress">收货地址</param>
/// <param name="memo">发货描述</param>
/// <param name="storeId">店铺收货地址</param>
/// <param name="shipAreaId">省市区id</param>
/// <returns></returns>
Task<WebApiCallBack> BatchShip(string[] ids, string logiCode, string logiNo,
Dictionary<int, int> items, string shipName, string shipMobile, string shipAddress, string memo,
int storeId = 0, int shipAreaId = 0);
/// <summary>
/// 订单发货
/// </summary>
@@ -172,10 +195,12 @@ namespace CoreCms.Net.IServices
/// <param name="storeId">店铺收货地址</param>
/// <param name="shipAreaId">省市区id</param>
/// <returns></returns>
Task<WebApiCallBack> OrderShip(string[] ids, string logiCode, string logiNo,
Task<WebApiCallBack> Ship(string ids, string logiCode, string logiNo,
Dictionary<int, int> items, string shipName, string shipMobile, string shipAddress, string memo,
int storeId = 0, int shipAreaId = 0);
/// <summary>
/// 后台完成订单
/// </summary>
+23 -1
View File
@@ -318,7 +318,7 @@ namespace CoreCms.Net.Model.ViewModels.View
/// <summary>
/// 后端订单发货返回实体
/// 后端订单发货返回集合实体
/// </summary>
public class AdminOrderShipResult
{
@@ -338,6 +338,28 @@ namespace CoreCms.Net.Model.ViewModels.View
public List<CoreCmsOrder> orders { get; set; }
}
/// <summary>
/// 后端订单发货返回单个实体
/// </summary>
public class AdminOrderShipOneResult
{
public string orderId { get; set; }
public decimal weight { get; set; } = 0;
public string memo { get; set; }
public decimal costFreight { get; set; } = 0;
public int storeId { get; set; } = 0;
public int shipAreaId { get; set; } = 0;
public string shipAddress { get; set; }
public string shipName { get; set; }
public string shipMobile { get; set; }
public int logisticsId { get; set; } = 0;
public CoreCmsShip ship { get; set; } = null;
public string logisticsName { get; set; }
public List<CoreCmsOrderItem> items { get; set; }
public CoreCmsOrder orderInfo { get; set; }
}
/// <summary>
/// 前端提交售后单提交参数
/// </summary>
@@ -0,0 +1,99 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using CoreCms.Net.Configuration;
using CoreCms.Net.IServices;
using CoreCms.Net.Loging;
using CoreCms.Net.Model.Entities;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Utility.Extensions;
using CoreCms.Net.Utility.Helper;
using Essensoft.Paylink.WeChatPay.V2;
using Essensoft.Paylink.WeChatPay.V2.Notify;
using InitQ.Abstractions;
using InitQ.Attributes;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace CoreCms.Net.RedisMQ.Subscribe
{
/// <summary>
/// 门店订单自动发货
/// </summary>
public class OrderAutomaticDeliverySubscribe : IRedisSubscribe
{
private readonly ICoreCmsOrderServices _orderServices;
private readonly ICoreCmsOrderItemServices _orderItemServices;
private readonly ICoreCmsSettingServices _settingServices;
public OrderAutomaticDeliverySubscribe(ICoreCmsSettingServices settingServices, ICoreCmsAgentOrderServices agentOrderServices, ICoreCmsOrderServices orderServices, ICoreCmsOrderItemServices orderItemServices)
{
_settingServices = settingServices;
_orderServices = orderServices;
_orderItemServices = orderItemServices;
}
/// <summary>
/// 订单完成时,门店订单自动发货
/// </summary>
/// <param name="msg"></param>
/// <returns></returns>
[Subscribe(RedisMessageQueueKey.OrderAutomaticDelivery)]
private async Task OrderAutomaticDelivery(string msg)
{
try
{
var order = JsonConvert.DeserializeObject<CoreCmsOrder>(msg);
if (order != null)
{
var goodItems = await _orderItemServices.QueryListByClauseAsync(p => p.orderId == order.orderId);
if (!goodItems.Any())
{
NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单自动发货", "明细获取失败");
return;
}
Dictionary<int, int> items = new Dictionary<int, int>();
goodItems.ForEach(p =>
{
items.Add(p.productId, p.nums);
});
var result = new WebApiCallBack();
if (order.receiptType == (int)GlobalEnumVars.OrderReceiptType.SelfDelivery)
{
result = await _orderServices.Ship(order.orderId, "shangmenziti", "无", items, order.shipName, order.shipMobile, order.shipAddress, order.memo, order.storeId, order.shipAreaId);
}
else if (order.receiptType == (int)GlobalEnumVars.OrderReceiptType.IntraCityService)
{
result = await _orderServices.Ship(order.orderId, "benditongcheng", "无", items, order.shipName, order.shipMobile, order.shipAddress, order.memo, order.storeId, order.shipAreaId);
}
NLogUtil.WriteAll(result.status ? NLog.LogLevel.Info : NLog.LogLevel.Error,
LogType.RedisMessageQueue, "订单自动发货", JsonConvert.SerializeObject(result));
}
else
{
NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "订单自动发货", "订单获取失败");
}
}
catch (Exception ex)
{
NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "订单自动发货", msg, ex);
throw;
}
await Task.CompletedTask;
}
}
}
@@ -12,6 +12,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using CoreCms.Net.Caching.AutoMate.RedisCache;
using CoreCms.Net.Configuration;
using CoreCms.Net.IRepository;
using CoreCms.Net.IRepository.UnitOfWork;
@@ -23,6 +24,7 @@ using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Model.ViewModels.View;
using CoreCms.Net.Utility.Helper;
using Flurl.Http;
using Google.Protobuf.WellKnownTypes;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Newtonsoft.Json;
@@ -39,20 +41,22 @@ namespace CoreCms.Net.Services
private readonly ICoreCmsBillDeliveryRepository _dal;
private readonly ICoreCmsStoreServices _storeServices;
private readonly ICoreCmsBillDeliveryItemServices _billDeliveryItemServices;
private readonly ICoreCmsBillDeliveryOrderRelServices _billDeliveryOrderRelServices;
private readonly ICoreCmsOrderLogServices _orderLogServices;
private readonly ICoreCmsSettingServices _settingServices;
private readonly IUnitOfWork _unitOfWork;
private readonly IServiceProvider _serviceProvider;
private readonly IRedisOperationRepository _redisOperationRepository;
public CoreCmsBillDeliveryServices(
IUnitOfWork unitOfWork,
IServiceProvider serviceProvider
, ICoreCmsBillDeliveryRepository dal
, ICoreCmsStoreServices storeServices
, ICoreCmsBillDeliveryItemServices billDeliveryItemServices
, ICoreCmsBillDeliveryOrderRelServices billDeliveryOrderRelServices
, ICoreCmsOrderLogServices orderLogServices
, ICoreCmsSettingServices settingServices)
, ICoreCmsSettingServices settingServices, IRedisOperationRepository redisOperationRepository)
{
this._dal = dal;
base.BaseDal = dal;
@@ -60,9 +64,9 @@ namespace CoreCms.Net.Services
_serviceProvider = serviceProvider;
_storeServices = storeServices;
_billDeliveryItemServices = billDeliveryItemServices;
_billDeliveryOrderRelServices = billDeliveryOrderRelServices;
_orderLogServices = orderLogServices;
_settingServices = settingServices;
_redisOperationRepository = redisOperationRepository;
}
@@ -77,8 +81,6 @@ namespace CoreCms.Net.Services
return await _dal.GetDeliveryList(orderId);
}
/// <summary>
/// 批量发货,可以支持多个订单合并发货,单个订单拆分发货等。
/// </summary>
@@ -150,6 +152,7 @@ namespace CoreCms.Net.Services
billDelivery.memo = memo;
billDelivery.createTime = DateTime.Now;
//设置发货明细
var bdRel = new List<CoreCmsBillDeliveryItem>();
@@ -174,6 +177,21 @@ namespace CoreCms.Net.Services
}
//构建发货单明细
//dInfo.items.ForEach(p =>
//{
// var bdItem = new CoreCmsBillDeliveryItem();
// bdItem.deliveryId = billDelivery.deliveryId;
// bdItem.orderId = p.orderId;
// bdItem.productId = p.productId;
// bdItem.goodsId = p.goodsId;
// bdItem.bn = p.bn;
// bdItem.sn = p.sn;
// bdItem.weight = p.weight;
// bdItem.name = p.name;
// bdItem.addon = !string.IsNullOrEmpty(p.addon) ? p.addon : "";
// bdItem.nums = orderItem.nums;
// bdRel.Add(bdItem);
//});
var bdItem = new CoreCmsBillDeliveryItem();
bdItem.deliveryId = billDelivery.deliveryId;
bdItem.productId = orderItem.productId;
@@ -195,26 +213,15 @@ namespace CoreCms.Net.Services
//插入发货单主体表
await base.InsertAsync(billDelivery);
await _dal.InsertAsync(billDelivery);
//插入发货单明细表
await _billDeliveryItemServices.InsertAsync(bdRel);
//订单更新发货状态,发送各种消息
var rels = new List<CoreCmsBillDeliveryOrderRel>(); //关系表
foreach (var order in orders)
{
await orderShip(order, items, billDelivery, storeId);
var rel = new CoreCmsBillDeliveryOrderRel
{
deliveryId = billDelivery.deliveryId,
orderId = order.orderId
};
rels.Add(rel);
}
if (rels.Any())
{
await _billDeliveryOrderRelServices.InsertAsync(rels);
await OrderShip(order, items, billDelivery, storeId);
}
var stock = new CoreCmsStock
@@ -236,6 +243,154 @@ namespace CoreCms.Net.Services
}
/// <summary>
/// 发货,单个订单发货
/// </summary>
/// <param name="orderId">英文逗号分隔的订单号</param>
/// <param name="logiCode">物流公司编码</param>
/// <param name="logiNo">物流单号</param>
/// <param name="items">发货明细</param>
/// <param name="storeId">店铺收货地址</param>
/// <param name="shipName">收货人姓名</param>
/// <param name="shipMobile">收货人电话</param>
/// <param name="shipAreaId">省市区id</param>
/// <param name="shipAddress">收货地址</param>
/// <param name="memo">发货描述</param>
/// <returns></returns>
public async Task<WebApiCallBack> Ship(string orderId, string logiCode, string logiNo, Dictionary<int, int> items, int storeId = 0, string shipName = "", string shipMobile = "", int shipAreaId = 0, string shipAddress = "", string memo = "")
{
using var container = _serviceProvider.CreateScope();
var jm = new WebApiCallBack();
var orderService = container.ServiceProvider.GetService<ICoreCmsOrderServices>();
var stockServices = container.ServiceProvider.GetService<ICoreCmsStockServices>();
//获取订单详情
var dInfoResult = await orderService.GetOrderShipInfo(orderId);
if (!dInfoResult.status)
{
return dInfoResult;
}
var dInfo = dInfoResult.data as AdminOrderShipOneResult;
var orderInfo = dInfo.orderInfo;
//校验门店自提和普通订单收货地址是否填写
if (storeId != 0)
{
var storeModel = await _storeServices.QueryByIdAsync(storeId);
if (storeModel == null)
{
jm.msg = GlobalErrorCodeVars.Code10000;
jm.data = 1000;
jm.code = 1000;
return jm;
}
shipName = storeModel.storeName;
shipMobile = storeModel.mobile;
shipAreaId = storeModel.areaId;
shipAddress = storeModel.address;
}
if (string.IsNullOrEmpty(shipName) || string.IsNullOrEmpty(shipMobile) || string.IsNullOrEmpty(shipAddress) || shipAreaId == 0)
{
jm.msg = "收货地址信息不全";
jm.otherData = new
{
shipName,
shipMobile,
shipAddress,
shipAreaId
};
return jm;
}
var billDelivery = new CoreCmsBillDelivery();
billDelivery.orderId = string.Join(",", orderId);
billDelivery.deliveryId = CommonHelper.GetSerialNumberType((int)GlobalEnumVars.SerialNumberType.发货单编号);
billDelivery.logiCode = logiCode;
billDelivery.logiNo = logiNo;
billDelivery.shipAreaId = shipAreaId;
billDelivery.shipAddress = shipAddress;
billDelivery.shipName = shipName;
billDelivery.shipMobile = shipMobile;
billDelivery.status = (int)GlobalEnumVars.BillDeliveryStatus.Already;
billDelivery.memo = memo;
billDelivery.createTime = DateTime.Now;
//设置发货明细
var bdRel = new List<CoreCmsBillDeliveryItem>();
//校验发货内容
var tNum = 0;
foreach (var item in items)
{
var orderItem = dInfo.items.Find(p => p.productId == item.Key);
if (orderItem == null)
{
//发货的商品不在发货明细里,肯定有问题
jm.msg = GlobalErrorCodeVars.Code10000;
return jm;
}
//判断总发货数量
tNum = tNum + item.Value;
if ((orderItem.nums - orderItem.sendNums - (orderItem.reshipNums - orderItem.reshipedNums)) < item.Value)
{
jm.msg = orderItem.name + "发超了";
return jm;
}
//构建发货单明细
dInfo.items.ForEach(p =>
{
var bdItem = new CoreCmsBillDeliveryItem();
bdItem.deliveryId = billDelivery.deliveryId;
bdItem.productId = p.productId;
bdItem.goodsId = p.goodsId;
bdItem.bn = p.bn;
bdItem.sn = p.sn;
bdItem.weight = p.weight;
bdItem.name = p.name;
bdItem.addon = !string.IsNullOrEmpty(p.addon) ? p.addon : "";
bdItem.nums = orderItem.nums;
bdRel.Add(bdItem);
});
}
if (tNum < 1)
{
jm.msg = "请至少发生一件商品!";
return jm;
}
//事务处理开始
//插入发货单主体表
await _dal.InsertAsync(billDelivery);
//插入发货单明细表
await _billDeliveryItemServices.InsertAsync(bdRel);
//订单更新发货状态,发送各种消息
await OrderShip(orderInfo, items, billDelivery, storeId);
var stock = new CoreCmsStock
{
manager = 0,
id = billDelivery.deliveryId,
createTime = DateTime.Now,
type = (int)GlobalEnumVars.StockType.DeliverGoods,
memo = "订单发货操作,发货单号:" + billDelivery.deliveryId
};
await stockServices.InsertAsync(stock);
jm.status = true;
jm.msg = "发货成功";
return jm;
}
/// <summary>
/// 给订单发货
/// </summary>
@@ -243,7 +398,7 @@ namespace CoreCms.Net.Services
/// <param name="items">总的发货包裹内容</param>
/// <param name="deliveryInfo">发货单信息</param>
/// <param name="storeId">门店自提还是普通订单,0是普通订单,其他是门店自提</param>
private async Task<bool> orderShip(CoreCmsOrder orderInfo, Dictionary<int, int> items, CoreCmsBillDelivery deliveryInfo, int storeId = 0)
private async Task<bool> OrderShip(CoreCmsOrder orderInfo, Dictionary<int, int> items, CoreCmsBillDelivery deliveryInfo, int storeId = 0)
{
using var container = _serviceProvider.CreateScope();
var orderService = container.ServiceProvider.GetService<ICoreCmsOrderServices>();
@@ -323,6 +478,15 @@ namespace CoreCms.Net.Services
if (stockLogs.Any())
{
//var stock = new CoreCmsStock
//{
// manager = 0,
// id = deliveryInfo.deliveryId,
// createTime = DateTime.Now,
// type = (int)GlobalEnumVars.StockType.DeliverGoods,
// memo = log.msg
//};
//await stockServices.InsertAsync(stock);
await stockLogServices.InsertAsync(stockLogs);
}
@@ -375,9 +539,8 @@ namespace CoreCms.Net.Services
param = jsonParamData,
sign = signStr
};
var result = await postUrl.WithHeader("Content-Type ", "application/x-www-form-urlencoded")
.PostJsonAsync(postData)
.ReceiveJson<KuaiDi100ApiPostResult>();
var result = await postUrl.PostUrlEncodedAsync(postData).ReceiveJson<KuaiDi100ApiPostResult>();
if (result.status == "200")
{
jm.status = true;
@@ -821,7 +821,7 @@ namespace CoreCms.Net.Services
}
}
//把退款金额和退货商品查出来
AftersalesVal(order, aftersaleLevel);
AfterSalesVal(order, aftersaleLevel);
//促销信息
if (!string.IsNullOrEmpty(order.promotionList))
{
@@ -859,7 +859,7 @@ namespace CoreCms.Net.Services
/// </summary>
/// <param name="order"></param>
/// <param name="aftersaleLevel">取售后单的时候,售后单的等级,0:待审核的和审核通过的售后单,1未审核的,2审核通过的</param>
private void AftersalesVal(CoreCmsOrder order, int aftersaleLevel)
public void AfterSalesVal(CoreCmsOrder order, int aftersaleLevel)
{
var addAftersalesStatus = false;
var res = _billAftersalesServices.OrderToAftersales(order.orderId, aftersaleLevel);
@@ -1300,6 +1300,20 @@ namespace CoreCms.Net.Services
await _invoiceServices.InsertAsync(taxInfo);
}
//如果是门店自提,应该自动跳过发货,生成提货单信息,使用提货单核销。
if (order.receiptType == (int)GlobalEnumVars.OrderReceiptType.SelfDelivery)
{
var allConfigs = await _settingServices.GetConfigDictionaries();
var storeOrderAutomaticDelivery = CommonHelper
.GetConfigDictionary(allConfigs, SystemSettingConstVars.StoreOrderAutomaticDelivery)
.ObjectToInt(1);
if (storeOrderAutomaticDelivery == 1)
{
//订单自动发货
await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.OrderAutomaticDelivery, JsonConvert.SerializeObject(order));
}
}
//结佣处理
await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.OrderAgentOrDistribution, JsonConvert.SerializeObject(order));
//易联云打印机打印
@@ -1453,9 +1467,9 @@ namespace CoreCms.Net.Services
}
#endregion
#region 构建需要发货的数据,和发货单密切关联
#region 构建多个需要发货的数据,和发货单密切关联
/// <summary>
/// 构建需要发货的数据,和发货单密切关联
/// 构建多个需要发货的数据,和发货单密切关联
/// </summary>
/// <returns></returns>
public async Task<WebApiCallBack> GetOrderShipInfo(string[] ids)
@@ -1517,7 +1531,7 @@ namespace CoreCms.Net.Services
jm.msg = "订单号:" + item.orderId + "有未审核的售后单,请先处理掉才能发货。";
return jm;
}
AftersalesVal(item, 0);
AfterSalesVal(item, 0);
}
if (!jm.status)
@@ -1624,6 +1638,108 @@ namespace CoreCms.Net.Services
}
#endregion
#region 构建单个需要发货的数据,和发货单密切关联
/// <summary>
/// 构建单个需要发货的数据,和发货单密切关联
/// </summary>
/// <returns></returns>
public async Task<WebApiCallBack> GetOrderShipInfo(string orderId)
{
var jm = new WebApiCallBack { status = true };
var orderInfo = await _dal.QueryByClauseAsync(p => p.orderId == orderId);
if (orderInfo == null)
{
jm.msg = "请选择订单";
return jm;
}
orderInfo.items = await _orderItemServices.QueryListByClauseAsync(p => p.orderId == orderId);
var isStoreId = 0;//校验是普通快递收货,还是门店自提,这两种收货方式不能混着发
//更改状态和库存
if (orderInfo.status != (int)GlobalEnumVars.OrderStatus.Normal)
{
jm.status = false;
jm.msg = "订单号:" + orderInfo.orderId + "非正常状态不能发货。<br />";
}
else if (orderInfo.payStatus == (int)GlobalEnumVars.OrderPayStatus.No)
{
jm.status = false;
jm.msg = "订单号:" + orderInfo.orderId + "未支付不能发货。<br />";
}
else if (orderInfo.shipStatus != (int)GlobalEnumVars.OrderShipStatus.No && orderInfo.shipStatus != (int)GlobalEnumVars.OrderShipStatus.PartialYes)
{
jm.status = false;
jm.msg = "订单号:" + orderInfo.orderId + "不是待发货和部分发货状态不能发货。<br />";
}
//校验,不能普通快递和门店自提,不能混发
isStoreId = orderInfo.storeId;
//判断是否有未审核的售后单,如果有,就不能发货,已做拦截
var isHaveBillAfterSales = await _billAftersalesServices.ExistsAsync(p =>
p.orderId == orderInfo.orderId &&
p.status == (int)GlobalEnumVars.BillAftersalesStatus.WaitAudit);
if (isHaveBillAfterSales)
{
jm.status = false;
jm.msg = "订单号:" + orderInfo.orderId + "有未审核的售后单,请先处理掉才能发货。";
return jm;
}
AfterSalesVal(orderInfo, 0);
if (!jm.status)
{
return jm;
}
var newOrder = new AdminOrderShipOneResult()
{
orderId = orderId,
weight = orderInfo.weight,
costFreight = orderInfo.costFreight,
storeId = orderInfo.storeId,
shipAreaId = orderInfo.shipAreaId,
shipAddress = orderInfo.shipAddress,
shipName = orderInfo.shipName,
shipMobile = orderInfo.shipMobile,
logisticsId = orderInfo.logisticsId,
logisticsName = orderInfo.logisticsName,
items = new List<CoreCmsOrderItem>(),
orderInfo = orderInfo,
memo = orderInfo.memo
};
if (newOrder.logisticsId > 0)
{
newOrder.ship = await _shipServices.QueryByClauseAsync(p => p.id == newOrder.logisticsId);
}
//组合总运费
foreach (var orderItem in orderInfo.items)
{
var model = newOrder.items.FirstOrDefault(p => p.productId == orderItem.productId);
if (model == null)
{
newOrder.items.Add(orderItem);
}
else
{
var index = newOrder.items.IndexOf(model);
newOrder.items[index].nums += orderItem.nums;//总数量
newOrder.items[index].weight += orderItem.weight;//总重量
newOrder.items[index].sendNums += orderItem.sendNums;//已发送数量
newOrder.items[index].reshipNums += orderItem.reshipNums;//退货数量
}
}
jm.status = true;
jm.data = newOrder;
return jm;
}
#endregion
#region 发货改状态
/// <summary>
/// 发货改状态
@@ -1663,10 +1779,10 @@ namespace CoreCms.Net.Services
}
#endregion
#region 订单发货
#region 订单批量发货
/// <summary>
/// 订单发货
/// 订单批量发货
/// </summary>
/// <param name="ids">订单标号</param>
/// <param name="logiCode">物流公司编码</param>
@@ -1679,7 +1795,7 @@ namespace CoreCms.Net.Services
/// <param name="storeId">店铺收货地址</param>
/// <param name="shipAreaId">省市区id</param>
/// <returns></returns>
public async Task<WebApiCallBack> OrderShip(string[] ids, string logiCode, string logiNo,
public async Task<WebApiCallBack> BatchShip(string[] ids, string logiCode, string logiNo,
Dictionary<int, int> items, string shipName, string shipMobile, string shipAddress, string memo, int storeId = 0, int shipAreaId = 0)
{
@@ -1689,6 +1805,34 @@ namespace CoreCms.Net.Services
}
#endregion
#region 订单单个发货
/// <summary>
/// 订单单个发货
/// </summary>
/// <param name="orderId">订单编号</param>
/// <param name="logiCode">物流公司编码</param>
/// <param name="logiNo">物流单号</param>
/// <param name="items">发货明细</param>
/// <param name="shipName">收货人姓名</param>
/// <param name="shipMobile">收货人电话</param>
/// <param name="shipAddress">收货地址</param>
/// <param name="memo">发货描述</param>
/// <param name="storeId">店铺收货地址</param>
/// <param name="shipAreaId">省市区id</param>
/// <param name="deliveryCompanyId">直播物流编码</param>
/// <returns></returns>
public async Task<WebApiCallBack> Ship(string orderId, string logiCode, string logiNo,
Dictionary<int, int> items, string shipName, string shipMobile, string shipAddress, string memo, int storeId = 0, int shipAreaId = 0)
{
var result = await _billDeliveryServices.Ship(orderId, logiCode, logiNo, items, storeId, shipName, shipMobile, shipAreaId, shipAddress, memo);
return result;
}
#endregion
#region 完成订单
/// <summary>
/// 完成订单
@@ -94,16 +94,21 @@ namespace CoreCms.Net.Services
var list = new List<CoreCmsLogistics>();
var logistics = new CoreCmsLogistics();
logistics.logiCode = "benditongcheng";
logistics.logiName = "本地同城配送";
logistics.imgUrl = "";
logistics.phone = shopMobile;
logistics.url = "";
logistics.sort = -1;
logistics.isDelete = false;
var systemLogistics = SystemSettingDictionary.GetSystemLogistics();
systemLogistics.ForEach(p =>
{
var logistics = new CoreCmsLogistics();
logistics.logiCode = p.sKey;
logistics.logiName = p.sDescription;
logistics.imgUrl = "";
logistics.phone = shopMobile;
logistics.url = "";
logistics.sort = -1;
logistics.isDelete = false;
list.Add(logistics);
});
list.Add(logistics);
var count = 0;
person.showapi_res_body.expressList.ForEach(p =>
@@ -1312,11 +1312,14 @@ namespace CoreCms.Net.Web.Admin.Controllers
return Json(jm);
}
if (entity.code == "benditongcheng")
var systemLogistics = SystemSettingDictionary.GetSystemLogistics();
foreach (var p in systemLogistics)
{
jm.code = 1;
jm.msg = "本地同城配送不支持轨迹查询";
return Json(jm);
if (entity.code == p.sKey)
{
jm.msg = p.sDescription + "不支持轨迹查询";
return Json(jm);
}
}
jm = await _logisticsServices.ExpressPoll(entity.code, entity.no, entity.mobile);
@@ -499,9 +499,16 @@ namespace CoreCms.Net.Web.Admin.Controllers
{
var jm = new AdminUiCallBack();
var ids = entity.orderId.Split(",");
var result = await _coreCmsOrderServices.OrderShip(ids, entity.logiCode, entity.logiNo, entity.items, entity.shipName, entity.shipMobile, entity.shipAddress, entity.memo, entity.storeId, entity.shipAreaId);
WebApiCallBack result;
if (entity.orderId.Contains(","))
{
var ids = entity.orderId.Split(",");
result = await _coreCmsOrderServices.BatchShip(ids, entity.logiCode, entity.logiNo, entity.items, entity.shipName, entity.shipMobile, entity.shipAddress, entity.memo, entity.storeId, entity.shipAreaId);
}
else
{
result = await _coreCmsOrderServices.Ship(entity.orderId, entity.logiCode, entity.logiNo, entity.items, entity.shipName, entity.shipMobile, entity.shipAddress, entity.memo, entity.storeId, entity.shipAreaId);
}
jm.code = result.status ? 0 : 1;
jm.msg = result.msg;
@@ -0,0 +1,324 @@
<script type="text/html" template lay-done="layui.data.done(d);">
<table class="layui-table layui-form" lay-filter="LAY-app-CoreCmsGoods-detailsForm" id="LAY-app-CoreCmsGoods-detailsForm">
<colgroup>
<col width="100">
<col>
</colgroup>
<tbody>
<tr>
<td>
<label for="id">商品ID</label>
</td>
<td>
{{ d.params.data.id || '' }}
</td>
</tr>
<tr>
<td>
<label for="bn">商品条码</label>
</td>
<td>
{{ d.params.data.bn || '' }}
</td>
</tr>
<tr>
<td>
<label for="name">商品名称</label>
</td>
<td>
{{ d.params.data.name || '' }}
</td>
</tr>
<tr>
<td>
<label for="brief">商品简介</label>
</td>
<td>
{{ d.params.data.brief || '' }}
</td>
</tr>
<tr>
<td>
<label for="image">缩略图</label>
</td>
<td>
{{ d.params.data.image || '' }}
</td>
</tr>
<tr>
<td>
<label for="images">图集</label>
</td>
<td>
{{ d.params.data.images || '' }}
</td>
</tr>
<tr>
<td>
<label for="video">视频</label>
</td>
<td>
{{ d.params.data.video || '' }}
</td>
</tr>
<tr>
<td>
<label for="productsDistributionType">佣金分配方式</label>
</td>
<td>
{{ d.params.data.productsDistributionType || '' }}
</td>
</tr>
<tr>
<td>
<label for="goodsCategoryId">商品分类</label>
</td>
<td>
{{ d.params.data.goodsCategoryId || '' }}
</td>
</tr>
<tr>
<td>
<label for="goodsTypeId">商品类别</label>
</td>
<td>
{{ d.params.data.goodsTypeId || '' }}
</td>
</tr>
<tr>
<td>
<label for="goodsSkuIds">sku序列</label>
</td>
<td>
{{ d.params.data.goodsSkuIds || '' }}
</td>
</tr>
<tr>
<td>
<label for="goodsParamsIds">参数序列</label>
</td>
<td>
{{ d.params.data.goodsParamsIds || '' }}
</td>
</tr>
<tr>
<td>
<label for="brandId">品牌</label>
</td>
<td>
{{ d.params.data.brandId || '' }}
</td>
</tr>
<tr>
<td>
<label for="isNomalVirtual">是否虚拟商品</label>
</td>
<td>
<input type="checkbox" disabled name="isNomalVirtual" value="{{d.params.data.isNomalVirtual}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="isNomalVirtual" {{ d.params.data.isNomalVirtual ? 'checked' : '' }}>
</td>
</tr>
<tr>
<td>
<label for="isMarketable">是否上架</label>
</td>
<td>
<input type="checkbox" disabled name="isMarketable" value="{{d.params.data.isMarketable}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="isMarketable" {{ d.params.data.isMarketable ? 'checked' : '' }}>
</td>
</tr>
<tr>
<td>
<label for="unit">商品单位</label>
</td>
<td>
{{ d.params.data.unit || '' }}
</td>
</tr>
<tr>
<td>
<label for="intro">商品详情</label>
</td>
<td>
{{ d.params.data.intro || '' }}
</td>
</tr>
<tr>
<td>
<label for="spesDesc">商品规格序列号存储</label>
</td>
<td>
{{ d.params.data.spesDesc || '' }}
</td>
</tr>
<tr>
<td>
<label for="parameters">参数序列化</label>
</td>
<td>
{{ d.params.data.parameters || '' }}
</td>
</tr>
<tr>
<td>
<label for="commentsCount">评论次数</label>
</td>
<td>
{{ d.params.data.commentsCount || '' }}
</td>
</tr>
<tr>
<td>
<label for="viewCount">浏览次数</label>
</td>
<td>
{{ d.params.data.viewCount || '' }}
</td>
</tr>
<tr>
<td>
<label for="buyCount">购买次数</label>
</td>
<td>
{{ d.params.data.buyCount || '' }}
</td>
</tr>
<tr>
<td>
<label for="uptime">上架时间</label>
</td>
<td>
{{ d.params.data.uptime || '' }}
</td>
</tr>
<tr>
<td>
<label for="downtime">下架时间</label>
</td>
<td>
{{ d.params.data.downtime || '' }}
</td>
</tr>
<tr>
<td>
<label for="sort">商品排序</label>
</td>
<td>
{{ d.params.data.sort || '' }}
</td>
</tr>
<tr>
<td>
<label for="labelIds">标签id逗号分隔</label>
</td>
<td>
{{ d.params.data.labelIds || '' }}
</td>
</tr>
<tr>
<td>
<label for="newSpec">自定义规格名称</label>
</td>
<td>
{{ d.params.data.newSpec || '' }}
</td>
</tr>
<tr>
<td>
<label for="openSpec">开启规则</label>
</td>
<td>
{{ d.params.data.openSpec || '' }}
</td>
</tr>
<tr>
<td>
<label for="createTime">创建时间</label>
</td>
<td>
{{ d.params.data.createTime || '' }}
</td>
</tr>
<tr>
<td>
<label for="updateTime">更新时间</label>
</td>
<td>
{{ d.params.data.updateTime || '' }}
</td>
</tr>
<tr>
<td>
<label for="isRecommend">是否推荐</label>
</td>
<td>
<input type="checkbox" disabled name="isRecommend" value="{{d.params.data.isRecommend}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="isRecommend" {{ d.params.data.isRecommend ? 'checked' : '' }}>
</td>
</tr>
<tr>
<td>
<label for="isHot">是否热门</label>
</td>
<td>
<input type="checkbox" disabled name="isHot" value="{{d.params.data.isHot}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="isHot" {{ d.params.data.isHot ? 'checked' : '' }}>
</td>
</tr>
<tr>
<td>
<label for="isDel">是否删除</label>
</td>
<td>
<input type="checkbox" disabled name="isDel" value="{{d.params.data.isDel}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="isDel" {{ d.params.data.isDel ? 'checked' : '' }}>
</td>
</tr>
</tbody>
</table>
</script>
<script>
var debug= layui.setter.debug;
layui.data.done = function (d) {
//开启调试情况下获取接口赋值数据
if (debug) { console.log(d.params.data); }
layui.use(['admin', 'form', 'coreHelper'], function () {
var $ = layui.$
, setter = layui.setter
, admin = layui.admin
, coreHelper = layui.coreHelper
, form = layui.form;
form.render(null, 'LAY-app-CoreCmsGoods-detailsForm');
});
};
</script>
@@ -0,0 +1,361 @@
<script type="text/html" template lay-done="layui.data.done(d);">
<div class="layui-tab">
<ul class="layui-tab-title">
<li class="layui-this">基础信息</li>
<li>图集视频</li>
<li>SKU/货品设置</li>
<li>参数设置</li>
<li>会员折扣</li>
<li>商品详情</li>
</ul>
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
基础信息
</div>
<div class="layui-tab-item">
图集视频
</div>
<div class="layui-tab-item">
SKU/货品设置
</div>
<div class="layui-tab-item">
参数设置
</div>
<div class="layui-tab-item">
会员折扣
</div>
<div class="layui-tab-item">
商品详情
</div>
</div>
</div>
<table class="layui-table layui-form" lay-filter="LAY-app-CoreCmsGoods-detailsForm" id="LAY-app-CoreCmsGoods-detailsForm">
<colgroup>
<col width="100">
<col>
</colgroup>
<tbody>
<tr>
<td>
<label for="id">商品ID</label>
</td>
<td>
{{ d.params.data.id || '' }}
</td>
</tr>
<tr>
<td>
<label for="bn">商品条码</label>
</td>
<td>
{{ d.params.data.bn || '' }}
</td>
</tr>
<tr>
<td>
<label for="name">商品名称</label>
</td>
<td>
{{ d.params.data.name || '' }}
</td>
</tr>
<tr>
<td>
<label for="brief">商品简介</label>
</td>
<td>
{{ d.params.data.brief || '' }}
</td>
</tr>
<tr>
<td>
<label for="image">缩略图</label>
</td>
<td>
{{ d.params.data.image || '' }}
</td>
</tr>
<tr>
<td>
<label for="images">图集</label>
</td>
<td>
{{ d.params.data.images || '' }}
</td>
</tr>
<tr>
<td>
<label for="video">视频</label>
</td>
<td>
{{ d.params.data.video || '' }}
</td>
</tr>
<tr>
<td>
<label for="productsDistributionType">佣金分配方式</label>
</td>
<td>
{{ d.params.data.productsDistributionType || '' }}
</td>
</tr>
<tr>
<td>
<label for="goodsCategoryId">商品分类</label>
</td>
<td>
{{ d.params.data.goodsCategoryId || '' }}
</td>
</tr>
<tr>
<td>
<label for="goodsTypeId">商品类别</label>
</td>
<td>
{{ d.params.data.goodsTypeId || '' }}
</td>
</tr>
<tr>
<td>
<label for="goodsSkuIds">sku序列</label>
</td>
<td>
{{ d.params.data.goodsSkuIds || '' }}
</td>
</tr>
<tr>
<td>
<label for="goodsParamsIds">参数序列</label>
</td>
<td>
{{ d.params.data.goodsParamsIds || '' }}
</td>
</tr>
<tr>
<td>
<label for="brandId">品牌</label>
</td>
<td>
{{ d.params.data.brandId || '' }}
</td>
</tr>
<tr>
<td>
<label for="isNomalVirtual">是否虚拟商品</label>
</td>
<td>
<input type="checkbox" disabled name="isNomalVirtual" value="{{d.params.data.isNomalVirtual}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="isNomalVirtual" {{ d.params.data.isNomalVirtual ? 'checked' : '' }}>
</td>
</tr>
<tr>
<td>
<label for="isMarketable">是否上架</label>
</td>
<td>
<input type="checkbox" disabled name="isMarketable" value="{{d.params.data.isMarketable}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="isMarketable" {{ d.params.data.isMarketable ? 'checked' : '' }}>
</td>
</tr>
<tr>
<td>
<label for="unit">商品单位</label>
</td>
<td>
{{ d.params.data.unit || '' }}
</td>
</tr>
<tr>
<td>
<label for="intro">商品详情</label>
</td>
<td>
{{ d.params.data.intro || '' }}
</td>
</tr>
<tr>
<td>
<label for="spesDesc">商品规格序列号存储</label>
</td>
<td>
{{ d.params.data.spesDesc || '' }}
</td>
</tr>
<tr>
<td>
<label for="parameters">参数序列化</label>
</td>
<td>
{{ d.params.data.parameters || '' }}
</td>
</tr>
<tr>
<td>
<label for="commentsCount">评论次数</label>
</td>
<td>
{{ d.params.data.commentsCount || '' }}
</td>
</tr>
<tr>
<td>
<label for="viewCount">浏览次数</label>
</td>
<td>
{{ d.params.data.viewCount || '' }}
</td>
</tr>
<tr>
<td>
<label for="buyCount">购买次数</label>
</td>
<td>
{{ d.params.data.buyCount || '' }}
</td>
</tr>
<tr>
<td>
<label for="uptime">上架时间</label>
</td>
<td>
{{ d.params.data.uptime || '' }}
</td>
</tr>
<tr>
<td>
<label for="downtime">下架时间</label>
</td>
<td>
{{ d.params.data.downtime || '' }}
</td>
</tr>
<tr>
<td>
<label for="sort">商品排序</label>
</td>
<td>
{{ d.params.data.sort || '' }}
</td>
</tr>
<tr>
<td>
<label for="labelIds">标签id逗号分隔</label>
</td>
<td>
{{ d.params.data.labelIds || '' }}
</td>
</tr>
<tr>
<td>
<label for="newSpec">自定义规格名称</label>
</td>
<td>
{{ d.params.data.newSpec || '' }}
</td>
</tr>
<tr>
<td>
<label for="openSpec">开启规则</label>
</td>
<td>
{{ d.params.data.openSpec || '' }}
</td>
</tr>
<tr>
<td>
<label for="createTime">创建时间</label>
</td>
<td>
{{ d.params.data.createTime || '' }}
</td>
</tr>
<tr>
<td>
<label for="updateTime">更新时间</label>
</td>
<td>
{{ d.params.data.updateTime || '' }}
</td>
</tr>
<tr>
<td>
<label for="isRecommend">是否推荐</label>
</td>
<td>
<input type="checkbox" disabled name="isRecommend" value="{{d.params.data.isRecommend}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="isRecommend" {{ d.params.data.isRecommend ? 'checked' : '' }}>
</td>
</tr>
<tr>
<td>
<label for="isHot">是否热门</label>
</td>
<td>
<input type="checkbox" disabled name="isHot" value="{{d.params.data.isHot}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="isHot" {{ d.params.data.isHot ? 'checked' : '' }}>
</td>
</tr>
<tr>
<td>
<label for="isDel">是否删除</label>
</td>
<td>
<input type="checkbox" disabled name="isDel" value="{{d.params.data.isDel}}" lay-skin="switch" lay-text="开启|关闭" lay-filter="isDel" {{ d.params.data.isDel ? 'checked' : '' }}>
</td>
</tr>
</tbody>
</table>
</script>
<script>
var debug = layui.setter.debug;
layui.data.done = function (d) {
//开启调试情况下获取接口赋值数据
if (debug) { console.log(d.params.data); }
layui.use(['admin', 'form', 'coreHelper'], function () {
var $ = layui.$
, setter = layui.setter
, admin = layui.admin
, coreHelper = layui.coreHelper
, form = layui.form;
form.render(null, 'LAY-app-CoreCmsGoods-detailsForm');
});
};
</script>
@@ -273,12 +273,16 @@
});
});
//监听行双击事件
//table.on('rowDouble(LAY-app-CoreCmsGoods-tableBox)', function (obj) {
//});
table.on('rowDouble(LAY-app-CoreCmsGoods-tableBox)', function (obj) {
//查看详情
doDetails(obj);
});
//监听工具条
table.on('tool(LAY-app-CoreCmsGoods-tableBox)',
function (obj) {
if (obj.event === 'del') {
if (obj.event === 'detail') {
doDetails(obj);
} else if (obj.event === 'del') {
doDelete(obj);
} else if (obj.event === 'edit') {
doEdit(obj)
@@ -547,6 +551,31 @@
function doEdit(obj) {
location.hash = '/good/goods/edit/id=' + obj.data.id;
}
//执行预览操作
function doDetails(obj) {
coreHelper.Post("Api/CoreCmsGoods/GetDetails", { id: obj.data.id }, function (e) {
if (e.code === 0) {
admin.popup({
shadeClose: false,
title: '查看详情',
area: ['1200px', '90%'],
id: 'LAY-popup-CoreCmsGoods-details',
success: function (layero, index) {
view(this.id).render('good/goods/details', { data: e.data }).done(function () {
form.render();
});
// 禁止弹窗出现滚动条
$(layero).children('.layui-layer-content').css('overflow', 'visible');
}
});
} else {
layer.msg(e.msg);
}
});
}
//执行单个删除
function doDelete(obj) {
coreHelper.Post("Api/CoreCmsGoods/DoDelete", { id: obj.data.id }, function (e) {
@@ -356,6 +356,18 @@
</div>
<div class="layui-form-mid layui-word-aux">退货的详细地址</div>
</div>
<blockquote class="layui-elem-quote">
发货相关
</blockquote>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['storeOrderAutomaticDelivery']['sKey']}}:</label>
<div class="layui-input-inline layui-inline-7">
<input type="radio" lay-filter="storeOrderAutomaticDelivery" name="storeOrderAutomaticDelivery" value="1" title="开启" {{d.data.configs['storeOrderAutomaticDelivery']['sValue']==="1" ? 'checked':''}}>
<input type="radio" lay-filter="storeOrderAutomaticDelivery" name="storeOrderAutomaticDelivery" value="2" title="不开启" {{d.data.configs['storeOrderAutomaticDelivery']['sValue']==="2" ? 'checked':''}}>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">&nbsp;</label>
<div class="layui-input-block">
@@ -508,10 +508,14 @@ namespace CoreCms.Net.Web.WebApi.Controllers
return Json(jm);
}
if (entity.code == "benditongcheng")
var systemLogistics = SystemSettingDictionary.GetSystemLogistics();
foreach (var p in systemLogistics)
{
jm.msg = "本地同城配送不支持轨迹查询";
return Json(jm);
if (entity.code == p.sKey)
{
jm.msg = p.sDescription + "不支持轨迹查询";
return Json(jm);
}
}
jm = await _logisticsServices.ExpressPoll(entity.code, entity.no, entity.mobile);