package com.gk.firework.Controller;
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.gk.firework.Controller.Base.BaseController;
|
import com.gk.firework.Domain.*;
|
import com.gk.firework.Domain.Log.JsonParams;
|
import com.gk.firework.Domain.Utils.FilterObject;
|
import com.gk.firework.Domain.Utils.Msg;
|
import com.gk.firework.Domain.Utils.StringUtils;
|
import com.gk.firework.Domain.Vo.DirectionDetail;
|
import com.gk.firework.Domain.Vo.FireworkDeal;
|
import com.gk.firework.Domain.Vo.ProductVo;
|
import com.gk.firework.Service.*;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.*;
|
|
import java.text.DateFormat;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
import static com.gk.firework.Domain.Enum.ErrorCode.*;
|
import static com.gk.firework.Domain.Enum.ErrorCode.ERROR_10003;
|
|
/**
|
* @author : jingjy
|
* @date : 2021/4/1 10:21
|
*/
|
@Api(tags = "出库接口")
|
@RestController
|
@RequestMapping("/delivery")
|
public class DeliveryController extends BaseController {
|
@Autowired
|
private DeliveryOrderService deliveryOrderService;
|
@Autowired
|
private DeliveryDetailService deliveryDetailService;
|
@Autowired
|
private UserService userService;
|
@Autowired
|
private StockService stockService;
|
@Autowired
|
private ProductService productService;
|
@Autowired
|
private ProductLocusService productLocusService;
|
@Autowired
|
private WarnContentService warnContentService;
|
|
/**
|
* @param jsonArray 接收json数组格式为:[{"id":"用户ID","rfids":"出库流向码,以逗号进行拼接","time":"出库时间","type":"1或者2;1:正常出库;2:退货出库"}]
|
* @return msg
|
*/
|
@ApiOperation(value = "出库",notes = "接收json数组格式为:[{\"id\":\"用户ID\",\"rfids\":\"出库流向码,以逗号进行拼接\",\"time\":\"出库时间\",\"type\":\"1或者2;1:正常出库;2:退货出库\"}]")
|
@PostMapping("/out")
|
@JsonParams
|
public Msg deliveryStock(@RequestBody JSONArray jsonArray){
|
Msg msg = new Msg(true);
|
if (jsonArray.isEmpty()){
|
msg.setCode(ERROR_10001.getCode());
|
msg.setMessage(ERROR_10001.getMsg()+":未收到出库信息!");
|
return msg;
|
}
|
|
for (int i = 0; i < jsonArray.size(); i++) {
|
JSONObject jsonObject = jsonArray.getJSONObject(i);
|
String userId = jsonObject.getString("id");
|
String directionCodeStr = jsonObject.getString("rfids");
|
String datetime = jsonObject.getString("time");
|
String type = jsonObject.getString("type");
|
String cert = jsonObject.getString("cert");
|
Date date;
|
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
try {
|
date = dateFormat.parse(datetime);
|
} catch (ParseException e) {
|
msg.setCode(ERROR_10003.getCode());
|
msg.setMessage(ERROR_10003.getMsg()+":日期类型错误!");
|
return msg;
|
}
|
|
if (StringUtils.isBlank(directionCodeStr)){
|
msg.setCode(ERROR_10001.getCode());
|
msg.setMessage(ERROR_10001.getMsg()+":流向码不能为空");
|
return msg;
|
}
|
|
boolean isUser = userService.checkUserById(userId);
|
if (!isUser){
|
msg.setCode(ERROR_50001.getCode());
|
msg.setMessage(ERROR_50001.getMsg()+":未找到相关用户信息,不能出库!");
|
return msg;
|
}
|
UserInfo userInfo = userService.getById(userId);
|
|
List<String> directionCodes = StringUtils.toList(directionCodeStr);
|
|
//判断是否存在同时间同操作人出库记录
|
boolean exist = deliveryOrderService.isOrderExist(datetime,userInfo);
|
if (exist){
|
continue;
|
}
|
|
//出库单创建
|
DeliveryOrderInfo deliveryOrderInfo;
|
String auth = getAuth();
|
auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
|
deliveryOrderInfo = deliveryOrderService.generateDeliveryOrder(type,date,userInfo,cert,auth);
|
List<DeliveryDetailInfo>deliveryDetailInfos = deliveryDetailService.generateDeliveryDetail(deliveryOrderInfo,userInfo,directionCodes);
|
|
deliveryOrderService.save(deliveryOrderInfo);
|
deliveryDetailService.saveBatch(deliveryDetailInfos);
|
//扣库存
|
stockService.deliveryByDetail(date,deliveryDetailInfos,userInfo);
|
}
|
return msg;
|
}
|
|
@ApiOperation(value = "快速出库",response = Msg.class)
|
@PostMapping("/deliveryQuick")
|
@JsonParams
|
public Msg deliveryQuick(@RequestBody JSONArray jsonArray){
|
Msg msg = new Msg(true);
|
if (jsonArray.size() > 0)
|
{
|
for (int i = 0; i < jsonArray.size(); i++) {
|
JSONObject jsonObject = jsonArray.getJSONObject(i);
|
String userId = jsonObject.getString("id");
|
String directionCodeFirst = jsonObject.getString("rfidfirst");
|
String directionCodeLast = jsonObject.getString("rfidlast");
|
String datetime = jsonObject.getString("time");
|
String transport = jsonObject.getString("cert");
|
//type 1.常规出库; 2.退货出库
|
String type = "1";
|
Date date;
|
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
try {
|
date = dateFormat.parse(datetime);
|
} catch (ParseException e) {
|
return new Msg(ERROR_10003,"出库日期类型错误");
|
}
|
if (!(FireworkDeal.is22Characters(directionCodeFirst) && FireworkDeal.is22Characters(directionCodeLast))){
|
return new Msg(ERROR_10004,"流向码首尾不符合规则,无法快速出库");
|
}
|
boolean isUser = userService.checkUserById(userId);
|
if (!isUser){
|
return new Msg(ERROR_50001,"未找到相关用户信息,不能出库");
|
}
|
UserInfo userInfo = userService.getById(userId);
|
//判断是否存在同时间同操作人入库记录
|
boolean exist = deliveryOrderService.isOrderExist(datetime,userInfo);
|
if (exist){ continue; }
|
|
String auth = getAuth();
|
auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
|
DeliveryOrderInfo orderInfo = deliveryOrderService.generateDeliveryOrder(type,date,userInfo,transport, auth);
|
List<DeliveryDetailInfo>detailInfos = new ArrayList<>();
|
List<ProductLocusInfo>locusInfos = new ArrayList<>();
|
List<ProductVo> productVos = new ArrayList<>();
|
DirectionDetail detailFirst = FireworkDeal.dealDirectionCode(directionCodeFirst);
|
DirectionDetail detailLast = FireworkDeal.dealDirectionCode(directionCodeLast);
|
if (!detailFirst.getItemCode().equals(detailLast.getItemCode())){
|
return new Msg(ERROR_10004,"首尾商品编码不一致,无法快速出库");
|
}
|
if (Integer.parseInt(detailFirst.getSerialNo()) > Integer.parseInt(detailLast.getSerialNo())){
|
return new Msg(ERROR_10004,"首位商品序号大于末位,无法快速出库");
|
}
|
ProductVo productVo = productService.selectVoByDirection(directionCodeFirst);
|
if (productVo == null){
|
return new Msg(ERROR_50001,"未找到相关产品信息,不能出库");
|
}
|
|
Integer firstNo = Integer.parseInt(detailFirst.getSerialNo());
|
Integer lastNo = Integer.parseInt(detailLast.getSerialNo());
|
int perBoxNum = Integer.parseInt(detailFirst.getBoxNo());
|
int boxNum = ((lastNo-firstNo)/perBoxNum)+1;
|
int totalNum = 0;
|
|
for (int j=1;j<= boxNum;j++){
|
String dire = detailFirst.getItemCode()+detailFirst.getDateCode()+ String.format("%05d", firstNo)+String.format("%03d", perBoxNum);
|
DeliveryDetailInfo detailInfo = new DeliveryDetailInfo();
|
detailInfo.setDeliverycode(orderInfo.getOrdercode());
|
detailInfo.setDirectioncode(dire);
|
detailInfo.setItemcode(productVo.getItemCode());
|
detailInfo.setItemname(productVo.getName());
|
detailInfo.setCreateat(new Date());
|
detailInfo.setCreateby(userInfo.getUsername());
|
detailInfo.setNum(perBoxNum);
|
detailInfos.add(detailInfo);
|
ProductLocusInfo productLocusInfo = new ProductLocusInfo(dire,new Date(),date, userInfo.getCompany(),
|
null,ProductLocusInfo.DELIVERY_STATUS,productVo.getBoxNumber().toString());
|
locusInfos.add(productLocusInfo);
|
firstNo+=perBoxNum;
|
totalNum += perBoxNum;
|
}
|
|
FireworkDeal.getProductVos(directionCodeFirst,detailFirst,detailLast,productVos,productVo);
|
orderInfo.setBoxnum(totalNum);
|
deliveryOrderService.save(orderInfo);
|
deliveryDetailService.saveBatch(detailInfos);
|
productLocusService.insertBatch(locusInfos);
|
stockService.deliveryByDetail(date,detailInfos,userInfo);
|
}
|
}
|
return msg;
|
}
|
|
/**
|
* 退货出库
|
*/
|
@PostMapping("/entryReturn")
|
@ApiOperation(value = "退货出库", httpMethod = "POST")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "filter.code", type = "JSONObject",
|
value = " JSONObject{\"datetime\":\"时间\",\"data\":[{\"directionCode\":\"流向码\"},{\"directionCode\":\"流向码\"}]}"),
|
})
|
@JsonParams
|
public Msg getProductListByCodes(@RequestBody JSONObject object) {
|
JSONArray jsonArray = object.getJSONArray("data");
|
String datetime = object.getString("datetime");
|
Date date;
|
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
try {
|
date = dateFormat.parse(datetime);
|
} catch (ParseException e) {
|
return new Msg(ERROR_10003,"日期类型错误!");
|
}
|
//生成出库单号,类型,退货出库
|
DeliveryOrderInfo deliveryOrderInfo;
|
UserInfo userInfo = userService.getById(getUser().getId());
|
String auth = getAuth();
|
auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
|
|
deliveryOrderInfo = deliveryOrderService.generateDeliveryOrder(FireworkDeal.OTHER_DELIVERY,date,userInfo, null, auth);
|
List<DeliveryDetailInfo>deliveryDetailInfos = new ArrayList<>();
|
List<StockInfo>stockInfos = new ArrayList<>();
|
for (int i = 0; i < jsonArray.size(); i++) {
|
// 遍历 jsonArray 数组,把每一个对象转成 json 对象
|
JSONObject jsonObject = jsonArray.getJSONObject(i);
|
String directionCode = jsonObject.getString("directionCode");
|
DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
|
ProductInfo productInfo = productService.selectByDirection(directionDetail.getItemCode());
|
|
// 生成出库详情,库存OWNER设置为空
|
DeliveryDetailInfo deliveryDetailInfo = new DeliveryDetailInfo();
|
deliveryDetailInfo.setDirectioncode(directionCode);
|
deliveryDetailInfo.setDeliverycode(deliveryOrderInfo.getOrdercode());
|
deliveryDetailInfo.setItemcode(directionDetail.getItemCode());
|
deliveryDetailInfo.setItemname(productInfo.getName());
|
deliveryDetailInfo.setCreateat(new Date());
|
deliveryDetailInfo.setCreateby(getUser().getUsername());
|
deliveryDetailInfos.add(deliveryDetailInfo);
|
StockInfo stockInfo = stockService.selectStockByDirection(directionCode);
|
if (stockInfo == null){
|
return new Msg(ERROR_50001,"库存信息未找到");
|
}
|
stockInfo.setOwner("");
|
stockInfo.setModifiedby(userInfo.getUsername());
|
stockInfo.setModifieddate(date);
|
stockInfos.add(stockInfo);
|
}
|
|
deliveryOrderService.save(deliveryOrderInfo);
|
deliveryDetailService.saveBatch(deliveryDetailInfos);
|
stockService.updateStocks(stockInfos,userInfo);
|
return success();
|
}
|
|
|
/**
|
* @Description: 出库查询
|
* @date 2021/4/15 12:05
|
*/
|
@PostMapping("/outbound-query")
|
@ApiOperation(value = "出库查询", httpMethod = "POST")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "pageIndex", value = "当前页码", required = true),
|
@ApiImplicitParam(name = "pageSize", value = "页大小", required = true),
|
@ApiImplicitParam(name = "filter.province", value = "省"),
|
@ApiImplicitParam(name = "filter.city", value = "市"),
|
@ApiImplicitParam(name = "filter.district", value = "区"),
|
@ApiImplicitParam(name = "filter.street", value = "街道"),
|
@ApiImplicitParam(name = "filter.committee", value = "委员会"),
|
@ApiImplicitParam(name = "filter.starttime", value = "开始时间"),
|
@ApiImplicitParam(name = "filter.endtime", value = "结束时间"),
|
@ApiImplicitParam(name = "filter.transportcert", value = "运输证号码"),
|
@ApiImplicitParam(name = "filter.enterprisename", value = "入库企业名称"),
|
@ApiImplicitParam(name = "filter.safetysupervision", value = "安全监管分类"),
|
@ApiImplicitParam(name = "filter.code", value = "单号"),
|
})
|
Object getOutboundInfo(@RequestBody FilterObject jsonFilter) {
|
Integer pageIndex = jsonFilter.getPageIndex();
|
Integer pageSize = jsonFilter.getPageSize();
|
IPage page = deliveryOrderService.selectPage(new Page<>(pageIndex, pageSize), jsonFilter.getFilter(), getUser());
|
return success(page);
|
}
|
|
@PostMapping("/stock/outbound-query")
|
@ApiOperation(value = "出库查询", httpMethod = "POST")
|
Object getStockOutboundInfo(@RequestBody FilterObject jsonFilter) {
|
Integer pageIndex = jsonFilter.getPageIndex();
|
Integer pageSize = jsonFilter.getPageSize();
|
IPage page = deliveryOrderService.selectStockPage(new Page<>(pageIndex, pageSize), jsonFilter.getFilter(), getUser());
|
return success(page);
|
}
|
|
/**
|
* @Description: 出库导出
|
* @date 2021/4/19 17:24
|
*/
|
/**
|
* @Description: 出库查询
|
* @date 2021/4/15 12:05
|
*/
|
@PostMapping("/export/outbound")
|
@ApiOperation(value = "出库查询", httpMethod = "POST")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "pageIndex", value = "当前页码", required = true),
|
@ApiImplicitParam(name = "pageSize", value = "页大小", required = true),
|
@ApiImplicitParam(name = "filter.province", value = "省"),
|
@ApiImplicitParam(name = "filter.city", value = "市"),
|
@ApiImplicitParam(name = "filter.district", value = "区"),
|
@ApiImplicitParam(name = "filter.street", value = "街道"),
|
@ApiImplicitParam(name = "filter.committee", value = "委员会"),
|
@ApiImplicitParam(name = "filter.starttime", value = "开始时间"),
|
@ApiImplicitParam(name = "filter.endtime", value = "结束时间"),
|
@ApiImplicitParam(name = "filter.transportcert", value = "运输证号码"),
|
@ApiImplicitParam(name = "filter.enterprisename", value = "入库企业名称"),
|
})
|
Object exportOutbound(@RequestBody FilterObject jsonFilter) {
|
List<DeliveryOrderInfo> list = deliveryOrderService.selectExportList(jsonFilter.getFilter(), getUser());
|
return success(list);
|
}
|
|
|
/**
|
* @Description: 根据{出库单号}查询出库明细
|
* @date 2021/4/15 12:05
|
*/
|
@PostMapping("/outbound-detail")
|
@ApiOperation(value = "出库单明细", httpMethod = "POST")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "pageIndex", value = "当前页码", required = true),
|
@ApiImplicitParam(name = "pageSize", value = "页大小", required = true),
|
@ApiImplicitParam(name = "filter.code", value = "入库单号code"),
|
})
|
Object getOutboundDetail(@RequestBody FilterObject jsonFilter) {
|
Integer pageIndex = jsonFilter.getPageIndex();
|
Integer pageSize = jsonFilter.getPageSize();
|
IPage page = deliveryDetailService.selectDetailPage(new Page<>(pageIndex, pageSize), jsonFilter.getFilter());
|
return success(page);
|
}
|
|
/**
|
* @Description: 根据{出库单code}查询出库明细并导出
|
* @date 2021/4/15 11:09
|
*/
|
@GetMapping("/export/outbound-detail")
|
@ApiOperation(value = "出库单明细导出", httpMethod = "POST")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "code", value = "出库单号code"),
|
})
|
Object getOutboundDetail(@RequestParam String code) {
|
List<Map> detailExport = deliveryDetailService.selectDetailExport(code);
|
return success(detailExport);
|
}
|
|
@GetMapping("/cert")
|
@ApiOperation(value = "根据运输证查询出库明细", httpMethod = "GET")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "cert", value = "运输证号"),
|
})
|
Msg getDeliveryDetailByCert(@RequestParam String cert){
|
if (StringUtils.isBlank(cert)){
|
return new Msg(ERROR_10001.getCode(),ERROR_10001.getMsg());
|
}
|
Map<String,List>map = new HashMap<>();
|
List<DeliveryOrderInfo> deliveryOrderInfos = deliveryOrderService.getDeliveryOrderByCert(cert);
|
if (deliveryOrderInfos == null || deliveryOrderInfos.size() == 0){
|
return new Msg(ERROR_50001.getCode(),ERROR_50001.getMsg()+":没有找到对应的出库记录!");
|
}
|
List<DeliveryDetailInfo>deliveryDetailInfoList = new ArrayList<>();
|
for (DeliveryOrderInfo deliveryOrderInfo : deliveryOrderInfos){
|
List<DeliveryDetailInfo>deliveryDetailInfos = deliveryDetailService.getDetailByCode(deliveryOrderInfo.getOrdercode());
|
deliveryDetailInfoList.addAll(deliveryDetailInfos);
|
}
|
List<ProductVo>productVos = deliveryOrderService.getProductVosByCert(cert);
|
map.put("detail",deliveryDetailInfoList);
|
map.put("product",productVos);
|
|
return success(map);
|
}
|
|
@ApiOperation(value = "批量退库")
|
@PostMapping("/returnBatch")
|
@JsonParams
|
public List<Msg> returnBatch(@RequestBody JSONArray array) {
|
List<Msg>msgList = new ArrayList<>();
|
if (array.size() < 1) {
|
return null;
|
}
|
for (int j = 0; j < array.size(); j++) {
|
// 遍历 jsonArray 数组,把每一个对象转成 json 对象
|
JSONObject object = array.getJSONObject(j);
|
JSONArray jsonArray = object.getJSONArray("data");
|
String datetime = object.getString("datetime");
|
Date date;
|
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
try {
|
date = dateFormat.parse(datetime);
|
} catch (ParseException e) {
|
msgList.add(new Msg(ERROR_10003, "日期类型错误!"));
|
continue;
|
}
|
//生成出库单号,类型,退货出库
|
DeliveryOrderInfo deliveryOrderInfo;
|
UserInfo userInfo = userService.getById(getUser().getId());
|
String auth = getAuth();
|
auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
|
|
deliveryOrderInfo = deliveryOrderService.generateDeliveryOrder(FireworkDeal.OTHER_DELIVERY, date, userInfo, null, auth);
|
List<DeliveryDetailInfo> deliveryDetailInfos = new ArrayList<>();
|
List<StockInfo> stockInfos = new ArrayList<>();
|
StringBuilder stringBuilder = new StringBuilder();
|
boolean flag = false;
|
for (int i = 0; i < jsonArray.size(); i++) {
|
// 遍历 jsonArray 数组,把每一个对象转成 json 对象
|
JSONObject jsonObject = jsonArray.getJSONObject(i);
|
String directionCode = jsonObject.getString("directionCode");
|
DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
|
ProductInfo productInfo = productService.selectByDirection(directionDetail.getItemCode());
|
|
// 生成出库详情,库存OWNER设置为空
|
DeliveryDetailInfo deliveryDetailInfo = new DeliveryDetailInfo();
|
deliveryDetailInfo.setDirectioncode(directionCode);
|
deliveryDetailInfo.setDeliverycode(deliveryOrderInfo.getOrdercode());
|
deliveryDetailInfo.setItemcode(directionDetail.getItemCode());
|
deliveryDetailInfo.setItemname(productInfo.getName());
|
deliveryDetailInfo.setCreateat(new Date());
|
deliveryDetailInfo.setCreateby(getUser().getUsername());
|
deliveryDetailInfos.add(deliveryDetailInfo);
|
StockInfo stockInfo = stockService.selectStockByDirection(directionCode);
|
if (stockInfo == null) {
|
stringBuilder.append(directionCode).append("库存信息未找到");
|
flag = true;
|
continue;
|
}
|
stockInfo.setOwner("");
|
stockInfos.add(stockInfo);
|
}
|
if (flag){
|
msgList.add(new Msg(ERROR_50001,stringBuilder.toString()));
|
continue;
|
}
|
|
deliveryOrderService.save(deliveryOrderInfo);
|
deliveryDetailService.saveBatch(deliveryDetailInfos);
|
stockService.updateStocks(stockInfos, getUser());
|
msgList.add(new Msg(SUCCESS));
|
}
|
return msgList;
|
}
|
|
}
|