package com.atguigu.gware.service.impl;
import com.alibaba.fastjson.JSON;
import com.atguigu.gware.util.ActiveMQUtil;
import com.atguigu.gware.util.HttpclientUtil;
import com.atguigu.gware.bean.WareInfo;
import com.atguigu.gware.bean.WareOrderTask;
import com.atguigu.gware.bean.WareOrderTaskDetail;
import com.atguigu.gware.bean.WareSku;
import com.atguigu.gware.enums.TaskStatus;
import com.atguigu.gware.mapper.WareInfoMapper;
import com.atguigu.gware.mapper.WareOrderTaskDetailMapper;
import com.atguigu.gware.mapper.WareOrderTaskMapper;
import com.atguigu.gware.mapper.WareSkuMapper;
import com.atguigu.gware.service.GwareService;
import org.apache.activemq.command.ActiveMQMapMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import com.atguigu.gware.util.ActiveMQUtil;
import javax.jms.*;
import java.util.*;
@Service
public class GwareServiceImpl implements GwareService {
@Autowired
WareSkuMapper wareSkuMapper;
@Autowired
WareInfoMapper wareInfoMapper;
@Autowired
WareOrderTaskMapper wareOrderTaskMapper;
@Autowired
WareOrderTaskDetailMapper wareOrderTaskDetailMapper;
@Autowired
ActiveMQUtil activeMQUtil;
@Value("${order.split.url}")
private String ORDER_URL;
public Integer getStockBySkuId(String skuid){
Integer stock = wareSkuMapper.selectStockBySkuid(skuid);
return stock;
}
public boolean hasStockBySkuId(String skuid,Integer num){
Integer stock = getStockBySkuId( skuid);
if(stock==null||stock<num){
return false;
}
return true;
}
public List<WareInfo> getWareInfoBySkuid(String skuid){
List<WareInfo> wareInfos = wareInfoMapper.selectWareInfoBySkuid(skuid);
return wareInfos;
}
public List<WareInfo> getWareInfoList(){
List<WareInfo> wareInfos = wareInfoMapper.selectAll();
return wareInfos;
}
public void addWareInfo(){
WareInfo wareInfo =new WareInfo();
wareInfo.setAddress("1123");
wareInfo.setAreacode("123123");
wareInfo.setName("123123");
wareInfoMapper.insertSelective(wareInfo);
WareSku wareSku =new WareSku();
wareSku.setId(wareInfo.getId());
wareSku.setWarehouseId("991");
wareSkuMapper.insertSelective(wareSku);
}
public Map<String,List<String>> getWareSkuMap(List<String> skuIdlist){
Example example=new Example(WareSku.class);
example.createCriteria().andIn("skuId",skuIdlist);
List<WareSku> wareSkuList = wareSkuMapper.selectByExample(example);
Map<String,List<String>> wareSkuMap=new HashMap<>();
for (WareSku wareSku : wareSkuList) {
List<String> skulistOfWare = wareSkuMap.get(wareSku.getWarehouseId());
if (skulistOfWare==null){
skulistOfWare=new ArrayList<>();
}
skulistOfWare.add(wareSku.getSkuId());
wareSkuMap.put(wareSku.getWarehouseId(),skulistOfWare);
}
return wareSkuMap;
}
public List<Map<String,Object>> convertWareSkuMapList( Map<String,List<String>> wareSkuMap){
List<Map<String,Object>> wareSkuMapList=new ArrayList<>();
for (Map.Entry<String, List<String>> entry : wareSkuMap.entrySet()) {
Map<String,Object> skuWareMap=new HashMap<>();
String wareid= entry.getKey();
skuWareMap.put("wareId",wareid);
List<String> skuids = entry.getValue();
skuWareMap.put("skuIds",skuids);
wareSkuMapList.add(skuWareMap);
}
return wareSkuMapList;
}
public void addWareSku(WareSku wareSku){
wareSkuMapper.insertSelective(wareSku);
}
public List<WareSku> getWareSkuList(){
List<WareSku> wareSkuList = wareSkuMapper.selectWareSkuAll();
return wareSkuList;
}
public WareOrderTask getWareOrderTask(String taskId){
WareOrderTask wareOrderTask = wareOrderTaskMapper.selectByPrimaryKey(taskId);
WareOrderTaskDetail wareOrderTaskDetail=new WareOrderTaskDetail();
wareOrderTaskDetail.setTaskId(taskId);
List<WareOrderTaskDetail> details = wareOrderTaskDetailMapper.select(wareOrderTaskDetail);
wareOrderTask.setDetails(details);
return wareOrderTask;
}
/***
* 出库操作 减库存和锁定库存,
* @param taskExample
*/
@Transactional
public void deliveryStock(WareOrderTask taskExample) {
String trackingNo = taskExample.getTrackingNo();
WareOrderTask wareOrderTask=getWareOrderTask( taskExample.getId());
wareOrderTask.setTaskStatus(TaskStatus.DELEVERED);
List<WareOrderTaskDetail> details = wareOrderTask.getDetails();
for (WareOrderTaskDetail detail : details) {
WareSku wareSku=new WareSku();
wareSku.setWarehouseId(wareOrderTask.getWareId());
wareSku.setSkuId(detail.getSkuId());
wareSku.setStock(detail.getSkuNum());
wareSkuMapper.deliveryStock(wareSku);
}
wareOrderTask.setTaskStatus(TaskStatus.DELEVERED);
wareOrderTask.setTrackingNo(trackingNo);
wareOrderTaskMapper.updateByPrimaryKeySelective(wareOrderTask);
try {
sendToOrder(wareOrderTask);
} catch(JMSException e){
e.printStackTrace();
}
}
public void sendToOrder(WareOrderTask wareOrderTask) throws JMSException{
Connection conn = activeMQUtil.getConnection();
Session session = conn.createSession(true, Session.SESSION_TRANSACTED);
Destination destination = session.createQueue("SKU_DELIVER_QUEUE");
MessageProducer producer = session.createProducer(destination);
MapMessage mapMessage=new ActiveMQMapMessage();
mapMessage.setString("orderId",wareOrderTask.getOrderId());
mapMessage.setString("status",wareOrderTask.getTaskStatus().toString()); //小细节 枚举
mapMessage.setString("trackingNo",wareOrderTask.getTrackingNo());
producer.send(mapMessage);
session.commit();
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public List<WareOrderTask> checkOrderSplit(WareOrderTask wareOrderTask) {
List<WareOrderTaskDetail> details = wareOrderTask.getDetails();
List<String> skulist = new ArrayList<>();
for (WareOrderTaskDetail detail : details) {
skulist.add(detail.getSkuId());
}
Map<String, List<String>> wareSkuMap = getWareSkuMap(skulist);
// 一次物流运输无法完成订单
if (wareSkuMap.entrySet().size()<2) {
Map.Entry<String, List<String>> entry = wareSkuMap.entrySet().iterator().next();
String wareid = entry.getKey();
wareOrderTask.setWareId(wareid);
} else {
//需要拆单
List<Map<String, Object>> wareSkuMapList = convertWareSkuMapList(wareSkuMap);
String jsonString = JSON.toJSONString(wareSkuMapList);
Map<String, String> map = new HashMap<>();
map.put("orderId", wareOrderTask.getOrderId());
map.put("wareSkuMap", jsonString);
// 调用订单系统拆单接口
String resultJson = HttpclientUtil.doPost( ORDER_URL, map);
List<WareOrderTask> wareOrderTaskList = JSON.parseArray(resultJson, WareOrderTask.class);
if(wareOrderTaskList==null){
wareOrderTaskList = new ArrayList<>();
for (WareOrderTaskDetail detail : details) {
没有合适的资源?快使用搜索试试~ 我知道了~
gmall商城项目是一套简易分布式电商系统,包括简易前端系统及后台管理系统
共2000个文件
jpg:607个
png:382个
css:240个
需积分: 1 2 下载量 88 浏览量
2023-08-20
20:31:33
上传
评论
收藏 19.48MB ZIP 举报
温馨提示
dubbo系统源码,所有源码均经过严格测试,可直接运行,有需要的自取。
资源推荐
资源详情
资源评论
收起资源包目录
gmall商城项目是一套简易分布式电商系统,包括简易前端系统及后台管理系统 (2000个子文件)
gm1.css.bak 7KB
mvnw.cmd 6KB
mvnw.cmd 6KB
mvnw.cmd 6KB
mvnw.cmd 6KB
mvnw.cmd 6KB
mvnw.cmd 6KB
mvnw.cmd 6KB
mvnw.cmd 6KB
mvnw.cmd 6KB
mvnw.cmd 6KB
tracker.conf 199B
GL.css 624KB
bootstrap.css 144KB
bootstrap.css 142KB
bootstrap.min.css 120KB
bootstrap.min.css 118KB
easyui.css 67KB
easyui.css 67KB
easyui.css 67KB
easyui.css 66KB
easyui.css 64KB
easyui.css 63KB
success.css 62KB
index.css 58KB
header.css 40KB
font-awesome.css 37KB
shop.css 31KB
font-awesome.min.css 30KB
list.css 22KB
One_bdyStyle.css 18KB
swiper.min.css 17KB
swiper-3.4.2.min.css 17KB
JD2.css 16KB
angular.css 10KB
tabs.css 9KB
tabs.css 9KB
tabs.css 9KB
tabs.css 9KB
tabs.css 7KB
tabs.css 7KB
gm1.css 7KB
mobile.css 7KB
demo.css 6KB
color.css 6KB
SHOUhou.css 6KB
datagrid.css 6KB
datagrid.css 6KB
datagrid.css 6KB
panel.css 6KB
panel.css 6KB
panel.css 6KB
datagrid.css 6KB
panel.css 5KB
datagrid.css 5KB
datagrid.css 5KB
panel.css 5KB
panel.css 5KB
One_mainFoot.css 5KB
iconfont.css 5KB
style.css 5KB
style.css 4KB
main.css 4KB
linkbutton.css 4KB
linkbutton.css 4KB
linkbutton.css 4KB
linkbutton.css 4KB
linkbutton.css 4KB
window.css 4KB
window.css 4KB
window.css 4KB
window.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
calendar.css 4KB
window.css 4KB
window.css 4KB
index.css 4KB
linkbutton.css 3KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
tree.css 3KB
index.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
layout.css 3KB
textbox.css 3KB
textbox.css 3KB
textbox.css 3KB
textbox.css 3KB
textbox.css 3KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
白话机器学习
- 粉丝: 9523
- 资源: 7681
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功