|
@@ -586,7 +586,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
String orderSn = orderEntity.getOrderSn();
|
|
|
PickUpCodeEntity pickUpCodeEntity = pickUpCodeService.queryObject(orderSn);
|
|
|
if (pickUpCodeEntity != null) {
|
|
|
- pickUpCodeEntity.setPickUpCodeStatus("1");
|
|
|
+ pickUpCodeEntity.setPickUpCodeStatus(Dict.PickUpCodeStatusEnum.item_1.getStatus());
|
|
|
pickUpCodeService.update(pickUpCodeEntity);
|
|
|
}
|
|
|
TicketMailInfo mailInfo = new TicketMailInfo();
|
|
@@ -2089,297 +2089,6 @@ public class OrderServiceImpl implements OrderService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 海控,提交订单并付款
|
|
|
- * @param param 收银端提交的参数
|
|
|
- * @param user 当前收银端用户
|
|
|
- * @return 结果
|
|
|
- */
|
|
|
- @Override
|
|
|
- @Transactional
|
|
|
- @Deprecated
|
|
|
- public synchronized Map offlineRetailSubmitHaiKong(Map param, SysUserEntity user) {
|
|
|
- /*// 解析订单数据 List
|
|
|
- List<LinkedHashMap> goodsList = (List<LinkedHashMap>) param.get("goodsList");
|
|
|
- // 解析用户信息 LinkedHashMap
|
|
|
- Map userInfo = (Map) param.get("userInfo");
|
|
|
- // 解析支付码 String
|
|
|
- String parCode = (String) param.get("payCode");
|
|
|
- // 解析sessionId(WebSocket) String
|
|
|
- String sessionId = (String) param.get("sessionId");
|
|
|
- // machineCode
|
|
|
- String machineCode = (String) param.get("machineCode");
|
|
|
- //选择的方式 1柜取 0邮寄
|
|
|
- int status = Integer.parseInt(param.get("status").toString());
|
|
|
- // 会员码
|
|
|
- String couponBarCode = param.get("couponBarCode").toString();
|
|
|
-
|
|
|
- Map<String, String> mapAddr = new HashMap<>();
|
|
|
- if (status == 0) {
|
|
|
- //省
|
|
|
- String cmbProvince = (String) param.get("cmbProvince");
|
|
|
- //市
|
|
|
- String cmbCity = (String) param.get("cmbCity");
|
|
|
- //区
|
|
|
- String cmbArea = (String) param.get("cmbArea");
|
|
|
- //详细地址
|
|
|
- String addrUser = (String) param.get("addrUser");
|
|
|
-
|
|
|
- mapAddr.put("cmbProvince", cmbProvince);
|
|
|
- mapAddr.put("cmbCity", cmbCity);
|
|
|
- mapAddr.put("cmbArea", cmbArea);
|
|
|
- mapAddr.put("addrUser", addrUser);
|
|
|
- }
|
|
|
-
|
|
|
- try {
|
|
|
- machineCode = URLDecoder.decode(machineCode, "UTF-8");
|
|
|
- } catch (Exception e) {
|
|
|
- LOGGER.error("机器码:", e);
|
|
|
- }
|
|
|
- Map resultObj = Maps.newHashMap();
|
|
|
- if (user == null) {
|
|
|
- resultObj.put("errno", 400);
|
|
|
- resultObj.put("errmsg", "用户登录超时,请重新登录");
|
|
|
- return resultObj;
|
|
|
- }
|
|
|
- if (!user.getRoleType().equalsIgnoreCase("2")) {
|
|
|
- resultObj.put("errno", 400);
|
|
|
- resultObj.put("errmsg", "该操作只允许店员账户操作");
|
|
|
- return resultObj;
|
|
|
- }
|
|
|
- if (org.apache.commons.lang3.StringUtils.isEmpty(user.getMerchSn())) {
|
|
|
- resultObj.put("errno", 400);
|
|
|
- resultObj.put("errmsg", "操作用户的商户编号为空,请先维护用户商户编号信息再来操作");
|
|
|
- return resultObj;
|
|
|
- }
|
|
|
- Long userId = user.getUserId();
|
|
|
- Integer storeId = user.getStoreId();
|
|
|
-
|
|
|
- // TODO 海控需求,下单流程修改,收银端接收会员码,付款码,用户信息,订单数据
|
|
|
- // 1. 校验库存:保税仓库存 + 展销店库存 - 出区数 >= 购买数
|
|
|
- // 获取保税仓库存
|
|
|
- String queryWarehouseStockResponse = haiKongWarehouseTemplate.queryWarehouseStock(null);
|
|
|
- if (org.springframework.util.StringUtils.isEmpty(queryWarehouseStockResponse)) {
|
|
|
- LOGGER.error("调用库存系统接口出现错误!返回结果为空!");
|
|
|
- throw new ServiceException("调用库存系统接口出现错误!");
|
|
|
- }
|
|
|
- WareQueryStockResponseDTO wareQueryStockResponseDTO = JacksonUtil.fromStringJson(queryWarehouseStockResponse, WareQueryStockResponseDTO.class);
|
|
|
- if (Objects.isNull(wareQueryStockResponseDTO)) {
|
|
|
- throw new ServiceException("解析一步达库存系统响应数据出现错误!");
|
|
|
- }
|
|
|
- List<WareQueryStockResponseDTO.WareQueryStockResponseItemDTO> items = wareQueryStockResponseDTO.getItems();
|
|
|
- // 解析xml,组装成map key=>sku value=>库存
|
|
|
- Map<String, Integer> stockMap = new HashMap<>(16);
|
|
|
- items.forEach(item -> {
|
|
|
- String itemCode = item.getItemCode();
|
|
|
- Integer quantity = item.getQuantity();
|
|
|
- if (stockMap.containsKey(itemCode)) {
|
|
|
- // 避免出现sku相同情况
|
|
|
- stockMap.put(itemCode, stockMap.get(itemCode) + quantity);
|
|
|
- } else {
|
|
|
- stockMap.put(itemCode, quantity);
|
|
|
- }
|
|
|
- });
|
|
|
- // 订单总价格(含税价)
|
|
|
- BigDecimal orderPrice = BigDecimal.ZERO;
|
|
|
- // 商品总价格(不含税)
|
|
|
- BigDecimal goodsPrice = BigDecimal.ZERO;
|
|
|
- // 订单所占用的税
|
|
|
- BigDecimal totalTax = BigDecimal.ZERO;
|
|
|
-
|
|
|
- List<OrderGoodsEntity> orderGoodsEntities = new ArrayList<>();
|
|
|
- List<GoodsEntity> goodsEntities = new ArrayList<>();
|
|
|
-
|
|
|
- // TODO 根据商品条码、sku、门店id查询相对应的商品信息,并组装成对象
|
|
|
- List<QueryGoodsVO> queryGoodsVOList = new ArrayList<>();
|
|
|
- goodsList.forEach(map -> {
|
|
|
- QueryGoodsVO queryGoodsVo = new QueryGoodsVO();
|
|
|
- queryGoodsVo.setProdBarcode((String) map.get("prodBarcode"));
|
|
|
- queryGoodsVo.setSku((String) map.get("goodsSn"));
|
|
|
- queryGoodsVo.setStoreId(storeId);
|
|
|
- queryGoodsVo.setSellVolume((Integer) map.get("sellVolume"));
|
|
|
- queryGoodsVo.setRetailPrice(new BigDecimal(String.valueOf(map.get("retailPrice"))));
|
|
|
- queryGoodsVo.setGoodsTaxes(new BigDecimal(String.valueOf(map.get("goodstaxes"))));
|
|
|
- queryGoodsVo.setDisCountedPrice(new BigDecimal(String.valueOf(map.get("disCountedPrice"))));
|
|
|
- queryGoodsVOList.add(queryGoodsVo);
|
|
|
- });
|
|
|
- // 将在循环中查询数据库改为一次性查询
|
|
|
- List<GoodsEntity> goodsEntityList = goodsService.queryGoodsStockByQueryGoodsVoList(queryGoodsVOList);
|
|
|
- // 复制集合数据
|
|
|
- ListUtils listUtils = BeanUtils.instantiate(ListUtils.class);
|
|
|
- listUtils.copyList(goodsEntityList, queryGoodsVOList);
|
|
|
- // 用来存储是否达到满赠条件的map
|
|
|
- Map<String, BigDecimal> categoryConditionMap = new HashMap<>();
|
|
|
- Map<String, BigDecimal> brandConditionMap = new HashMap<>();
|
|
|
-
|
|
|
- for (QueryGoodsVO goodsEntity : queryGoodsVOList) {
|
|
|
- OrderGoodsEntity orderGoodsEntity = new OrderGoodsEntity();
|
|
|
- // 要购买的数量
|
|
|
- Integer sellVolume = goodsEntity.getSellVolume();
|
|
|
- // 条码
|
|
|
- String prodBarcode = goodsEntity.getProdBarcode();
|
|
|
- // 当前sku
|
|
|
- String sku = goodsEntity.getSku();
|
|
|
- // 订单金额(含税价),订单总金额,用户支付的金额
|
|
|
- BigDecimal retailPrice = goodsEntity.getRetailPrice();
|
|
|
- // 商品预估税率
|
|
|
- BigDecimal goodsTaxes = goodsEntity.getGoodsTaxes();
|
|
|
- // 商品优惠金额
|
|
|
- BigDecimal disCountedPrice = goodsEntity.getDisCountedPrice();
|
|
|
- // 商品金额(不包含税的价格),推送海关电子订单需要
|
|
|
- goodsPrice = goodsPrice.add(retailPrice.subtract(goodsTaxes));
|
|
|
- // 累加订单价格(含税价)
|
|
|
- orderPrice = orderPrice.add(retailPrice);
|
|
|
- // 总税款
|
|
|
- totalTax = totalTax.add(goodsTaxes);
|
|
|
- // 当前sku
|
|
|
- String currentSku = goodsEntity.getSku();
|
|
|
- // 仓库库存
|
|
|
- Integer warehouseStock = stockMap.get(currentSku);
|
|
|
- // 门店库存
|
|
|
- Integer stockNum = goodsEntity.getStockNum();
|
|
|
- // 判断库存。。
|
|
|
- if (!stockMap.containsKey(currentSku)) {
|
|
|
- LOGGER.error("库存系统中不包含此sku:【{}】,校验库存出错!下单失败!", currentSku);
|
|
|
- throw new ServiceException(String.format("不包含此sku:【%s】", currentSku));
|
|
|
- } else {
|
|
|
- // 保税仓库存 + 展销店库存 - 出区数 >= 购买数
|
|
|
- // 当前出区数
|
|
|
- Integer exitRegionNumber = goodsEntity.getExitRegionNumber();
|
|
|
- // 保税仓库存 + 门店库存 - 出区数 >= 购买数
|
|
|
- if (!((warehouseStock + stockNum) - exitRegionNumber >= sellVolume)) {
|
|
|
- // 库存不足
|
|
|
- LOGGER.error("sku【{}】库存不足!商品条码:【{}】,门店库存:【{}】,保税仓库存:【{}】,当前出区数:【{}】", currentSku, prodBarcode, stockNum, warehouseStock, exitRegionNumber);
|
|
|
- throw new ServiceException(String.format("sku【%s】库存不足!商品条码:【%s】,门店库存:【%s】,保税仓库存:【%s】,当前出区数:【%s】", currentSku, prodBarcode, stockNum, warehouseStock, exitRegionNumber));
|
|
|
- }
|
|
|
- }
|
|
|
- // 设置订单详情信息
|
|
|
- GoodsEntity entity = new GoodsEntity(goodsEntity);
|
|
|
- wrapOrderGoods(orderGoodsEntity, entity);
|
|
|
- orderGoodsEntities.add(orderGoodsEntity);
|
|
|
-
|
|
|
- // 设置条件信息,暂不支持门店满赠活动
|
|
|
- String categoryId = String.valueOf(entity.getCategoryId());
|
|
|
- String brandId = String.valueOf(entity.getBrandId());
|
|
|
- if (!categoryConditionMap.containsKey(categoryId)) {
|
|
|
- categoryConditionMap.put(categoryId, retailPrice);
|
|
|
- } else {
|
|
|
- categoryConditionMap.put(categoryId, categoryConditionMap.get(categoryId).add(retailPrice));
|
|
|
- }
|
|
|
-// if (!brandConditionMap.containsKey(brandId)) {
|
|
|
-// brandConditionMap.put(brandId, retailPrice);
|
|
|
-// } else {
|
|
|
-// brandConditionMap.put(brandId, brandConditionMap.get(brandId).add(retailPrice));
|
|
|
-// }
|
|
|
- }
|
|
|
- // 2. 判断购买的商品是否能参与满减活动
|
|
|
- // 2.1 查询当前门店是否有满赠的活动
|
|
|
- List<MkActivitiesEntity> activitiesEntities = mkActivitiesService.queryByNowByMz(String.valueOf(storeId), DateUtils.format(new Date(), "yyyy-MM-dd"));
|
|
|
- if (CollectionUtils.isEmpty(activitiesEntities)) {
|
|
|
- LOGGER.error("----- 该门店【{}】暂无满赠活动! -----", storeId);
|
|
|
- } else {
|
|
|
- // 当前门店的活动编号
|
|
|
- List<Long> activitiesSnList = activitiesEntities.stream().map(MkActivitiesEntity::getMkaId).collect(Collectors.toList());
|
|
|
- // 活动
|
|
|
- List<MkActivitiesFullGiftEntity> mkActivitiesFullGiftEntities = mkActivitiesFullGiftService.queryByMkaIdList(activitiesSnList);
|
|
|
- if (CollectionUtils.isEmpty(mkActivitiesFullGiftEntities)) {
|
|
|
- LOGGER.error("----- 该门店【{}】暂无满赠活动! -----", storeId);
|
|
|
- } else {
|
|
|
- mkActivitiesFullGiftEntities.forEach(mkActivitiesFullGiftEntity -> {
|
|
|
- // 存在品牌满赠活动,暂不支持品牌满赠活动
|
|
|
-// String brandId = String.valueOf(mkActivitiesFullGiftEntity.getBrandId());
|
|
|
-// if (brandConditionMap.containsKey(brandId)) {
|
|
|
-// if (brandConditionMap.get(brandId).compareTo(mkActivitiesFullGiftEntity.getQualifiedAmount()) > 0) {
|
|
|
-// // 该品牌满足满赠条件
|
|
|
-//
|
|
|
-// }
|
|
|
-// }
|
|
|
- // 存在分类满赠活动
|
|
|
- String categoryId = String.valueOf(mkActivitiesFullGiftEntity.getCategoryId());
|
|
|
- if (!CollectionUtils.isEmpty(categoryConditionMap) && categoryConditionMap.containsKey(categoryId)) {
|
|
|
- if (categoryConditionMap.get(categoryId).compareTo(mkActivitiesFullGiftEntity.getQualifiedAmount()) > 0) {
|
|
|
- // 该分类满足满赠条件
|
|
|
- String giftBarcode = mkActivitiesFullGiftEntity.getGiftBarcode();
|
|
|
- String giftGoodsSn = mkActivitiesFullGiftEntity.getGiftGoodsSn();
|
|
|
- String shopSn = mkActivitiesFullGiftEntity.getShopSn();
|
|
|
- GoodsEntity goodsEntity = goodsService.queryGoodsStockByBarcodeAndStoreIdAndSku(giftBarcode, Integer.parseInt(shopSn), giftGoodsSn);
|
|
|
- // 存储赠送数
|
|
|
- goodsEntity.setGoodsNumber(mkActivitiesFullGiftEntity.getGiftNumber());
|
|
|
- OrderGoodsEntity orderGoodsEntity = new OrderGoodsEntity();
|
|
|
- wrapOrderGoods(orderGoodsEntity, goodsEntity);
|
|
|
- orderGoodsEntity.setRetailPrice(BigDecimal.ZERO);
|
|
|
- orderGoodsEntity.setDiscountedPrice(BigDecimal.ZERO);
|
|
|
- orderGoodsEntity.setActualPaymentAmount(BigDecimal.ZERO);
|
|
|
- orderGoodsEntities.add(orderGoodsEntity);
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- // 3. 校验是否是会员,调用会员系统查询会员信息,查询接口:
|
|
|
- // 优惠后价格
|
|
|
- BigDecimal afterDiscountPrice;
|
|
|
- if (org.springframework.util.StringUtils.isEmpty(couponBarCode)) {
|
|
|
- // 不是会员,不享受积分抵扣,只能使用门店的优惠券
|
|
|
- afterDiscountPrice = calculatePreferentialPrice(orderPrice, 0, goodsList, storeId, userInfo);
|
|
|
- } else {
|
|
|
- // 会员,计算优惠价
|
|
|
- String queryMemberInfoResponse;
|
|
|
- try {
|
|
|
- // 查询会员信息
|
|
|
- queryMemberInfoResponse = haiKongMemberTemplate.getMemberInfoByCode("{\"code\":\"" + couponBarCode + "\"}");
|
|
|
- Response<MemberInfoDTO> response = JacksonUtil.fromListJson(queryMemberInfoResponse, new TypeReference<Response<MemberInfoDTO>>() {
|
|
|
- });
|
|
|
- if (Objects.nonNull(response) && response.getSuccess()) {
|
|
|
- MemberInfoDTO memberInfoDTO = response.getData();
|
|
|
- Integer score = memberInfoDTO.getScore();
|
|
|
- if (Objects.nonNull(score) && score > 0) {
|
|
|
- // 有积分
|
|
|
- afterDiscountPrice = calculatePreferentialPrice(orderPrice, score, goodsList, storeId, userInfo);
|
|
|
- } else {
|
|
|
- // 无积分
|
|
|
- afterDiscountPrice = calculatePreferentialPrice(orderPrice, 0, goodsList, storeId, userInfo);
|
|
|
- }
|
|
|
- } else {
|
|
|
- LOGGER.error("查询会员信息失败!响应结果:{}", queryMemberInfoResponse);
|
|
|
- throw new ServiceException("查询会员信息失败!请重新下单!");
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- LOGGER.error("查询会员信息失败!请重新下单!");
|
|
|
- throw new ServiceException("查询会员信息失败!请重新下单!");
|
|
|
- }
|
|
|
- }
|
|
|
- // 4. 调用付款接口
|
|
|
- // 判断是微信的支付码还是支付宝的支付码
|
|
|
- if (parCode.startsWith("28")) {
|
|
|
- // 支付宝支付
|
|
|
- try {
|
|
|
-// AliPay(user, parCode, order, processRecordEntity, orderWXPayRecordCurrent, store);
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- throw e;
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 微信支付
|
|
|
- try {
|
|
|
-// wxPay(user, parCode, resultObj, order, processRecordEntity, orderWXPayRecordCurrent, store);
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- throw e;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 5. 扣减库存
|
|
|
-
|
|
|
- // 6. 订单入库
|
|
|
-
|
|
|
-
|
|
|
- return resultObj;*/
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
* 提交订单并付款
|
|
|
*
|
|
|
* @param param 提交的订单数据、包括用户信息、支付码、会话id、机器码(收银台)、取货方式、收货地址信息、会员码
|
|
@@ -2948,6 +2657,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
|
|
|
String body = JacksonUtil.toJson(sendOrderToVmcShopDTO);
|
|
|
|
|
|
+ String orderSn = order.getOrder_sn();
|
|
|
try {
|
|
|
|
|
|
String response = vmcShopTemplate.sendOrder(body);
|
|
@@ -2955,11 +2665,14 @@ public class OrderServiceImpl implements OrderService {
|
|
|
com.kmall.admin.haikong.utils.R<String> r = JacksonUtil.fromListJson(response, new TypeReference<com.kmall.admin.haikong.utils.R<String>>() {});
|
|
|
|
|
|
if (Objects.nonNull(r) && r.getCode() == 0) {
|
|
|
+ pickUpCodeService.updatePickUpCodeStatusByOrderSn(orderSn, Dict.PickUpCodeStatusEnum.item_0.getStatus());
|
|
|
LOGGER.info("推送订单到免税mall成功!响应结果:{}", response);
|
|
|
} else {
|
|
|
+ pickUpCodeService.updatePickUpCodeStatusByOrderSn(orderSn, Dict.PickUpCodeStatusEnum.item_6.getStatus());
|
|
|
LOGGER.error("推送订单到免税mall失败!响应结果:{}", response);
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
+ pickUpCodeService.updatePickUpCodeStatusByOrderSn(orderSn, Dict.PickUpCodeStatusEnum.item_6.getStatus());
|
|
|
LOGGER.error("推送订单到免税mall失败!出现异常!", e);
|
|
|
}
|
|
|
}
|
|
@@ -3487,7 +3200,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
orderDao.update(order);
|
|
|
// 修改小票码
|
|
|
PickUpCodeEntity pickUpCodeEntity = pickUpCodeService.queryObject(order.getOrderSn());
|
|
|
- pickUpCodeEntity.setPickUpCodeStatus("3");
|
|
|
+ pickUpCodeEntity.setPickUpCodeStatus(Dict.PickUpCodeStatusEnum.item_3.getStatus());
|
|
|
pickUpCodeService.update(pickUpCodeEntity);
|
|
|
//新增退款记录
|
|
|
OrderRefundEntity orderRefund = orderRefundLog("wx453456511","wx453456566","26999",order.getId(),user.getUserId(),order.getMerchOrderSn());
|
|
@@ -3517,7 +3230,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
orderDao.update(order);
|
|
|
// 修改小票码
|
|
|
PickUpCodeEntity pickUpCodeEntity = pickUpCodeService.queryObject(order.getOrderSn());
|
|
|
- pickUpCodeEntity.setPickUpCodeStatus("3");
|
|
|
+ pickUpCodeEntity.setPickUpCodeStatus(Dict.PickUpCodeStatusEnum.item_3.getStatus());
|
|
|
pickUpCodeService.update(pickUpCodeEntity);
|
|
|
//新增退款记录
|
|
|
OrderRefundEntity orderRefund = orderRefundLog(userRefund.getTradeNo(),userRefund.getOutTradeNo(),userRefund.getRefundFee(),order.getId(),user.getUserId(),order.getMerchOrderSn());
|
|
@@ -4752,6 +4465,7 @@ public class OrderServiceImpl implements OrderService {
|
|
|
LOGGER.info("=======> [resendOrderHkMall---重发订单数据成功,开始处理后续流程]"+response);
|
|
|
Map<String,String> res = JSON.parseObject(response,Map.class);
|
|
|
if("0".equals(res.get("code"))){
|
|
|
+ pickUpCodeService.updatePickUpCodeStatusByOrderSn(orderSn, Dict.PickUpCodeStatusEnum.item_0.getStatus());
|
|
|
return R.ok();
|
|
|
}else{
|
|
|
return R.error(500,"重发订单失败");
|