记得上下班打卡 | git大法好,push需谨慎

Commit 2df263b5 authored by 姜秀龙's avatar 姜秀龙

Merge branch 'jxl-kuaidi100' into test

parents 8ed32621 e97d859e
......@@ -17,7 +17,7 @@ public class GoblinStoreMgtConfigEditParam implements Serializable {
@ApiModelProperty(position = 10, value = "店铺ID[64]")
@NotBlank(message = "店铺ID不能为空") @Size(max = 64)
private String storeId;
@ApiModelProperty(position = 11, value = "店铺配置集合[Map]", example = "{\"BUSINESS_STATUS\":\"5\",\"ONOFF_CUSTOMER_SEV\":\"ON\",\"ONOFF_SOLD_OUT_SHOW\":\"ON\",\"LIMIT_WARNING_STOCK\":\"5\"}")
@ApiModelProperty(position = 11, value = "店铺配置集合[Map]", example = "{\"BUSINESS_STATUS\":\"5\",\"ONOFF_CUSTOMER_SEV\":\"ON\",\"ONOFF_SOLD_OUT_SHOW\":\"ON\",\"LIMIT_WARNING_STOCK\":\"5\",\"SHIP_FROM_ADDRESS\":\"北京市朝阳区\"}")
@NotNull(message = "店铺配置不能为空")
private Map<String, String> confMap;
}
......@@ -24,4 +24,8 @@ public enum GoblinStoreConf {
* 指标:库存不足
*/
LIMIT_WARNING_STOCK,
/**
* 发货地址(快递100 from,空则用系统默认)
*/
SHIP_FROM_ADDRESS,
}
......@@ -39,7 +39,10 @@
<label class="col-sm-3 control-label">排序:</label>
<div class="col-sm-8">
<input class="form-control" type="number" name="sort" id="sort" value="0">
<span class="help-block m-b-none"><i class="fa fa-info-circle"></i> 数值越大越靠前</span>
<span class="help-block m-b-none">
<i class="fa fa-info-circle"></i>
数值越大越靠前,相同则后添加的靠前
</span>
</div>
</div>
</form>
......
......@@ -47,7 +47,10 @@
<div class="col-sm-8">
<input class="form-control" type="number" name="sort" id="sort"
th:value="${RefundReasonVo.sort}">
<span class="help-block m-b-none"><i class="fa fa-info-circle"></i> 数值越大越靠前</span>
<span class="help-block m-b-none">
<i class="fa fa-info-circle"></i>
数值越大越靠前,相同则后添加的靠前
</span>
</div>
</div>
</form>
......
......@@ -152,7 +152,8 @@ insert into goblin_store_config (store_id, config_name, config_key, config_val,
values (0, '营业状态', 'BUSINESS_STATUS', '5', 'admin', sysdate()),
(0, '联系客服', 'ONOFF_CUSTOMER_SEV', 'OFF', 'admin', sysdate()),
(0, '售罄展示', 'ONOFF_SOLD_OUT_SHOW', 'OFF', 'admin', sysdate()),
(0, '库存不足', 'LIMIT_WARNING_STOCK', '5', 'admin', sysdate());
(0, '库存不足', 'LIMIT_WARNING_STOCK', '5', 'admin', sysdate()),
(0, '发货地址', 'SHIP_FROM_ADDRESS', '', 'admin', sysdate());
# -- >>------------------------------------------------------------------------------------
drop table if exists goblin_store_notice;
create table goblin_store_notice
......
......@@ -127,7 +127,7 @@ public class GoblinStoreMgtController {
}
@ApiOperationSupport(order = 5)
@ApiOperation(value = "店铺管理:店铺设置:详情", notes = "BUSINESS_STATUS(状态:营业状态[4-停业|5-营业])、ONOFF_CUSTOMER_SEV(开关:联系客服)、ONOFF_SOLD_OUT_SHOW(开关:售罄展示)、LIMIT_WARNING_STOCK(指标:库存不足)")
@ApiOperation(value = "店铺管理:店铺设置:详情", notes = "BUSINESS_STATUS(状态:营业状态[4-停业|5-营业])、ONOFF_CUSTOMER_SEV(开关:联系客服)、ONOFF_SOLD_OUT_SHOW(开关:售罄展示)、LIMIT_WARNING_STOCK(指标:库存不足)、SHIP_FROM_ADDRESS(发货地址,快递100用;空则用系统默认)")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "storeId", value = "店铺ID[64]"),
})
......@@ -180,6 +180,9 @@ public class GoblinStoreMgtController {
updateConfMap.put(ck, cv);
}
break;
case "SHIP_FROM_ADDRESS":
updateConfMap.put(ck, cv);
break;
}
});
if (CollectionUtils.isEmpty(updateConfMap)) {
......
......@@ -451,7 +451,7 @@ public class GoblinMailTrackServiceImpl implements IGoblinMailTrackService {
GoblinStoreOrderVo orderVo = redisUtils.getGoblinOrder(orderId);
String phone = resolvePhone(orderVo);
String to = resolveTo(orderVo);
String from = kuaidi100Client.getDefaultFrom();
String from = resolveFrom(orderVo);
String callback = buildCallbackUrl(mailId, orderId);
try {
SubscribeResp resp = kuaidi100Client.subscribeWithMap(com, mailNo, phone, from, to, callback);
......@@ -500,7 +500,7 @@ public class GoblinMailTrackServiceImpl implements IGoblinMailTrackService {
GoblinStoreOrderVo orderVo = redisUtils.getGoblinOrder(orderId);
String phone = resolvePhone(orderVo);
String to = resolveTo(orderVo);
String from = kuaidi100Client.getDefaultFrom();
String from = resolveFrom(orderVo);
try {
QueryTrackMapResp resp = kuaidi100Client.queryMapTrack(com, mailNo, phone, from, to);
if (resp == null) {
......@@ -625,6 +625,22 @@ public class GoblinMailTrackServiceImpl implements IGoblinMailTrackService {
return address == null ? "" : address;
}
/** 发货地:店铺设置 SHIP_FROM_ADDRESS,空则用配置文件 liquidnet.express.kuaidi100.from */
private String resolveFrom(GoblinStoreOrderVo orderVo) {
if (orderVo != null && StringUtils.isNotBlank(orderVo.getStoreId())) {
List<GoblinStoreConfigVo> configs = redisUtils.getStoreConfigVos(orderVo.getStoreId());
if (configs != null) {
for (GoblinStoreConfigVo conf : configs) {
if (GoblinStoreConf.SHIP_FROM_ADDRESS.name().equals(conf.getConfigKey())
&& StringUtils.isNotBlank(conf.getConfigVal())) {
return conf.getConfigVal().trim();
}
}
}
}
return kuaidi100Client.getDefaultFrom();
}
private String buildCallbackUrl(String mailId, String orderId) {
String base = kuaidi100Client.getCallbackurl();
String sep = base.contains("?") ? "&" : "?";
......
......@@ -918,8 +918,25 @@ public class GoblinStoreOrderServiceImpl implements IGoblinStoreOrderService {
if (orderVo == null || !orderVo.getStoreId().equals(storeInfoVo.getStoreId())) {
return ResponseDto.failure("无法查看");
}
GoblinMailVo origin = null;
for (GoblinMailVo m : redisUtils.getGoblinMail(orderId)) {
if (mailId.equals(m.getMailId())) {
origin = m;
break;
}
}
if (origin == null) {
return ResponseDto.failure("快递信息不存在");
}
String newMailNo = mailNo == null ? "" : mailNo.trim();
String newCode = StringUtils.isNotBlank(logisticsCode) ? logisticsCode.trim().toLowerCase() : StringUtils.defaultString(origin.getLogisticsCode());
String oldMailNo = StringUtils.defaultString(origin.getMailNo());
String oldCode = StringUtils.defaultString(origin.getLogisticsCode());
boolean mailChanged = !oldMailNo.equals(newMailNo)
|| !oldCode.equalsIgnoreCase(StringUtils.defaultString(newCode));
GoblinMailVo vo = GoblinMailVo.getNew();
vo.setMailNo(mailNo);
vo.setMailNo(newMailNo);
vo.setMailId(mailId);
vo.setOrderId(orderId);
if (StringUtils.isNotBlank(logisticsCompany)) {
......@@ -930,7 +947,6 @@ public class GoblinStoreOrderServiceImpl implements IGoblinStoreOrderService {
}
redisUtils.changeGoblinMail(orderId, vo);
mongoUtils.updateGoblinMailVo(mailId, vo);
//添加日志
GoblinMailVo cached = null;
for (GoblinMailVo m : redisUtils.getGoblinMail(orderId)) {
if (mailId.equals(m.getMailId())) {
......@@ -947,8 +963,8 @@ public class GoblinStoreOrderServiceImpl implements IGoblinStoreOrderService {
LocalDateTime.now(), vo.getMailId()
)
);
if (cached != null) {
// 改单号后清掉旧轨迹,避免旧订阅推送与新单号互相覆盖;旧推送由回调 mailNo 校验丢弃
if (mailChanged && cached != null) {
// 单号或公司编码变了才清缓存并重新订阅,避免无变化重复占用订阅次数
redisUtils.delMailTrackCache(mailId);
goblinMailTrackService.initAndSubscribeAsync(orderId, mailId, cached.getMailNo(),
cached.getLogisticsCode(), cached.getLogisticsCompany());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment