|
|
@@ -8,10 +8,12 @@ import java.net.URLDecoder;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.date.DateTime;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import org.apache.commons.lang3.ObjectUtils;
|
|
|
import org.jeecg.common.api.vo.Result;
|
|
|
+import org.jeecg.common.exception.JeecgBootException;
|
|
|
import org.jeecg.common.system.query.QueryGenerator;
|
|
|
import org.jeecg.common.system.vo.DictModel;
|
|
|
import org.jeecg.common.system.vo.LoginUser;
|
|
|
@@ -28,7 +30,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
import org.jeecg.modules.pos.entity.PosType;
|
|
|
+import org.jeecg.modules.rooms.entity.CesGoods;
|
|
|
import org.jeecg.modules.rooms.entity.CesGoodsUnit;
|
|
|
+import org.jeecg.modules.rooms.service.CesGoodsServiceImpl;
|
|
|
import org.jeecg.modules.rooms.service.CesGoodsUnitServiceImpl;
|
|
|
import org.jeecgframework.poi.excel.ExcelImportUtil;
|
|
|
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
|
|
|
@@ -37,6 +41,8 @@ import org.jeecgframework.poi.excel.entity.ImportParams;
|
|
|
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
|
|
|
import org.jeecg.common.system.base.controller.JeecgController;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.test.annotation.Rollback;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
|
|
@@ -60,20 +66,23 @@ import org.apache.shiro.authz.annotation.RequiresPermissions;
|
|
|
public class KcStockController extends JeecgController<KcStock, IKcStockService> {
|
|
|
@Autowired
|
|
|
private IKcStockService kcStockService;
|
|
|
-@Autowired
|
|
|
-private IKcSupplierInGoodsService kcSupplierInGoodsService;
|
|
|
-@Autowired
|
|
|
-private IKcGoodsService kcGoodsService;
|
|
|
-@Autowired
|
|
|
-private CesGoodsUnitServiceImpl cesGoodsUnitService;
|
|
|
-@Autowired
|
|
|
-private IKcDepositoryService kcDepositoryService;
|
|
|
-@Autowired
|
|
|
-private IKcSupplierService kcSupplierService;
|
|
|
-@Autowired
|
|
|
-private IKcStockDetailService kcStockDetailService;
|
|
|
-@Autowired
|
|
|
-private IKcDepositoryInGoodsService kcDepositoryInGoodsService;
|
|
|
+ @Autowired
|
|
|
+ private IKcSupplierInGoodsService kcSupplierInGoodsService;
|
|
|
+ @Autowired
|
|
|
+ private IKcGoodsService kcGoodsService;
|
|
|
+ @Autowired
|
|
|
+ private CesGoodsUnitServiceImpl cesGoodsUnitService;
|
|
|
+ @Autowired
|
|
|
+ private IKcDepositoryService kcDepositoryService;
|
|
|
+ @Autowired
|
|
|
+ private IKcSupplierService kcSupplierService;
|
|
|
+ @Autowired
|
|
|
+ private IKcStockDetailService kcStockDetailService;
|
|
|
+ @Autowired
|
|
|
+ private IKcDepositoryInGoodsService kcDepositoryInGoodsService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CesGoodsServiceImpl cesGoodsService;
|
|
|
/**
|
|
|
* 分页列表查询
|
|
|
*
|
|
|
@@ -183,24 +192,27 @@ private IKcDepositoryInGoodsService kcDepositoryInGoodsService;
|
|
|
if (kcStock.getType().equals(2)) {
|
|
|
KcSupplierInGoods kcSupplierInGoods = kcSupplierInGoodsService.getById(kcStockDetail.getSupplierInGoodsId());
|
|
|
if (kcSupplierInGoods != null) {
|
|
|
- KcGoods kcGoods = kcGoodsService.getById(kcSupplierInGoods.getGoodsId());
|
|
|
- if (kcGoods != null) {
|
|
|
- kcStockDetail.setKcGoods(kcGoods);
|
|
|
- CesGoodsUnit cesGoodsUnit = cesGoodsUnitService.getById(kcGoods.getGoodUnit());
|
|
|
+ CesGoods cesGoods = cesGoodsService.getById(kcSupplierInGoods.getGoodsId());
|
|
|
+ if (cesGoods != null) {
|
|
|
+ kcStockDetail.setCesGoods(cesGoods);
|
|
|
+ kcStockDetail.setGoodId(cesGoods.getId());
|
|
|
+ CesGoodsUnit cesGoodsUnit = cesGoodsUnitService.getById(cesGoods.getGoodUnit());
|
|
|
if (cesGoodsUnit != null) {
|
|
|
- stockInfo += kcGoods.getName() + kcStockDetail.getNum() + cesGoodsUnit.getName() + ",";
|
|
|
+ stockInfo += cesGoods.getName() + kcStockDetail.getNum() + cesGoodsUnit.getName() + ",";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} else if (kcStock.getType().equals(1)||kcStock.getType().equals(3)) {
|
|
|
+
|
|
|
KcDepositoryInGoods kcDepositoryInGoods = kcDepositoryInGoodsService.getById(kcStockDetail.getSupplierInGoodsId());
|
|
|
if (kcDepositoryInGoods != null) {
|
|
|
- KcGoods kcGoods = kcGoodsService.getById(kcDepositoryInGoods.getGoodsId());
|
|
|
- if (kcGoods != null) {
|
|
|
- kcStockDetail.setKcGoods(kcGoods);
|
|
|
- CesGoodsUnit cesGoodsUnit = cesGoodsUnitService.getById(kcGoods.getGoodUnit());
|
|
|
+ CesGoods cesGoods = cesGoodsService.getById(kcDepositoryInGoods.getGoodsId());
|
|
|
+ if (cesGoods != null) {
|
|
|
+ kcStockDetail.setCesGoods(cesGoods);
|
|
|
+ kcStockDetail.setGoodId(cesGoods.getId());
|
|
|
+ CesGoodsUnit cesGoodsUnit = cesGoodsUnitService.getById(cesGoods.getGoodUnit());
|
|
|
if (cesGoodsUnit != null) {
|
|
|
- stockInfo += kcGoods.getName() + kcStockDetail.getNum() + cesGoodsUnit.getName() + ",";
|
|
|
+ stockInfo += cesGoods.getName() + kcStockDetail.getNum() + cesGoodsUnit.getName() + ",";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -208,7 +220,6 @@ private IKcDepositoryInGoodsService kcDepositoryInGoodsService;
|
|
|
}
|
|
|
kcStock.setStockInfo(stockInfo);
|
|
|
kcStockService.save(kcStock);
|
|
|
-
|
|
|
for (KcStockDetail kcStockDetail : kcStock.getStockDetailList()) {
|
|
|
kcStockDetail.setHotelId(kcStock.getHotelId());
|
|
|
kcStockDetail.setTenantId(TokenUtils.currentTenantId());
|
|
|
@@ -227,6 +238,7 @@ private IKcDepositoryInGoodsService kcDepositoryInGoodsService;
|
|
|
*/
|
|
|
@ApiOperation(value="审核", notes="审核")
|
|
|
@PostMapping(value = "/audit")
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public Result<String> audit(@RequestBody KcStock kcStock) {
|
|
|
kcStockService.updateById(kcStock);
|
|
|
if (kcStock.getStatus().equals(1)) {
|
|
|
@@ -235,48 +247,86 @@ private IKcDepositoryInGoodsService kcDepositoryInGoodsService;
|
|
|
lambdaQueryWrapper.eq(KcStockDetail::getStockId, kcStock.getCode());
|
|
|
List<KcStockDetail> stockDetailList = kcStockDetailService.list(lambdaQueryWrapper);
|
|
|
if (ObjectUtils.isNotEmpty(stockDetailList)) {
|
|
|
+ List<KcDepositoryInGoods> depositoryInGoodsList = new ArrayList<>();
|
|
|
+ List<CesGoods> goodsList = new ArrayList<>();
|
|
|
for (KcStockDetail kcStockDetail : stockDetailList) {
|
|
|
+ // 拿到当前仓库商品关联数据
|
|
|
KcSupplierInGoods kcSupplierInGoods = kcSupplierInGoodsService.getById(kcStockDetail.getSupplierInGoodsId());
|
|
|
if (kcSupplierInGoods != null) {
|
|
|
- KcGoods kcGoods = kcGoodsService.getById(kcSupplierInGoods.getGoodsId());
|
|
|
- if (kcGoods != null) {
|
|
|
- kcStockDetail.setKcGoods(kcGoods);
|
|
|
+ CesGoods cesGoods = cesGoodsService.getById(kcSupplierInGoods.getGoodsId());
|
|
|
+ if (cesGoods != null) {
|
|
|
+ kcStockDetail.setCesGoods(cesGoods);
|
|
|
}
|
|
|
}
|
|
|
- if (ObjectUtils.isNotEmpty(kcStockDetail.getKcGoods())) {
|
|
|
- LambdaQueryWrapper<KcDepositoryInGoods> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
|
|
|
- lambdaQueryWrapper2.eq(KcDepositoryInGoods::getDepositoryId, kcStock.getDepositoryId());
|
|
|
- lambdaQueryWrapper2.eq(KcDepositoryInGoods::getGoodsId, kcStockDetail.getKcGoods().getId());
|
|
|
- KcDepositoryInGoods kcDepositoryInGoods = kcDepositoryInGoodsService.getOne(lambdaQueryWrapper2);
|
|
|
- if (kcDepositoryInGoods != null) {
|
|
|
- kcDepositoryInGoods.setNum(kcDepositoryInGoods.getNum() + kcStockDetail.getNum());
|
|
|
- } else {
|
|
|
- kcDepositoryInGoods = new KcDepositoryInGoods();
|
|
|
- kcDepositoryInGoods.setTenantId(kcStock.getTenantId());
|
|
|
- kcDepositoryInGoods.setHotelId(kcStock.getHotelId());
|
|
|
- kcDepositoryInGoods.setDepositoryId(kcStock.getDepositoryId());
|
|
|
- kcDepositoryInGoods.setGoodsId(kcStockDetail.getKcGoods().getId());
|
|
|
- kcDepositoryInGoods.setNum(kcStockDetail.getNum());
|
|
|
- }
|
|
|
- kcDepositoryInGoodsService.saveOrUpdate(kcDepositoryInGoods);
|
|
|
+ if (ObjectUtils.isNotEmpty(kcStockDetail.getCesGoods())) {
|
|
|
+ // 有商品入库后修改商品数量,成本价设置为最后一次的进价
|
|
|
+ CesGoods cesGood = kcStockDetail.getCesGoods();
|
|
|
+ cesGood.setBid(kcStockDetail.getPrice());
|
|
|
+ cesGood.setInventory(cesGood.getInventory() + kcStockDetail.getNum());
|
|
|
+ goodsList.add(cesGood);
|
|
|
+// LambdaQueryWrapper<KcDepositoryInGoods> lambdaQueryWrapper2 = new LambdaQueryWrapper<>();
|
|
|
+// lambdaQueryWrapper2.eq(KcDepositoryInGoods::getDepositoryId, kcStock.getDepositoryId());
|
|
|
+// lambdaQueryWrapper2.eq(KcDepositoryInGoods::getGoodsId, kcStockDetail.getCesGoods().getId());
|
|
|
+// KcDepositoryInGoods kcDepositoryInGoods = kcDepositoryInGoodsService.getOne(lambdaQueryWrapper2);
|
|
|
+
|
|
|
+
|
|
|
+// if (kcDepositoryInGoods != null) {
|
|
|
+// kcDepositoryInGoods.setNum(kcDepositoryInGoods.getNum() + kcStockDetail.getNum());
|
|
|
+// } else {
|
|
|
+ KcDepositoryInGoods kcDepositoryInGoods = new KcDepositoryInGoods();
|
|
|
+ kcDepositoryInGoods.setTenantId(kcStock.getTenantId());
|
|
|
+ kcDepositoryInGoods.setHotelId(kcStock.getHotelId());
|
|
|
+ kcDepositoryInGoods.setDepositoryId(kcStock.getDepositoryId());
|
|
|
+ kcDepositoryInGoods.setGoodsId(cesGood.getId());
|
|
|
+ kcDepositoryInGoods.setNum(kcStockDetail.getNum());
|
|
|
+ kcDepositoryInGoods.setStockDetailId(kcStockDetail.getId());
|
|
|
+// }
|
|
|
+ depositoryInGoodsList.add(kcDepositoryInGoods);
|
|
|
}
|
|
|
}
|
|
|
+ System.out.println(depositoryInGoodsList.toString());
|
|
|
+ kcDepositoryInGoodsService.saveBatch(depositoryInGoodsList);
|
|
|
+ cesGoodsService.updateBatchById(goodsList);
|
|
|
}
|
|
|
} else if (kcStock.getType().equals(1)) {
|
|
|
LambdaQueryWrapper<KcStockDetail> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
lambdaQueryWrapper.eq(KcStockDetail::getStockId, kcStock.getCode());
|
|
|
+ // 循环的只会有一个仓库下的不同商品
|
|
|
List<KcStockDetail> stockDetailList = kcStockDetailService.list(lambdaQueryWrapper);
|
|
|
+ List<String> goodIds = stockDetailList.stream().map(KcStockDetail::getGoodId).collect(Collectors.toList());
|
|
|
+ List<CesGoods> goodsList = cesGoodsService.listByIds(goodIds);
|
|
|
+ List<KcDepositoryInGoods> depositoryInGoodsList = new ArrayList<>();
|
|
|
if (ObjectUtils.isNotEmpty(stockDetailList)) {
|
|
|
for (KcStockDetail kcStockDetail : stockDetailList) {
|
|
|
- KcDepositoryInGoods depositoryInGoods = kcDepositoryInGoodsService.getById(kcStockDetail.getSupplierInGoodsId());
|
|
|
- if (depositoryInGoods != null) {
|
|
|
- if (depositoryInGoods != null) {
|
|
|
- Integer num = depositoryInGoods.getNum() - kcStockDetail.getNum();
|
|
|
- if (num < 0) num = 0;
|
|
|
- depositoryInGoods.setNum(num);
|
|
|
- kcDepositoryInGoodsService.updateById(depositoryInGoods);
|
|
|
+ QueryWrapper<KcDepositoryInGoods> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.select("SUM(num) as num");
|
|
|
+ queryWrapper.eq("depository_id", kcStock.getDepositoryId());
|
|
|
+ queryWrapper.eq("goods_id", kcStockDetail.getGoodId());
|
|
|
+ KcDepositoryInGoods kcDepositoryInGoodList = kcDepositoryInGoodsService.getOne(queryWrapper);
|
|
|
+ if (kcDepositoryInGoodList.getNum() - kcStockDetail.getNum() < 0){
|
|
|
+ throw new JeecgBootException("库存不足");
|
|
|
+ }
|
|
|
+ Optional<CesGoods> goodsOptional = goodsList.stream().filter(e -> e.getId().equals(kcStockDetail.getGoodId())).findFirst();
|
|
|
+ if (goodsOptional.isPresent()){
|
|
|
+ // 商品中库存是否足够
|
|
|
+ int differ = goodsOptional.get().getInventory() - kcStockDetail.getNum();
|
|
|
+ if (differ < 0){
|
|
|
+ throw new JeecgBootException("库存不足");
|
|
|
}
|
|
|
+ goodsOptional.get().setInventory(differ);
|
|
|
+ KcDepositoryInGoods kcDepositoryInGoods = new KcDepositoryInGoods();
|
|
|
+ kcDepositoryInGoods.setTenantId(kcStock.getTenantId());
|
|
|
+ kcDepositoryInGoods.setHotelId(kcStock.getHotelId());
|
|
|
+ kcDepositoryInGoods.setDepositoryId(kcStock.getDepositoryId());
|
|
|
+ kcDepositoryInGoods.setGoodsId(goodsOptional.get().getId());
|
|
|
+ kcDepositoryInGoods.setNum(-kcStockDetail.getNum());
|
|
|
+ kcDepositoryInGoods.setStockDetailId(kcStockDetail.getId());
|
|
|
+ depositoryInGoodsList.add(kcDepositoryInGoods);
|
|
|
+ }else {
|
|
|
+ throw new JeecgBootException("未找到商品");
|
|
|
}
|
|
|
+ cesGoodsService.updateBatchById(goodsList);
|
|
|
+ kcDepositoryInGoodsService.saveBatch(depositoryInGoodsList);
|
|
|
}
|
|
|
}
|
|
|
} else if (kcStock.getType().equals(3)) {
|
|
|
@@ -320,24 +370,24 @@ private IKcDepositoryInGoodsService kcDepositoryInGoodsService;
|
|
|
if (kcStock.getType().equals(2)) {
|
|
|
KcSupplierInGoods kcSupplierInGoods = kcSupplierInGoodsService.getById(kcStockDetail.getSupplierInGoodsId());
|
|
|
if (kcSupplierInGoods != null) {
|
|
|
- KcGoods kcGoods = kcGoodsService.getById(kcSupplierInGoods.getGoodsId());
|
|
|
- if (kcGoods != null) {
|
|
|
- kcStockDetail.setKcGoods(kcGoods);
|
|
|
- CesGoodsUnit cesGoodsUnit = cesGoodsUnitService.getById(kcGoods.getGoodUnit());
|
|
|
+ CesGoods cesGoods = cesGoodsService.getById(kcSupplierInGoods.getGoodsId());
|
|
|
+ if (cesGoods != null) {
|
|
|
+ kcStockDetail.setCesGoods(cesGoods);
|
|
|
+ CesGoodsUnit cesGoodsUnit = cesGoodsUnitService.getById(cesGoods.getGoodUnit());
|
|
|
if (cesGoodsUnit != null) {
|
|
|
- stockInfo += kcGoods.getName() + kcStockDetail.getNum() + cesGoodsUnit.getName() + ",";
|
|
|
+ stockInfo += cesGoods.getName() + kcStockDetail.getNum() + cesGoodsUnit.getName() + ",";
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} else if (kcStock.getType().equals(1)) {
|
|
|
KcDepositoryInGoods kcDepositoryInGoods = kcDepositoryInGoodsService.getById(kcStockDetail.getSupplierInGoodsId());
|
|
|
if (kcDepositoryInGoods != null) {
|
|
|
- KcGoods kcGoods = kcGoodsService.getById(kcDepositoryInGoods.getGoodsId());
|
|
|
- if (kcGoods != null) {
|
|
|
- kcStockDetail.setKcGoods(kcGoods);
|
|
|
- CesGoodsUnit cesGoodsUnit = cesGoodsUnitService.getById(kcGoods.getGoodUnit());
|
|
|
+ CesGoods cesGoods = cesGoodsService.getById(kcDepositoryInGoods.getGoodsId());
|
|
|
+ if (cesGoods != null) {
|
|
|
+ kcStockDetail.setCesGoods(cesGoods);
|
|
|
+ CesGoodsUnit cesGoodsUnit = cesGoodsUnitService.getById(cesGoods.getGoodUnit());
|
|
|
if (cesGoodsUnit != null) {
|
|
|
- stockInfo += kcGoods.getName() + kcStockDetail.getNum() + cesGoodsUnit.getName() + ",";
|
|
|
+ stockInfo += cesGoods.getName() + kcStockDetail.getNum() + cesGoodsUnit.getName() + ",";
|
|
|
}
|
|
|
}
|
|
|
}
|