Authored by chenchao

add cancel

... ... @@ -17,9 +17,13 @@ public interface AppraiseOrderMetaMapper {
AppraiseOrderMeta selectByOrderCode(AppraiseOrderMeta condition);
List<AppraiseOrderMeta> selectByOrderCodeMetaKeys(@Param("orderCode") long orderCode,
@Param("metaKeys") Collection<String> metaKeys);
AppraiseOrderMeta selectByOrderCodeStorageId(AppraiseOrderMeta condition);
List<AppraiseOrderMeta> selectByOrderCodeStorageIds(@Param("condition") AppraiseOrderMeta condition,
@Param("storageIds")Collection<Integer> storageIds);
int updateMetaValueByOrderCodeAndMetaKey(AppraiseOrderMeta condition);
}
\ No newline at end of file
... ...
... ... @@ -83,6 +83,18 @@
and meta_key = #{metaKey,jdbcType=VARCHAR}
</select>
<select id="selectByOrderCodeMetaKeys" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from appraise_order_meta
where order_code = #{orderCode,jdbcType=INTEGER}
and meta_key in
<foreach collection="metaKeys" item="metaKey" open="(" close=")" separator=",">
#{metaKey,jdbcType=VARCHAR}
</foreach>
</select>
<select id="selectByOrderCodeStorageId" parameterType="com.yohoufo.dal.order.model.AppraiseOrderMeta" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
... ... @@ -104,4 +116,10 @@
and meta_key = #{condition.metaKey,jdbcType=VARCHAR}
</select>
<update id="updateMetaValueByOrderCodeAndMetaKey" parameterType="com.yohoufo.dal.order.model.AppraiseOrderMeta">
update appraise_order_meta set meta_value = #{metaValue,jdbcType=VARCHAR}
where order_code = #{orderCode,jdbcType=BIGINT} and meta_key = #{metaKey,jdbcType=VARCHAR}
</update>
</mapper>
\ No newline at end of file
... ...
... ... @@ -218,4 +218,21 @@ public class SellerDepositOrderController {
.build();
}
@RequestMapping(params = "method=ufo.depositOrder.addOrModifyAddress")
public ApiResponse addOrModifyAddress(@RequestParam(name = "uid")int uid,
@RequestParam(name = "orderCode")long orderCode,
@RequestParam(value = "addressId") String addressId
){
logger.info("in method=ufo.depositOrder.addOrModifyAddress orderCode {} addressId {}", orderCode, addressId);
sellerDepositOrderService.addOrModifyAddress(uid, orderCode, addressId);
return new ApiResponse.ApiResponseBuilder()
.code(200)
.message("地址修改成功")
.build();
}
}
... ...
... ... @@ -42,7 +42,7 @@ public abstract class AbsGoodsServiceOrderService implements IGoodsService {
return rows;
}
private int triggerStatusChange(Long orderCode, AppraiseOrderStatus targetStatus, AppraiseOrderStatus expectedStatus){
public int triggerStatusChange(Long orderCode, AppraiseOrderStatus targetStatus, AppraiseOrderStatus expectedStatus){
int cdt = DateUtil.getCurrentTimeSecond();
int rows = appraiseOrderMapper.updateStatusByOrderCode(orderCode, targetStatus.getCode(), expectedStatus.getCode(), cdt);
if (rows==0){
... ...
... ... @@ -39,6 +39,7 @@ import com.yohoufo.order.service.listener.BuyerOrderChangeEvent;
import com.yohoufo.order.service.listener.OrderChangeListenerContainer;
import com.yohoufo.order.service.pay.AbstractPayService;
import com.yohoufo.order.service.proxy.*;
import com.yohoufo.order.service.seller.deposit.SellerDepositOrderService;
import com.yohoufo.order.utils.BuyerOrderUtils;
import com.yohoufo.order.utils.LoggerUtils;
import com.yohoufo.order.utils.SellerGoodsHelper;
... ... @@ -108,6 +109,15 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
@Autowired
protected ServiceOrderProcessor serviceOrderProcessor;
@Autowired
private BuyerOrderMetaMapper buyerOrderMetaMapper;
@Autowired
private UserProxyService userProxyService;
@Autowired
private SellerDepositOrderService sellerDepositOrderService;
/**
* 提交订单
* @param orderRequest
... ... @@ -825,15 +835,17 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
orderStatusFlowService.addAsy(buyerOrder.getOrderCode(), targetStatus.getCode());
}
}
@Autowired
private BuyerOrderMetaMapper buyerOrderMetaMapper;
@Autowired
private UserProxyService userProxyService;
@Override
public void modifyAddressOfDepositOrder(int uid, Long orderCode, String addressIdstr) {
if (serviceOrderProcessor.isGoodsServiceOrder(orderCode)){
sellerDepositOrderService.addOrModifyAddress(uid, orderCode, addressIdstr);
return;
}
int addressId = AddressUtil.getDecryptStr(addressIdstr);
if (addressId < 0){
logger.warn("modifyAddressOfDepositOrder addressId invalidate, uid {}, orderCode {}, addressId is {}",
... ... @@ -853,59 +865,77 @@ public class BuyerOrderServiceImpl implements IBuyerOrderService {
return;
}
MetaAddressService.ActionCallBack<BuyerOrderMeta> callBack = new MetaAddressService.ActionCallBack<BuyerOrderMeta>() {
@Override
public List selectByMetaKeys(int uid, long orderCode, List metaKeys) {
List<BuyerOrderMeta> pboms = buyerOrderMetaMapper.selectByMetaKeys(uid, orderCode, metaKeys);
return pboms;
}
//the address of send back 2 seller
AddressInfo hiddenBackAddress = userProxyService.getHiddenAddressInfo(uid, addressId);
AddressInfo noHiddenBackAddress = userProxyService.getAddressInfoNotHidden(uid, addressId);
final String key = MetaKey.RECALL_ADDRESS, hiiden_key = MetaKey.RECALL_HIDDEN_ADDRESS;
BuyerOrderMeta noHiddenAddressMeta=new BuyerOrderMeta();
noHiddenAddressMeta.setUid(uid);
noHiddenAddressMeta.setOrderCode(orderCode);
noHiddenAddressMeta.setMetaKey(key);
noHiddenAddressMeta.setMetaValue(JSONObject.toJSONString(noHiddenBackAddress));
//hidden address
BuyerOrderMeta hiddenAddressMeta=new BuyerOrderMeta();
hiddenAddressMeta.setUid(uid);
hiddenAddressMeta.setOrderCode(orderCode);
hiddenAddressMeta.setMetaKey(hiiden_key);
hiddenAddressMeta.setMetaValue(JSONObject.toJSONString(hiddenBackAddress));
//
List<BuyerOrderMeta> boms = new ArrayList<>(2);
boms.add(noHiddenAddressMeta);
boms.add(hiddenAddressMeta);
@Override
public void insertBatch(List<BuyerOrderMeta> list) {
buyerOrderMetaMapper.insertBatch(list);
}
@Override
public void insert(BuyerOrderMeta o) {
buyerOrderMetaMapper.insert(o);
}
List<BuyerOrderMeta> pboms = buyerOrderMetaMapper.selectByMetaKeys(uid, orderCode, Arrays.asList(key, hiiden_key));
@Override
public void updateMetaVal(BuyerOrderMeta o) {
buyerOrderMetaMapper.updateMetaValueByUidAndOrderCodeAndMetaKey(o);
}
if(CollectionUtils.isEmpty(pboms)){
buyerOrderMetaMapper.insertBatch(boms);
}else{
boolean hitNoHidden = false;
boolean hitHidden = false;
for (BuyerOrderMeta pbom : pboms){
if (pbom.getMetaKey().equals(hiiden_key)){
hitHidden = true;
}
if (pbom.getMetaKey().equals(key)){
hitNoHidden = true;
}
@Override
public AddressInfo hiddenBackAddress(int uid, int addressId) {
AddressInfo hiddenBackAddress = userProxyService.getHiddenAddressInfo(uid, addressId);
return hiddenBackAddress;
}
doPersistent4AddessMeta(hitHidden, hiddenAddressMeta);
doPersistent4AddessMeta(hitNoHidden, noHiddenAddressMeta);
}
}
private void doPersistent4AddessMeta(boolean isExisted, BuyerOrderMeta bom){
if (isExisted){
buyerOrderMetaMapper.updateMetaValueByUidAndOrderCodeAndMetaKey(bom);
}else {
buyerOrderMetaMapper.insert(bom);
}
@Override
public AddressInfo noHiddenBackAddress(int uid, int addressId) {
AddressInfo noHiddenBackAddress = userProxyService.getAddressInfoNotHidden(uid, addressId);
return noHiddenBackAddress;
}
@Override
public BuyerOrderMeta buildnoHiddenAddressMeta(int uid, long orderCode, String key, AddressInfo noHiddenBackAddress) {
BuyerOrderMeta noHiddenAddressMeta=new BuyerOrderMeta();
noHiddenAddressMeta.setUid(uid);
noHiddenAddressMeta.setOrderCode(orderCode);
noHiddenAddressMeta.setMetaKey(key);
noHiddenAddressMeta.setMetaValue(JSONObject.toJSONString(noHiddenBackAddress));
return noHiddenAddressMeta;
}
@Override
public BuyerOrderMeta buildHiddenAddressMeta(int uid, long orderCode, String hiddenKey, AddressInfo hiddenBackAddress) {
BuyerOrderMeta hiddenAddressMeta=new BuyerOrderMeta();
hiddenAddressMeta.setUid(uid);
hiddenAddressMeta.setOrderCode(orderCode);
hiddenAddressMeta.setMetaKey(hiddenKey);
hiddenAddressMeta.setMetaValue(JSONObject.toJSONString(hiddenBackAddress));
return hiddenAddressMeta;
}
@Override
public boolean hitHidden(BuyerOrderMeta buyerOrderMeta, String hidden_key) {
return buyerOrderMeta.getMetaKey().equals(hidden_key);
}
@Override
public boolean hitNoHidden(BuyerOrderMeta buyerOrderMeta, String noHiddenKey) {
return buyerOrderMeta.getMetaKey().equals(noHiddenKey);
}
};
new MetaAddressService().modifyAddressOfDepositOrder(uid, orderCode, addressIdstr, callBack);
}
//清理缓存
private SellerOrderGoods cleanCacheAfterUpdateStatus(long orderCode,int uid,int sellerUid){
BuyerOrderGoods bog = buyerOrderGoodsMapper.selectByOrderCode(uid, orderCode);
... ...
package com.yohoufo.order.service.impl;
import com.yoho.error.ServiceError;
import com.yoho.error.exception.ServiceException;
import com.yohobuy.ufo.model.order.vo.AddressInfo;
import com.yohoufo.common.utils.AddressUtil;
import com.yohoufo.order.constants.MetaKey;
import com.yohoufo.order.utils.LoggerUtils;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MetaAddressService<E> {
private final Logger logger = LoggerUtils.getBuyerOrderLogger();
public void modifyAddressOfDepositOrder(int uid, Long orderCode, String addressIdstr, ActionCallBack<E> callBack) {
int addressId = AddressUtil.getDecryptStr(addressIdstr);
if (addressId < 0){
logger.warn("addOrModifyAddress addressId invalidate, uid {}, orderCode {}, addressId is {}",
uid, orderCode, addressIdstr);
throw new ServiceException(ServiceError.ORDER_ADDRESSID_INVALIDATE);
}
//the address of send back 2 seller
AddressInfo hiddenBackAddress = callBack.hiddenBackAddress(uid, addressId);
AddressInfo noHiddenBackAddress = callBack.noHiddenBackAddress(uid, addressId);
final String key = MetaKey.RECALL_ADDRESS, hiiden_key = MetaKey.RECALL_HIDDEN_ADDRESS;
E noHiddenAddressMeta= callBack.buildnoHiddenAddressMeta(uid, orderCode, key, noHiddenBackAddress);
//hidden address
E hiddenAddressMeta= callBack.buildHiddenAddressMeta(uid, orderCode, hiiden_key, hiddenBackAddress);
//
List<E> boms = new ArrayList<>(2);
boms.add(noHiddenAddressMeta);
boms.add(hiddenAddressMeta);
List<E> pboms = callBack.selectByMetaKeys(uid, orderCode, Arrays.asList(key, hiiden_key));
if(CollectionUtils.isEmpty(pboms)){
callBack.insertBatch(boms);
}else{
boolean hitNoHidden = false;
boolean hitHidden = false;
for (E pbom : pboms){
if (callBack.hitHidden(pbom, hiiden_key)){
hitHidden = true;
}
if (callBack.hitNoHidden(pbom, key)){
hitNoHidden = true;
}
}
doPersistent4AddessMeta(hitHidden, hiddenAddressMeta, callBack);
doPersistent4AddessMeta(hitNoHidden, noHiddenAddressMeta, callBack);
}
}
private void doPersistent4AddessMeta(boolean isExisted, E bom, ActionCallBack callBack){
if (isExisted){
callBack.updateMetaVal(bom);
}else {
callBack.insert(bom);
}
}
public interface ActionCallBack<E>{
List<E> selectByMetaKeys(int uid, long orderCode, List<String> metaKeys);
void insertBatch(List<E> list);
void insert(E e);
void updateMetaVal(E e);
AddressInfo hiddenBackAddress(int uid, int addressId);
AddressInfo noHiddenBackAddress(int uid, int addressId);
E buildnoHiddenAddressMeta(int uid, long orderCode, String key, AddressInfo noHiddenBackAddress);
E buildHiddenAddressMeta(int uid, long orderCode, String hiddenKey, AddressInfo hiddenBackAddress);
boolean hitHidden(E e, String hidden_key);
boolean hitNoHidden(E e, String noHiddenKey);
}
}
... ...
package com.yohoufo.order.service.seller.deposit;
import com.alibaba.fastjson.JSONObject;
import com.yoho.error.ServiceError;
import com.yoho.error.exception.ServiceException;
import com.yohobuy.ufo.model.order.common.AppraiseOrderStatus;
import com.yohobuy.ufo.model.order.common.OrderAttributes;
import com.yohobuy.ufo.model.order.common.OrderCodeType;
... ... @@ -8,8 +11,11 @@ import com.yohobuy.ufo.model.order.resp.DepositOrderInStorePrdListResp;
import com.yohobuy.ufo.model.order.resp.PageResp;
import com.yohobuy.ufo.model.order.resp.SellerDepositOrderComputeResp;
import com.yohobuy.ufo.model.order.resp.SellerDepositOrderSubmitResp;
import com.yohobuy.ufo.model.order.vo.AddressInfo;
import com.yohobuy.ufo.model.order.vo.GoodsVo;
import com.yohobuy.ufo.model.order.vo.ProductVo;
import com.yohoufo.common.exception.UfoServiceException;
import com.yohoufo.common.utils.AddressUtil;
import com.yohoufo.common.utils.BigDecimalHelper;
import com.yohoufo.dal.order.AppraiseOrderGoodsMapper;
import com.yohoufo.dal.order.AppraiseOrderMapper;
... ... @@ -17,18 +23,17 @@ import com.yohoufo.dal.order.AppraiseOrderMetaMapper;
import com.yohoufo.dal.order.AppraiseOrderStorageMapper;
import com.yohoufo.dal.order.model.AppraiseOrder;
import com.yohoufo.dal.order.model.AppraiseOrderGoods;
import com.yohoufo.dal.order.model.AppraiseOrderMeta;
import com.yohoufo.dal.order.model.AppraiseOrderStorage;
import com.yohoufo.order.common.ClientType;
import com.yohoufo.order.convert.SellerOrderConvertor;
import com.yohoufo.order.model.dto.SellerDepositOrderContext;
import com.yohoufo.order.model.dto.SellerDepositSubOrderContext;
import com.yohoufo.order.model.dto.SellerOrderComputeResult;
import com.yohoufo.order.service.DepositService;
import com.yohoufo.order.service.IGoodsService;
import com.yohoufo.order.service.impl.AbsGoodsServiceOrderService;
import com.yohoufo.order.service.impl.AppraiseAddressService;
import com.yohoufo.order.service.impl.AppraiseOrderCreateService;
import com.yohoufo.order.service.impl.*;
import com.yohoufo.order.service.proxy.OrderStatusFlowService;
import com.yohoufo.order.service.proxy.UserProxyService;
import com.yohoufo.order.service.support.codegenerator.OrderCodeGenerator;
import com.yohoufo.order.utils.LoggerUtils;
import org.slf4j.Logger;
... ... @@ -38,6 +43,7 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@Service
public class SellerDepositOrderService extends AbsGoodsServiceOrderService implements IGoodsService {
... ... @@ -79,7 +85,8 @@ public class SellerDepositOrderService extends AbsGoodsServiceOrderService imple
@Autowired
private DepositService depositService;
@Autowired
private UserProxyService userProxyService;
... ... @@ -162,9 +169,42 @@ public class SellerDepositOrderService extends AbsGoodsServiceOrderService imple
return null;
}
@Autowired
private ServiceOrderProcessor serviceOrderProcessor;
public void cancel(SellerDepositOrderDetailReq req){
//TODO
long orderCode = req.getOrderCode();
if(serviceOrderProcessor.isGoodsServiceOrder(orderCode)){
logger.warn("cancel AppraiseOrder not GoodsServiceOrder, orderCode {}", orderCode);
throw new UfoServiceException(400, "订单已迷路");
}
ServiceOrderProcessor.ExistenceNode existenceNode = serviceOrderProcessor.isAppraiseOrder(orderCode);
if (!existenceNode.isExisted()){
logger.warn("cancel AppraiseOrder not exist, orderCode {}", orderCode);
throw new UfoServiceException(400, "订单已迷路");
}
AppraiseOrder pao = existenceNode.getAppraiseOrder();
OrderAttributes oa = OrderAttributes.getOrderAttributes(pao.getAttributes());
if (!OrderAttributes.DEPOSITE.equals(oa)){
logger.warn("cancel AppraiseOrder not deposit Order, orderCode {}", orderCode);
throw new UfoServiceException(400, "订单已迷路");
}
AppraiseOrderStatus appraiseOrderStatus = AppraiseOrderStatus.getByCode(pao.getStatus());
switch (appraiseOrderStatus){
case WAITING_PAY:
super.triggerStatusChange(orderCode, AppraiseOrderStatus.CANCEL_BEFORE_PAY, appraiseOrderStatus);
break;
case HAS_PAYED:
super.triggerStatusChange(orderCode, AppraiseOrderStatus.CANCEL_BEFORE_DELIVER, appraiseOrderStatus);
//TODO refund amount
break;
default:
throw new UfoServiceException(400, "订单不支持取消");
}
}
... ... @@ -173,7 +213,6 @@ public class SellerDepositOrderService extends AbsGoodsServiceOrderService imple
@Override
public int deliver2Depot(DeliverToDepotReq req) {
//
int rows = super.deliver2Depot(req);
if (rows==0){
return rows;
... ... @@ -247,4 +286,93 @@ public class SellerDepositOrderService extends AbsGoodsServiceOrderService imple
depositService.insertFakeDeposit(appraiseOrder.getUid(), appraiseOrder.getOrderCode(), appraiseOrder.getParentOrderCode());
return rows;
}
public void addOrModifyAddress(int uid, Long orderCode, String addressIdstr) {
int addressId = AddressUtil.getDecryptStr(addressIdstr);
if (addressId < 0){
logger.warn("addOrModifyAddress addressId invalidate, uid {}, orderCode {}, addressId is {}",
uid, orderCode, addressIdstr);
throw new ServiceException(ServiceError.ORDER_ADDRESSID_INVALIDATE);
}
AppraiseOrder pbo = appraiseOrderMapper.selectByOrderCode(orderCode);
if (pbo == null ){
logger.warn("in addOrModifyAddress AppraiseOrder is null,uid {} orderCode {} addressIdstr {}",
uid, orderCode, addressIdstr);
return;
}
Integer oa;
if (OrderAttributes.DEPOSITE.getCode() != (oa=pbo.getAttributes())){
logger.warn("in addOrModifyAddress AppraiseOrder.Attributes is {},uid {} orderCode {} addressIdstr {}",
oa, uid, orderCode, addressIdstr);
return;
}
MetaAddressService.ActionCallBack<AppraiseOrderMeta> callBack = new MetaAddressService.ActionCallBack<AppraiseOrderMeta>() {
@Override
public List<AppraiseOrderMeta> selectByMetaKeys(int uid, long orderCode, List<String> metaKeys) {
List<AppraiseOrderMeta> pboms = appraiseOrderMetaMapper.selectByOrderCodeMetaKeys(orderCode, metaKeys);
return pboms;
}
@Override
public void insertBatch(List<AppraiseOrderMeta> list) {
appraiseOrderMetaMapper.insertBatch(list);
}
@Override
public void insert(AppraiseOrderMeta appraiseOrderMeta) {
appraiseOrderMetaMapper.insert(appraiseOrderMeta);
}
@Override
public void updateMetaVal(AppraiseOrderMeta appraiseOrderMeta) {
appraiseOrderMetaMapper.updateMetaValueByOrderCodeAndMetaKey(appraiseOrderMeta);
}
@Override
public AddressInfo hiddenBackAddress(int uid, int addressId) {
return userProxyService.getHiddenAddressInfo(uid, addressId);
}
@Override
public AddressInfo noHiddenBackAddress(int uid, int addressId) {
return userProxyService.getAddressInfoNotHidden(uid, addressId);
}
@Override
public AppraiseOrderMeta buildnoHiddenAddressMeta(int uid, long orderCode, String key, AddressInfo noHiddenBackAddress) {
AppraiseOrderMeta noHiddenAddressMeta = new AppraiseOrderMeta();
noHiddenAddressMeta.setUid(uid);
noHiddenAddressMeta.setOrderCode(orderCode);
noHiddenAddressMeta.setMetaKey(key);
noHiddenAddressMeta.setMetaValue(JSONObject.toJSONString(noHiddenBackAddress));
return noHiddenAddressMeta;
}
@Override
public AppraiseOrderMeta buildHiddenAddressMeta(int uid, long orderCode, String hiddenKey, AddressInfo hiddenBackAddress) {
AppraiseOrderMeta hiddenAddressMeta=new AppraiseOrderMeta();
hiddenAddressMeta.setUid(uid);
hiddenAddressMeta.setOrderCode(orderCode);
hiddenAddressMeta.setMetaKey(hiddenKey);
hiddenAddressMeta.setMetaValue(JSONObject.toJSONString(hiddenBackAddress));
return hiddenAddressMeta;
}
@Override
public boolean hitHidden(AppraiseOrderMeta appraiseOrderMeta, String hidden_key) {
return appraiseOrderMeta.getMetaKey().equals(hidden_key);
}
@Override
public boolean hitNoHidden(AppraiseOrderMeta appraiseOrderMeta, String noHiddenKey) {
return appraiseOrderMeta.getMetaKey().equals(noHiddenKey);
}
};
new MetaAddressService().modifyAddressOfDepositOrder(uid, orderCode, addressIdstr, callBack);
}
}
... ...