|
|
@@ -53,6 +53,7 @@ import org.springblade.purchase.sales.feign.IOrderItemsClient;
|
|
|
import org.springblade.stock.entity.StockGoods;
|
|
|
import org.springblade.stock.feign.IStockGoodsClient;
|
|
|
import org.springblade.stock.vo.StockGoodsVO;
|
|
|
+import org.springblade.system.feign.ISysClient;
|
|
|
import org.springblade.system.user.entity.User;
|
|
|
import org.springblade.system.user.feign.IUserClient;
|
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
|
@@ -60,6 +61,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.BigInteger;
|
|
|
+import java.math.MathContext;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
@@ -89,6 +91,8 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
private final ICorpsDescClient corpsDescClient;
|
|
|
private final RedisTemplate<String, Object> redisTemplate;
|
|
|
private final IRedisClient redisClient;//redis缓存处理
|
|
|
+ private final ISysClient sysClient;//消息
|
|
|
+
|
|
|
@Override
|
|
|
public IPage<DeliveryItemsVO> selectDeliveryItemsPage(IPage<DeliveryItemsVO> page, DeliveryItemsVO deliveryItems) {
|
|
|
return page.setRecords(baseMapper.selectDeliveryItemsPage(page, deliveryItems));
|
|
|
@@ -96,46 +100,48 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
|
|
|
/**
|
|
|
* 保存发货信息
|
|
|
+ *
|
|
|
* @param pId
|
|
|
* @param deliveryItemsList
|
|
|
* @return
|
|
|
*/
|
|
|
- public List<DeliveryItems> saveDeliveryItemsList(Long pId,List<DeliveryItems> deliveryItemsList){
|
|
|
- for (DeliveryItems deliveryItems : deliveryItemsList) {
|
|
|
- if (deliveryItems.getItemId() == null){
|
|
|
- throw new RuntimeException("发货明细中商品id不能为空");
|
|
|
- }
|
|
|
- deliveryItems.setPid(pId);//父级ID
|
|
|
- deliveryItems.setTenantId(SecureUtil.getTenantId());//租户id
|
|
|
- if (deliveryItems.getId() == null){
|
|
|
- deliveryItems.setCreateUser(SecureUtil.getUserId());
|
|
|
- deliveryItems.setCreateTime(new Date());
|
|
|
- baseMapper.insert(deliveryItems);
|
|
|
- }else {
|
|
|
- deliveryItems.setUpdateTime(new Date());
|
|
|
- deliveryItems.setUpdateUser(SecureUtil.getUserId());
|
|
|
- baseMapper.updateById(deliveryItems);
|
|
|
- }
|
|
|
+ public List<DeliveryItems> saveDeliveryItemsList(Long pId, List<DeliveryItems> deliveryItemsList) {
|
|
|
+ for (DeliveryItems deliveryItems : deliveryItemsList) {
|
|
|
+ if (deliveryItems.getItemId() == null) {
|
|
|
+ throw new RuntimeException("发货明细中商品id不能为空");
|
|
|
+ }
|
|
|
+ deliveryItems.setPid(pId);//父级ID
|
|
|
+ deliveryItems.setTenantId(SecureUtil.getTenantId());//租户id
|
|
|
+ if (deliveryItems.getId() == null) {
|
|
|
+ deliveryItems.setCreateUser(SecureUtil.getUserId());
|
|
|
+ deliveryItems.setCreateTime(new Date());
|
|
|
+ baseMapper.insert(deliveryItems);
|
|
|
+ } else {
|
|
|
+ deliveryItems.setUpdateTime(new Date());
|
|
|
+ deliveryItems.setUpdateUser(SecureUtil.getUserId());
|
|
|
+ baseMapper.updateById(deliveryItems);
|
|
|
}
|
|
|
+ }
|
|
|
return deliveryItemsList;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取发货明细
|
|
|
+ *
|
|
|
* @param delivery
|
|
|
* @return
|
|
|
*/
|
|
|
- public List<DeliveryItems> getDeliveryItems(Delivery delivery){
|
|
|
+ public List<DeliveryItems> getDeliveryItems(Delivery delivery) {
|
|
|
List<DeliveryItems> deliveryItemsList = baseMapper.selectList(new QueryWrapper<DeliveryItems>().eq("pid", delivery.getId())
|
|
|
.eq("tenant_id", SecureUtil.getTenantId()).eq("is_deleted", 0).orderByAsc("id"));
|
|
|
|
|
|
String updateUserIds = "";//修改人id拼接
|
|
|
String createUserIds = "";//创建人id拼接
|
|
|
- for (DeliveryItems items : deliveryItemsList){
|
|
|
- if (ObjectUtil.isNotEmpty(items.getUpdateUser())){
|
|
|
+ for (DeliveryItems items : deliveryItemsList) {
|
|
|
+ if (ObjectUtil.isNotEmpty(items.getUpdateUser())) {
|
|
|
updateUserIds = updateUserIds + items.getUpdateUser() + ",";
|
|
|
}
|
|
|
- if (ObjectUtil.isNotEmpty(items.getCreateUser())){
|
|
|
+ if (ObjectUtil.isNotEmpty(items.getCreateUser())) {
|
|
|
createUserIds = createUserIds + items.getCreateUser() + ",";
|
|
|
}
|
|
|
}
|
|
|
@@ -145,7 +151,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
//获得创建人信息
|
|
|
List<User> createUserList = iUserClient.selectUserIds(createUserIds);
|
|
|
|
|
|
- if (CollectionUtils.isNotEmpty(deliveryItemsList)){
|
|
|
+ if (CollectionUtils.isNotEmpty(deliveryItemsList)) {
|
|
|
for (DeliveryItems deliveryItems : deliveryItemsList) {
|
|
|
if (ObjectUtil.isNotEmpty(updateUserList)) {
|
|
|
User user = updateUserList.stream().anyMatch(e -> e.getId().equals(deliveryItems.getUpdateUser())) ? updateUserList.stream().filter(e -> e.getId().equals(deliveryItems.getUpdateUser())).findFirst().get() : null;
|
|
|
@@ -161,10 +167,10 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (deliveryItems.getItemId() != null){
|
|
|
+ if (deliveryItems.getItemId() != null) {
|
|
|
//获取商品编码,名称,规格编码,规格型号
|
|
|
R<GoodsDescVO> goodsMessage = goodsDescClient.selectGoodsMessage(deliveryItems.getItemId());
|
|
|
- if (goodsMessage.isSuccess() && goodsMessage.getData() != null){
|
|
|
+ if (goodsMessage.isSuccess() && goodsMessage.getData() != null) {
|
|
|
deliveryItems.setCode(goodsMessage.getData().getCode());
|
|
|
deliveryItems.setCname(goodsMessage.getData().getCname());
|
|
|
deliveryItems.setTypeno(goodsMessage.getData().getTypeno());
|
|
|
@@ -234,15 +240,25 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
StockGoods stockGoods = null;
|
|
|
StockGoodsVO stock = null;
|
|
|
StockGoods goods = null;
|
|
|
- if ("681169".equals(AuthUtil.getTenantId())){
|
|
|
+ if ("681169".equals(AuthUtil.getTenantId())) {
|
|
|
goods = stockGoodsList.stream().filter(s ->
|
|
|
s.getGoodsId().equals(deliveryItems.getItemId())
|
|
|
- && s.getTradeType().equals("GN")
|
|
|
- && s.getCorpId().equals(deliveryItems.getCorpId())
|
|
|
- && s.getStorageId().equals(delivery.getStorageId())
|
|
|
+ && s.getTradeType().equals("GN")
|
|
|
+ && s.getCorpId().equals(deliveryItems.getCorpId())
|
|
|
+ && s.getStorageId().equals(delivery.getStorageId())
|
|
|
).findFirst().orElse(null);
|
|
|
- }else {
|
|
|
- stock = this.getStock(delivery.getTradeType(), deliveryItems.getCorpId(), delivery.getStorageId(), deliveryItems);
|
|
|
+ } else {
|
|
|
+ if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
|
|
|
+ && "1".equals(sysClient.getParamService("synchronous"))) {
|
|
|
+ goods = stockGoodsList.stream().filter(s ->
|
|
|
+ s.getGoodsId().equals(deliveryItems.getItemId())
|
|
|
+ && s.getTradeType().equals("GN")
|
|
|
+ && s.getCorpId().equals(deliveryItems.getCorpId())
|
|
|
+ && s.getStorageId().equals(delivery.getStorageId())
|
|
|
+ ).findFirst().orElse(null);
|
|
|
+ }else{
|
|
|
+ stock = this.getStock(delivery.getTradeType(), deliveryItems.getCorpId(), delivery.getStorageId(), deliveryItems);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// todo 国内贸易暂定不更新库存
|
|
|
@@ -251,7 +267,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
if (stock != null && delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType())) {
|
|
|
// 更新库存账
|
|
|
stockGoods = this.deliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems);
|
|
|
- // 撤销发货
|
|
|
+ // 撤销发货
|
|
|
} else if (stock != null && delivery.getDeliveryType().equals(DeliveryEnum.REPEAL.getType())) {
|
|
|
stockGoods = this.revocationDeliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems);
|
|
|
} else {
|
|
|
@@ -259,6 +275,20 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
throw new RuntimeException("库存为空");
|
|
|
}
|
|
|
|
|
|
+ } else {
|
|
|
+ if (ObjectUtils.isNotNull(sysClient.getParamService("inventory")) && "1".equals(sysClient.getParamService("inventory"))) {
|
|
|
+ // 发货
|
|
|
+ if (stock != null && delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType())) {
|
|
|
+ // 更新库存账
|
|
|
+ stockGoods = this.deliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems);
|
|
|
+ // 撤销发货
|
|
|
+ } else if (stock != null && delivery.getDeliveryType().equals(DeliveryEnum.REPEAL.getType())) {
|
|
|
+ stockGoods = this.revocationDeliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems);
|
|
|
+ } else {
|
|
|
+ //新增库存账
|
|
|
+ throw new RuntimeException("库存为空");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
// todo 更新订单明细中发货数量 采购和销售可能需要调不同接口
|
|
|
R actualQuantity = orderItemsClient.updateActualQuantity(deliveryItems.getSrcId(), deliveryItems.getArrivalQuantity(), delivery.getDeliveryType());
|
|
|
@@ -273,20 +303,29 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
}
|
|
|
}
|
|
|
//更新发货明细库存字段
|
|
|
- if ("681169".equals(AuthUtil.getTenantId())){
|
|
|
+ if ("681169".equals(AuthUtil.getTenantId())) {
|
|
|
if (goods != null) {
|
|
|
deliveryItems.setInventoryNumber(goods.getSurplusRouteQuantity());
|
|
|
- }else {
|
|
|
- deliveryItems.setInventoryNumber(BigDecimal.ZERO);
|
|
|
- }
|
|
|
- }else {
|
|
|
- if (stockGoods != null) {
|
|
|
- deliveryItems.setInventoryNumber(stockGoods.getSurplusRouteQuantity());
|
|
|
- } else if (stock != null) {
|
|
|
- deliveryItems.setInventoryNumber(stock.getSurplusRouteQuantity());
|
|
|
} else {
|
|
|
deliveryItems.setInventoryNumber(BigDecimal.ZERO);
|
|
|
}
|
|
|
+ } else {
|
|
|
+ if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
|
|
|
+ && "1".equals(sysClient.getParamService("synchronous"))) {
|
|
|
+ if (goods != null) {
|
|
|
+ deliveryItems.setInventoryNumber(goods.getSurplusRouteQuantity());
|
|
|
+ } else {
|
|
|
+ deliveryItems.setInventoryNumber(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if (stockGoods != null) {
|
|
|
+ deliveryItems.setInventoryNumber(stockGoods.getSurplusRouteQuantity());
|
|
|
+ } else if (stock != null) {
|
|
|
+ deliveryItems.setInventoryNumber(stock.getSurplusRouteQuantity());
|
|
|
+ } else {
|
|
|
+ deliveryItems.setInventoryNumber(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
baseMapper.updateById(deliveryItems);
|
|
|
}
|
|
|
@@ -318,61 +357,65 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
}
|
|
|
return deliveryItemsList;
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* 提交收货信息
|
|
|
+ *
|
|
|
* @param pId
|
|
|
* @param deliveryItemsList
|
|
|
* @param
|
|
|
* @return
|
|
|
*/
|
|
|
- public List<DeliveryItems> revocation(Long pId,Delivery delivery,List<DeliveryItems> deliveryItemsList){
|
|
|
+ public List<DeliveryItems> revocation(Long pId, Delivery delivery, List<DeliveryItems> deliveryItemsList) {
|
|
|
List<DeliveryItems> collect = deliveryItemsList.stream().filter(e -> e.getGoodType() == 0).collect(Collectors.toList());//发货商品
|
|
|
//收货只会增加积分
|
|
|
- if (delivery.getTradeType().equals(OrderTypeEnum.DOMESTIC.getType())){
|
|
|
+ if (delivery.getTradeType().equals(OrderTypeEnum.DOMESTIC.getType())) {
|
|
|
R updatePoints = this.updatePoints(delivery, collect, null);
|
|
|
- if (!updatePoints.isSuccess()){
|
|
|
- throw new RuntimeException(updatePoints.getMsg());
|
|
|
+ if (!updatePoints.isSuccess()) {
|
|
|
+ throw new RuntimeException(updatePoints.getMsg());
|
|
|
}
|
|
|
}
|
|
|
// todo 溢付款
|
|
|
R overpayment = this.updateOverpayment(delivery, collect);
|
|
|
- if (!overpayment.isSuccess()){
|
|
|
+ if (!overpayment.isSuccess()) {
|
|
|
throw new RuntimeException(overpayment.getMsg());
|
|
|
}
|
|
|
return deliveryItemsList;
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* 查询库存账
|
|
|
- * @param tradeType 单据类型 进口、出口、国内
|
|
|
- * @param corpId 销售公司/客户/工厂
|
|
|
- * @param storageId 仓库id
|
|
|
+ *
|
|
|
+ * @param tradeType 单据类型 进口、出口、国内
|
|
|
+ * @param corpId 销售公司/客户/工厂
|
|
|
+ * @param storageId 仓库id
|
|
|
* @param deliveryItems 明细信息
|
|
|
*/
|
|
|
- public StockGoodsVO getStock(String tradeType,Long corpId,Long storageId,DeliveryItems deliveryItems){
|
|
|
+ public StockGoodsVO getStock(String tradeType, Long corpId, Long storageId, DeliveryItems deliveryItems) {
|
|
|
String itemType = deliveryItems.getSpecificationAndModel();//产品型号
|
|
|
String lotNo = null;//批次号
|
|
|
String cntrNo = null;//箱号
|
|
|
String billNo = null;//提单号
|
|
|
String contractNumber = null;//合同号
|
|
|
//国内贸易和出口贸易查询同一个库存账接口,进口查询另一个接口需要合同号、提单号、箱号
|
|
|
- if (tradeType.equals(OrderTypeEnum.IMPORT.getType())){
|
|
|
+ if (tradeType.equals(OrderTypeEnum.IMPORT.getType())) {
|
|
|
itemType = null;
|
|
|
corpId = null;
|
|
|
cntrNo = deliveryItems.getCntrNo();//箱号
|
|
|
billNo = deliveryItems.getBillNo();//提单号
|
|
|
contractNumber = deliveryItems.getContractNumber();//合同号
|
|
|
- }else if (tradeType.equals(OrderTypeEnum.DOMESTIC.getType())){//国内
|
|
|
+ } else if (tradeType.equals(OrderTypeEnum.DOMESTIC.getType())) {//国内
|
|
|
//corpId = null;
|
|
|
//storageId = null;
|
|
|
- }else if (tradeType.equals(OrderTypeEnum.EXPORT.getType())){//出口
|
|
|
+ } else if (tradeType.equals(OrderTypeEnum.EXPORT.getType())) {//出口
|
|
|
storageId = null;
|
|
|
corpId = null;
|
|
|
- }else if (tradeType.equals(OrderTypeEnum.DEALER.getType())){//经销商
|
|
|
+ } else if (tradeType.equals(OrderTypeEnum.DEALER.getType())) {//经销商
|
|
|
corpId = null;
|
|
|
itemType = null;
|
|
|
}
|
|
|
- R<StockGoodsVO> goodsVOR = stockGoodsClient.selectStock(corpId, storageId, deliveryItems.getItemId(), itemType, lotNo, cntrNo, billNo, contractNumber,tradeType);
|
|
|
- if (goodsVOR.isSuccess()){
|
|
|
+ R<StockGoodsVO> goodsVOR = stockGoodsClient.selectStock(corpId, storageId, deliveryItems.getItemId(), itemType, lotNo, cntrNo, billNo, contractNumber, tradeType);
|
|
|
+ if (goodsVOR.isSuccess()) {
|
|
|
return goodsVOR.getData();
|
|
|
}
|
|
|
return null;
|
|
|
@@ -380,44 +423,48 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
|
|
|
/**
|
|
|
* 发货减少库存账
|
|
|
- * @param tradeType 单据类型 进口、出口、国内
|
|
|
- * @param stockId 库存账id
|
|
|
+ *
|
|
|
+ * @param tradeType 单据类型 进口、出口、国内
|
|
|
+ * @param stockId 库存账id
|
|
|
* @param deliveryItems 货物明细信息
|
|
|
*/
|
|
|
- public StockGoods deliverGoods(String tradeType,Long stockId,DeliveryItems deliveryItems){
|
|
|
+ public StockGoods deliverGoods(String tradeType, Long stockId, DeliveryItems deliveryItems) {
|
|
|
//查询库存账
|
|
|
R<StockGoods> stockById = stockGoodsClient.getStockById(stockId);
|
|
|
- if (!stockById.isSuccess()){
|
|
|
- throw new RuntimeException("查询库存账出错");
|
|
|
+ if (!stockById.isSuccess()) {
|
|
|
+ throw new RuntimeException("查询库存账出错");
|
|
|
}
|
|
|
- if (stockById.getData() == null){
|
|
|
- throw new RuntimeException("库存账不存在");
|
|
|
+ if (stockById.getData() == null) {
|
|
|
+ throw new RuntimeException("库存账不存在");
|
|
|
}
|
|
|
StockGoods stockGoods = stockById.getData();
|
|
|
//判断出库数量和结余数量的大小
|
|
|
- if (stockGoods.getBalanceQuantity().compareTo(deliveryItems.getActualQuantity()) < 0){
|
|
|
- throw new RuntimeException("当前结余数量为:"+stockGoods.getBalanceQuantity() +"小于发货数量,发货数量为:" +deliveryItems.getActualQuantity());
|
|
|
+ if (stockGoods.getBalanceQuantity().compareTo(deliveryItems.getActualQuantity()) < 0) {
|
|
|
+ throw new RuntimeException("当前结余数量为:" + stockGoods.getBalanceQuantity() + "小于发货数量,发货数量为:" + deliveryItems.getActualQuantity());
|
|
|
}
|
|
|
- if (stockGoods.getSurplusRouteQuantity().compareTo(deliveryItems.getActualQuantity()) < 0){
|
|
|
- throw new RuntimeException("当前可用数量为:"+stockGoods.getSurplusRouteQuantity() +"小于发货数量,发货数量为:" +deliveryItems.getActualQuantity());
|
|
|
+ if (stockGoods.getSurplusRouteQuantity().compareTo(deliveryItems.getActualQuantity()) < 0) {
|
|
|
+ throw new RuntimeException("当前可用数量为:" + stockGoods.getSurplusRouteQuantity() + "小于发货数量,发货数量为:" + deliveryItems.getActualQuantity());
|
|
|
+ }
|
|
|
+ stockGoods.setOutQuantity(stockGoods.getOutQuantity().add(deliveryItems.getActualQuantity()));//出库数量 加
|
|
|
+ if (ObjectUtils.isNotNull(sysClient.getParamService("inventory")) && "1".equals(sysClient.getParamService("inventory"))) {
|
|
|
+ stockGoods.setLockingQuantity(stockGoods.getLockingQuantity().subtract(deliveryItems.getActualQuantity()));//锁定数量 减
|
|
|
+ } else {
|
|
|
+ stockGoods.setBalanceQuantity(stockGoods.getBalanceQuantity().subtract(deliveryItems.getActualQuantity()));//结余数量 减
|
|
|
+ stockGoods.setSurplusRouteQuantity(stockGoods.getSurplusRouteQuantity().subtract(deliveryItems.getActualQuantity()));//可用数量 减
|
|
|
}
|
|
|
- stockGoods.setOutQuantity(stockGoods.getOutQuantity().add( deliveryItems.getActualQuantity()));//出库数量 加
|
|
|
- //stockGoods.setLockingQuantity(stockGoods.getLockingQuantity().subtract(deliveryItems.getActualQuantity()));//锁定数量 减
|
|
|
- stockGoods.setBalanceQuantity(stockGoods.getBalanceQuantity().subtract(deliveryItems.getActualQuantity()));//结余数量 减
|
|
|
- stockGoods.setSurplusRouteQuantity(stockGoods.getSurplusRouteQuantity().subtract(deliveryItems.getActualQuantity()));//可用数量 减
|
|
|
// stockGoods.setOutAmount(stockGoods.getOutAmount().add(deliveryItems.getDeliveryAmount()));//出库金额加
|
|
|
stockGoods.setOutAmount(stockGoods.getOutAmount().add(deliveryItems.getContractAmount()));//出库金额加
|
|
|
- if (tradeType.equals(OrderTypeEnum.IMPORT.getType())){
|
|
|
+ if (tradeType.equals(OrderTypeEnum.IMPORT.getType())) {
|
|
|
//判断出库发票重量和结余发票重量
|
|
|
- if (stockGoods.getBalanceWeight().compareTo(deliveryItems.getInvoiceWeight()) < 0){
|
|
|
- throw new RuntimeException("当前结余发票重量为:"+stockGoods.getBalanceWeight() +"小于发货发票重量,发货发票重量为:" +deliveryItems.getInvoiceWeight());
|
|
|
+ if (stockGoods.getBalanceWeight().compareTo(deliveryItems.getInvoiceWeight()) < 0) {
|
|
|
+ throw new RuntimeException("当前结余发票重量为:" + stockGoods.getBalanceWeight() + "小于发货发票重量,发货发票重量为:" + deliveryItems.getInvoiceWeight());
|
|
|
}
|
|
|
stockGoods.setOutWeight(stockGoods.getOutWeight().add(deliveryItems.getInvoiceWeight()));//出库发票重量
|
|
|
//stockGoods.setLockingWeight(stockGoods.getLockingWeight().subtract(deliveryItems.getInvoiceWeight()));//锁定发票重量
|
|
|
stockGoods.setBalanceWeight(stockGoods.getBalanceWeight().subtract(deliveryItems.getInvoiceWeight()));//结余发票重量
|
|
|
//判断出库码单重量和结余码单重量
|
|
|
- if (stockGoods.getBalanceVolumn().compareTo(deliveryItems.getBillWeight()) < 0){
|
|
|
- throw new RuntimeException("当前结余码单重量为:"+stockGoods.getBalanceVolumn() +"小于发货码单重量,发货码单重量为:" +deliveryItems.getBillWeight());
|
|
|
+ if (stockGoods.getBalanceVolumn().compareTo(deliveryItems.getBillWeight()) < 0) {
|
|
|
+ throw new RuntimeException("当前结余码单重量为:" + stockGoods.getBalanceVolumn() + "小于发货码单重量,发货码单重量为:" + deliveryItems.getBillWeight());
|
|
|
}
|
|
|
stockGoods.setOutVolumn(stockGoods.getOutVolumn().add(deliveryItems.getBillWeight()));//出库码单重量
|
|
|
//stockGoods.setLockingVolumn(stockGoods.getLockingVolumn().subtract(deliveryItems.getBillWeight()));//锁定码单重量
|
|
|
@@ -426,51 +473,58 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
stockGoods.setUpdateTime(new Date());
|
|
|
stockGoods.setUpdateUser(SecureUtil.getUserId());
|
|
|
boolean updateStock = stockGoodsClient.updateStock(stockGoods);
|
|
|
- if (!updateStock){
|
|
|
+ if (!updateStock) {
|
|
|
throw new RuntimeException("更新库存总账失败");
|
|
|
}
|
|
|
return stockGoods;
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* 撤销发货
|
|
|
- * @param tradeType 单据类型 进口、出口、国内
|
|
|
- * @param stockId 库存账id
|
|
|
+ *
|
|
|
+ * @param tradeType 单据类型 进口、出口、国内
|
|
|
+ * @param stockId 库存账id
|
|
|
* @param deliveryItems 货物明细信息
|
|
|
*/
|
|
|
- public StockGoods revocationDeliverGoods(String tradeType,Long stockId,DeliveryItems deliveryItems){
|
|
|
+ public StockGoods revocationDeliverGoods(String tradeType, Long stockId, DeliveryItems deliveryItems) {
|
|
|
//查询库存账
|
|
|
R<StockGoods> stockById = stockGoodsClient.getStockById(stockId);
|
|
|
- if (!stockById.isSuccess()){
|
|
|
- throw new RuntimeException("查询库存账出错");
|
|
|
+ if (!stockById.isSuccess()) {
|
|
|
+ throw new RuntimeException("查询库存账出错");
|
|
|
}
|
|
|
- if (stockById.getData() == null){
|
|
|
- throw new RuntimeException("库存账不存在");
|
|
|
+ if (stockById.getData() == null) {
|
|
|
+ throw new RuntimeException("库存账不存在");
|
|
|
}
|
|
|
StockGoods stockGoods = stockById.getData();
|
|
|
//判断出库数量和结余数量的大小
|
|
|
- if (stockGoods.getOutQuantity().compareTo(deliveryItems.getActualQuantity()) < 0){
|
|
|
- throw new RuntimeException("当前可减少出库数量为:"+stockGoods.getOutQuantity() +"小于发货数量,发货数量为:" +deliveryItems.getActualQuantity());
|
|
|
+ if (stockGoods.getOutQuantity().compareTo(deliveryItems.getActualQuantity()) < 0) {
|
|
|
+ throw new RuntimeException("当前可减少出库数量为:" + stockGoods.getOutQuantity() + "小于发货数量,发货数量为:" + deliveryItems.getActualQuantity());
|
|
|
}
|
|
|
- stockGoods.setOutQuantity(stockGoods.getOutQuantity().subtract( deliveryItems.getActualQuantity()));//出库数量 减
|
|
|
+ stockGoods.setOutQuantity(stockGoods.getOutQuantity().subtract(deliveryItems.getActualQuantity()));//出库数量 减
|
|
|
//stockGoods.setLockingQuantity(stockGoods.getLockingQuantity().add(deliveryItems.getActualQuantity()));//锁定数量 加
|
|
|
stockGoods.setBalanceQuantity(stockGoods.getBalanceQuantity().add(deliveryItems.getActualQuantity()));//结余数量 加
|
|
|
stockGoods.setSurplusRouteQuantity(stockGoods.getSurplusRouteQuantity().add(deliveryItems.getActualQuantity()));//可用数量 加
|
|
|
- if ("681169".equals(AuthUtil.getTenantId())){
|
|
|
+ if ("681169".equals(AuthUtil.getTenantId())) {
|
|
|
stockGoods.setOutAmount(stockGoods.getOutAmount().subtract(deliveryItems.getDeliveryAmount()));//出库金额减
|
|
|
- }else{
|
|
|
- stockGoods.setOutAmount(stockGoods.getOutAmount().subtract(deliveryItems.getContractAmount()));//出库金额减
|
|
|
+ } else {
|
|
|
+ if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
|
|
|
+ && "1".equals(sysClient.getParamService("synchronous"))) {
|
|
|
+ stockGoods.setOutAmount(stockGoods.getOutAmount().subtract(deliveryItems.getDeliveryAmount()));//出库金额减
|
|
|
+ }else{
|
|
|
+ stockGoods.setOutAmount(stockGoods.getOutAmount().subtract(deliveryItems.getContractAmount()));//出库金额减
|
|
|
+ }
|
|
|
}
|
|
|
- if (tradeType.equals(OrderTypeEnum.IMPORT.getType())){
|
|
|
+ if (tradeType.equals(OrderTypeEnum.IMPORT.getType())) {
|
|
|
//判断出库发票重量和结余发票重量
|
|
|
- if (stockGoods.getOutWeight().compareTo(deliveryItems.getInvoiceWeight()) < 0){
|
|
|
- throw new RuntimeException("当前出库发票重量为:"+stockGoods.getOutWeight() +"小于发货发票重量,发货发票重量为:" +deliveryItems.getInvoiceWeight());
|
|
|
+ if (stockGoods.getOutWeight().compareTo(deliveryItems.getInvoiceWeight()) < 0) {
|
|
|
+ throw new RuntimeException("当前出库发票重量为:" + stockGoods.getOutWeight() + "小于发货发票重量,发货发票重量为:" + deliveryItems.getInvoiceWeight());
|
|
|
}
|
|
|
stockGoods.setOutWeight(stockGoods.getOutWeight().subtract(deliveryItems.getInvoiceWeight()));//出库发票重量 减
|
|
|
//stockGoods.setLockingWeight(stockGoods.getLockingWeight().add(deliveryItems.getInvoiceWeight()));//锁定发票重量 加
|
|
|
stockGoods.setBalanceWeight(stockGoods.getBalanceWeight().add(deliveryItems.getInvoiceWeight()));//结余发票重量 加
|
|
|
//判断出库码单重量和结余码单重量
|
|
|
- if (stockGoods.getOutVolumn().compareTo(deliveryItems.getBillWeight()) < 0){
|
|
|
- throw new RuntimeException("当前出库码单重量为:"+stockGoods.getOutVolumn() +"小于发货码单重量,发货码单重量为:" +deliveryItems.getBillWeight());
|
|
|
+ if (stockGoods.getOutVolumn().compareTo(deliveryItems.getBillWeight()) < 0) {
|
|
|
+ throw new RuntimeException("当前出库码单重量为:" + stockGoods.getOutVolumn() + "小于发货码单重量,发货码单重量为:" + deliveryItems.getBillWeight());
|
|
|
}
|
|
|
stockGoods.setOutVolumn(stockGoods.getOutVolumn().subtract(deliveryItems.getBillWeight()));//出库码单重量 减
|
|
|
//stockGoods.setLockingVolumn(stockGoods.getLockingVolumn().add(deliveryItems.getBillWeight()));//锁定码单重量 加
|
|
|
@@ -479,7 +533,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
stockGoods.setUpdateTime(new Date());
|
|
|
stockGoods.setUpdateUser(SecureUtil.getUserId());
|
|
|
boolean updateStock = stockGoodsClient.updateStock(stockGoods);
|
|
|
- if (!updateStock){
|
|
|
+ if (!updateStock) {
|
|
|
throw new RuntimeException("更新库存总账失败");
|
|
|
}
|
|
|
return stockGoods;
|
|
|
@@ -487,8 +541,9 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
|
|
|
/**
|
|
|
* 撤销收货
|
|
|
- * @param tradeType 单据类型 进口、出口、国内
|
|
|
- * @param stockId 库存账id
|
|
|
+ *
|
|
|
+ * @param tradeType 单据类型 进口、出口、国内
|
|
|
+ * @param stockId 库存账id
|
|
|
* @param deliveryItems 货物明细信息
|
|
|
*/
|
|
|
public StockGoods cancelStock(String tradeType, Long stockId, DeliveryItems deliveryItems) {
|
|
|
@@ -539,11 +594,11 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 收货单新增库存账
|
|
|
- * @param tradeType 单据类型 进口、出口、国内
|
|
|
- * @param stockId 库存账id
|
|
|
+ *
|
|
|
+ * @param tradeType 单据类型 进口、出口、国内
|
|
|
+ * @param stockId 库存账id
|
|
|
* @param deliveryItems 货物明细信息
|
|
|
*/
|
|
|
public StockGoods receiving(String tradeType, Long stockId, DeliveryItems deliveryItems) {
|
|
|
@@ -568,7 +623,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
stockGoods.setBalanceVolumn(stockGoods.getBalanceVolumn() != null ? stockGoods.getBalanceVolumn().add(deliveryItems.getBillWeight()) : new BigDecimal("0").add(deliveryItems.getBillWeight()));//结余码单重量 加
|
|
|
}
|
|
|
} else {
|
|
|
- if (!"681169".equals(AuthUtil.getTenantId())){
|
|
|
+ if (!"681169".equals(AuthUtil.getTenantId())) {
|
|
|
if (stockGoods.getLockingQuantity().compareTo(deliveryItems.getActualQuantity()) < 0) {
|
|
|
throw new RuntimeException(stockGoods.getCode() + "更新库存总账失败,锁定库存不足");
|
|
|
}
|
|
|
@@ -579,6 +634,14 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
stockGoods.setCntrNo(deliveryItems.getCntrNo());
|
|
|
stockGoods.setUpdateTime(new Date());
|
|
|
stockGoods.setUpdateUser(SecureUtil.getUserId());
|
|
|
+ if (!new BigDecimal("0.00").equals(stockGoods.getBalanceAmount()) &&
|
|
|
+ !new BigDecimal("0.00").equals(stockGoods.getBalanceQuantity())){
|
|
|
+ //库存金额
|
|
|
+ stockGoods.setBalanceAmount(stockGoods.getBalanceAmount().subtract(deliveryItems.getDeliveryAmount()));
|
|
|
+ stockGoods.setStockPrice(stockGoods.getBalanceAmount().divide(stockGoods.getBalanceQuantity(), MathContext.DECIMAL32));
|
|
|
+ }else{
|
|
|
+ stockGoods.setStockPrice(new BigDecimal("0.00"));
|
|
|
+ }
|
|
|
boolean updateStock = stockGoodsClient.updateStock(stockGoods);
|
|
|
if (!updateStock) {
|
|
|
throw new RuntimeException(stockGoods.getCode() + "更新库存总账失败");
|
|
|
@@ -588,12 +651,13 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
|
|
|
/**
|
|
|
* 新增库存账
|
|
|
- * @param tradeType 单据类型 进口、出口、国内
|
|
|
- * @param corpId 销售公司/客户/工厂
|
|
|
- * @param storageId 仓库id
|
|
|
+ *
|
|
|
+ * @param tradeType 单据类型 进口、出口、国内
|
|
|
+ * @param corpId 销售公司/客户/工厂
|
|
|
+ * @param storageId 仓库id
|
|
|
* @param deliveryItems 明细信息
|
|
|
*/
|
|
|
- public StockGoods saveStock(String tradeType,Long corpId,Long storageId,DeliveryItems deliveryItems,String orderType){
|
|
|
+ public StockGoods saveStock(String tradeType, Long corpId, Long storageId, DeliveryItems deliveryItems, String orderType) {
|
|
|
StockGoods stockGoods = new StockGoods();
|
|
|
stockGoods.setGoodsId(deliveryItems.getItemId());//商品id
|
|
|
|
|
|
@@ -608,7 +672,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
stockGoods.setInAmount(deliveryItems.getDeliveryAmount());//入库金额
|
|
|
stockGoods.setSurplusRouteQuantity(deliveryItems.getActualQuantity());//可用数量
|
|
|
//进口贸易 还需要追加码单重量 和 发票重量
|
|
|
- if (tradeType.equals(OrderTypeEnum.IMPORT.getType())){
|
|
|
+ if (tradeType.equals(OrderTypeEnum.IMPORT.getType())) {
|
|
|
stockGoods.setBillNo(deliveryItems.getBillNo());//提单号
|
|
|
stockGoods.setContractNumber(deliveryItems.getContractNumber());//合同号
|
|
|
stockGoods.setStorageId(storageId);//仓库id
|
|
|
@@ -625,30 +689,27 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
stockGoods.setBalanceVolumn(deliveryItems.getBillWeight());//结余码单重量
|
|
|
|
|
|
stockGoods.setTradeType("JK");
|
|
|
- if (ObjectUtil.isNotEmpty(orderType)){
|
|
|
+ if (ObjectUtil.isNotEmpty(orderType)) {
|
|
|
stockGoods.setOrderType(orderType);
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
stockGoods.setOrderType(deliveryItems.getOrderType());
|
|
|
}
|
|
|
}
|
|
|
//国内
|
|
|
- else if(tradeType.equals(OrderTypeEnum.DOMESTIC.getType()))
|
|
|
- {
|
|
|
+ else if (tradeType.equals(OrderTypeEnum.DOMESTIC.getType())) {
|
|
|
stockGoods.setCorpId(corpId);
|
|
|
stockGoods.setStorageId(storageId);
|
|
|
stockGoods.setItemType(deliveryItems.getSpecificationAndModel());//规格明细
|
|
|
stockGoods.setTradeType("GN");
|
|
|
- //商品 规格 供应商 仓库
|
|
|
+ //商品 规格 供应商 仓库
|
|
|
}
|
|
|
//出口
|
|
|
- else if(tradeType.equals(OrderTypeEnum.EXPORT.getType()))
|
|
|
- {
|
|
|
+ else if (tradeType.equals(OrderTypeEnum.EXPORT.getType())) {
|
|
|
stockGoods.setTradeType("CK");
|
|
|
stockGoods.setItemType(deliveryItems.getSpecificationAndModel());//规格明细
|
|
|
}
|
|
|
//经销商
|
|
|
- else if(tradeType.equals(OrderTypeEnum.DEALER.getType()))
|
|
|
- {
|
|
|
+ else if (tradeType.equals(OrderTypeEnum.DEALER.getType())) {
|
|
|
stockGoods.setTradeType("JXS");
|
|
|
stockGoods.setStorageId(storageId);
|
|
|
}
|
|
|
@@ -656,9 +717,17 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
stockGoods.setCreateUser(SecureUtil.getUserId());
|
|
|
stockGoods.setTenantId(SecureUtil.getTenantId());
|
|
|
stockGoods.setCreateTime(new Date());
|
|
|
+ //库存金额
|
|
|
+ stockGoods.setBalanceAmount(deliveryItems.getDeliveryAmount());
|
|
|
+ if (!new BigDecimal("0.00").equals(stockGoods.getBalanceAmount()) &&
|
|
|
+ !new BigDecimal("0.00").equals(stockGoods.getBalanceQuantity())){
|
|
|
+ stockGoods.setStockPrice(stockGoods.getBalanceAmount().divide(stockGoods.getBalanceQuantity(), MathContext.DECIMAL32));
|
|
|
+ }else{
|
|
|
+ stockGoods.setStockPrice(new BigDecimal("0.00"));
|
|
|
+ }
|
|
|
+
|
|
|
R saveStock = stockGoodsClient.saveStock(stockGoods);
|
|
|
- if(!saveStock.isSuccess())
|
|
|
- {
|
|
|
+ if (!saveStock.isSuccess()) {
|
|
|
throw new SecurityException("插入库存失败");
|
|
|
}
|
|
|
return stockGoods;
|
|
|
@@ -725,6 +794,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
}
|
|
|
|
|
|
}
|
|
|
+
|
|
|
@Override
|
|
|
public void updateByPid(Long id) {
|
|
|
baseMapper.updateByPid(id);
|
|
|
@@ -732,31 +802,32 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
|
|
|
@Override
|
|
|
public List<ShipmentsVo> dailyShipmentStatistics(DeliveryVO delivery) {
|
|
|
- return baseMapper.dailyShipmentStatistics(delivery.getTradeType(),delivery.getBillType(),delivery.getTenantId());
|
|
|
+ return baseMapper.dailyShipmentStatistics(delivery.getTradeType(), delivery.getBillType(), delivery.getTenantId());
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 修改客户积分信息
|
|
|
- * @param delivery 发货主表信息
|
|
|
- * @param list 赠送积分明细
|
|
|
+ *
|
|
|
+ * @param delivery 发货主表信息
|
|
|
+ * @param list 赠送积分明细
|
|
|
* @param itemsList 消费积分明细
|
|
|
* @return
|
|
|
*/
|
|
|
- public R updatePoints(Delivery delivery,List<DeliveryItems> list,List<DeliveryItems> itemsList){
|
|
|
+ public R updatePoints(Delivery delivery, List<DeliveryItems> list, List<DeliveryItems> itemsList) {
|
|
|
String type = null;
|
|
|
- if (delivery.getOverpayment().equals(OverpaymentEnum.REDUCE.getType())){//收货赠送积分
|
|
|
+ if (delivery.getOverpayment().equals(OverpaymentEnum.REDUCE.getType())) {//收货赠送积分
|
|
|
type = OverpaymentEnum.ADD.getType();
|
|
|
- }else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALREDUCE.getType())){//撤销收货撤销赠送积分
|
|
|
+ } else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALREDUCE.getType())) {//撤销收货撤销赠送积分
|
|
|
type = OverpaymentEnum.REPEALADD.getType();
|
|
|
- }else if (delivery.getOverpayment().equals(OverpaymentEnum.ADD.getType())){//确认发货消费积分
|
|
|
+ } else if (delivery.getOverpayment().equals(OverpaymentEnum.ADD.getType())) {//确认发货消费积分
|
|
|
type = OverpaymentEnum.REDUCE.getType();
|
|
|
- }else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALADD.getType())){//撤销发货撤销消费积分
|
|
|
+ } else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALADD.getType())) {//撤销发货撤销消费积分
|
|
|
type = OverpaymentEnum.REPEALREDUCE.getType();
|
|
|
}
|
|
|
//赠送积分明细
|
|
|
List<BusinessPointsItem> businessPointsItemList = new ArrayList<>();
|
|
|
- if (CollectionUtils.isNotEmpty(list) && (delivery.getOverpayment().equals(OverpaymentEnum.REDUCE.getType()) || delivery.getOverpayment().equals(OverpaymentEnum.REPEALREDUCE.getType()))){
|
|
|
- list.stream().forEach(item ->{
|
|
|
+ if (CollectionUtils.isNotEmpty(list) && (delivery.getOverpayment().equals(OverpaymentEnum.REDUCE.getType()) || delivery.getOverpayment().equals(OverpaymentEnum.REPEALREDUCE.getType()))) {
|
|
|
+ list.stream().forEach(item -> {
|
|
|
BusinessPointsItem businessPointsItem = new BusinessPointsItem();
|
|
|
businessPointsItem.setBillNo(delivery.getSysNo());
|
|
|
businessPointsItem.setOrderNo(item.getContractNumber());
|
|
|
@@ -768,8 +839,8 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
}
|
|
|
//消费积分明细
|
|
|
List<BusinessPointsItem> pointsItemList = new ArrayList<>();
|
|
|
- if (CollectionUtils.isNotEmpty(itemsList) && (delivery.getOverpayment().equals(OverpaymentEnum.ADD.getType()) || delivery.getOverpayment().equals(OverpaymentEnum.REPEALADD.getType()))){
|
|
|
- itemsList.stream().forEach(item ->{
|
|
|
+ if (CollectionUtils.isNotEmpty(itemsList) && (delivery.getOverpayment().equals(OverpaymentEnum.ADD.getType()) || delivery.getOverpayment().equals(OverpaymentEnum.REPEALADD.getType()))) {
|
|
|
+ itemsList.stream().forEach(item -> {
|
|
|
BusinessPointsItem businessPointsItem = new BusinessPointsItem();
|
|
|
businessPointsItem.setBillNo(delivery.getSysNo());
|
|
|
businessPointsItem.setOrderNo(item.getContractNumber());
|
|
|
@@ -779,7 +850,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
pointsItemList.add(businessPointsItem);
|
|
|
});
|
|
|
}
|
|
|
- if (CollectionUtils.isNotEmpty(businessPointsItemList) || CollectionUtils.isNotEmpty(pointsItemList)){
|
|
|
+ if (CollectionUtils.isNotEmpty(businessPointsItemList) || CollectionUtils.isNotEmpty(pointsItemList)) {
|
|
|
Points points = new Points();
|
|
|
points.setCorpId(delivery.getCorpId());
|
|
|
points.setConvertIntegral(delivery.getConvertIntegral());
|
|
|
@@ -791,25 +862,28 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
}
|
|
|
return R.success("操作成功");
|
|
|
}
|
|
|
- public R updateOverpayment(Delivery delivery,List<DeliveryItems> list){
|
|
|
+
|
|
|
+ public R updateOverpayment(Delivery delivery, List<DeliveryItems> list) {
|
|
|
String type = null;
|
|
|
- if (delivery.getOverpayment().equals(OverpaymentEnum.REDUCE.getType())){//收货加溢付款
|
|
|
+ if (delivery.getOverpayment().equals(OverpaymentEnum.REDUCE.getType())) {//收货加溢付款
|
|
|
type = OverpaymentEnum.ADD.getType();
|
|
|
- }else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALREDUCE.getType())){//撤销收货撤销增加溢付款
|
|
|
+ } else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALREDUCE.getType())) {//撤销收货撤销增加溢付款
|
|
|
type = OverpaymentEnum.REPEALADD.getType();
|
|
|
- }else if (delivery.getOverpayment().equals(OverpaymentEnum.ADD.getType())){//
|
|
|
+ } else if (delivery.getOverpayment().equals(OverpaymentEnum.ADD.getType())) {//
|
|
|
type = OverpaymentEnum.REDUCE.getType();
|
|
|
- }else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALADD.getType())){
|
|
|
+ } else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALADD.getType())) {
|
|
|
type = OverpaymentEnum.REPEALREDUCE.getType();
|
|
|
}
|
|
|
BigDecimal amount = new BigDecimal(BigInteger.ZERO);
|
|
|
//对发货明细数据进行筛选 发货数量减去到货数量大于0 的
|
|
|
List<DeliveryItems> collect = list.stream().filter(e -> (e.getActualQuantity().subtract(e.getArrivalQuantity())).compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList());
|
|
|
- if (CollectionUtils.isNotEmpty(collect)){
|
|
|
+ if (CollectionUtils.isNotEmpty(collect)) {
|
|
|
//获取溢付款金额 溢付款金额等于发货数量-到货数量的值 乘以单价 等于溢付款
|
|
|
- amount = collect.stream().filter(e -> e.getPrice() != null).reduce(BigDecimal.ZERO,(x,y) ->{ return x.add((y.getActualQuantity().subtract(y.getArrivalQuantity())).multiply(y.getPrice())); },BigDecimal::add);
|
|
|
+ amount = collect.stream().filter(e -> e.getPrice() != null).reduce(BigDecimal.ZERO, (x, y) -> {
|
|
|
+ return x.add((y.getActualQuantity().subtract(y.getArrivalQuantity())).multiply(y.getPrice()));
|
|
|
+ }, BigDecimal::add);
|
|
|
List<BusinessOverpaymentItem> businessOverpaymentItemList = new ArrayList<>();
|
|
|
- collect.stream().forEach(item ->{
|
|
|
+ collect.stream().forEach(item -> {
|
|
|
BusinessOverpaymentItem overpaymentItem = new BusinessOverpaymentItem();
|
|
|
overpaymentItem.setBillNo(delivery.getSrcOrderNo());
|
|
|
overpaymentItem.setSrcOrderNo(delivery.getSysNo());
|
|
|
@@ -832,86 +906,87 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
|
|
|
/**
|
|
|
* 经销商调拨
|
|
|
- * @param storageId 原仓库
|
|
|
+ *
|
|
|
+ * @param storageId 原仓库
|
|
|
* @param allotStorageId 调拨仓库
|
|
|
- * @param list 调拨明细
|
|
|
- * @param tradeType 贸易类型
|
|
|
- * @param operate 操作 1 确认调拨 2 撤销调拨
|
|
|
+ * @param list 调拨明细
|
|
|
+ * @param tradeType 贸易类型
|
|
|
+ * @param operate 操作 1 确认调拨 2 撤销调拨
|
|
|
* @return
|
|
|
*/
|
|
|
- public R affirmAllot(Long storageId,Long allotStorageId,List<DeliveryItems> list,int operate,String tradeType){
|
|
|
+ public R affirmAllot(Long storageId, Long allotStorageId, List<DeliveryItems> list, int operate, String tradeType) {
|
|
|
//查询库存 判断原仓库是否有足够的库存调拨
|
|
|
- if (operate == 1){
|
|
|
+ if (operate == 1) {
|
|
|
for (DeliveryItems deliveryItems : list) {
|
|
|
StockGoodsVO stock = this.getStock(tradeType, null, storageId, deliveryItems);
|
|
|
- if (stock == null){
|
|
|
+ if (stock == null) {
|
|
|
throw new SecurityException("商品未找库存");
|
|
|
}
|
|
|
- if (stock.getSurplusRouteQuantity().compareTo(deliveryItems.getActualQuantity()) <0){
|
|
|
+ if (stock.getSurplusRouteQuantity().compareTo(deliveryItems.getActualQuantity()) < 0) {
|
|
|
throw new SecurityException("商品库存不足");
|
|
|
}
|
|
|
//原仓库减去库存
|
|
|
- stock.setOutQuantity(stock.getOutQuantity().add( deliveryItems.getActualQuantity()));//出库数量 加
|
|
|
+ stock.setOutQuantity(stock.getOutQuantity().add(deliveryItems.getActualQuantity()));//出库数量 加
|
|
|
stock.setSurplusRouteQuantity(stock.getSurplusRouteQuantity().subtract(deliveryItems.getActualQuantity()));//可用数量 减
|
|
|
stock.setBalanceQuantity(stock.getInQuantity().subtract(stock.getOutQuantity()));//结余数量 减
|
|
|
//出库金额加
|
|
|
stock.setOutAmount(stock.getOutAmount().add((stock.getInAmount().divide(stock.getInQuantity(), 5, RoundingMode.HALF_UP)).setScale(2, RoundingMode.HALF_UP).multiply(deliveryItems.getActualQuantity())));
|
|
|
boolean updateStock = stockGoodsClient.updateStock(stock);
|
|
|
- if (!updateStock){
|
|
|
+ if (!updateStock) {
|
|
|
throw new RuntimeException("更新库存总账失败");
|
|
|
}
|
|
|
//新仓库添加库存
|
|
|
//入库金额等于原仓库的入库金额除以入库数量
|
|
|
deliveryItems.setDeliveryAmount((stock.getInAmount().divide(stock.getInQuantity(), 5, RoundingMode.HALF_UP)).setScale(2, RoundingMode.HALF_UP).multiply(deliveryItems.getActualQuantity()));
|
|
|
StockGoodsVO serviceStock = this.getStock(tradeType, null, allotStorageId, deliveryItems);
|
|
|
- if (serviceStock == null){
|
|
|
- this.saveStock(tradeType,null,allotStorageId,deliveryItems,null);
|
|
|
- }else {
|
|
|
- serviceStock.setInQuantity(serviceStock.getInQuantity().add( deliveryItems.getActualQuantity()));//入库数量 加
|
|
|
+ if (serviceStock == null) {
|
|
|
+ this.saveStock(tradeType, null, allotStorageId, deliveryItems, null);
|
|
|
+ } else {
|
|
|
+ serviceStock.setInQuantity(serviceStock.getInQuantity().add(deliveryItems.getActualQuantity()));//入库数量 加
|
|
|
serviceStock.setSurplusRouteQuantity(serviceStock.getSurplusRouteQuantity().add(deliveryItems.getActualQuantity()));//可用数量 加
|
|
|
serviceStock.setBalanceQuantity(serviceStock.getInQuantity().add(serviceStock.getOutQuantity()));//结余数量 加
|
|
|
//入库金额加
|
|
|
serviceStock.setInAmount(serviceStock.getInAmount().add((stock.getInAmount().divide(stock.getInQuantity(), 5, RoundingMode.HALF_UP)).setScale(2, RoundingMode.HALF_UP).multiply(deliveryItems.getActualQuantity())));
|
|
|
boolean stockMessage = stockGoodsClient.updateStock(serviceStock);
|
|
|
- if (!stockMessage){
|
|
|
+ if (!stockMessage) {
|
|
|
throw new RuntimeException("更新库存总账失败");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }else if (operate == 2){
|
|
|
+ } else if (operate == 2) {
|
|
|
for (DeliveryItems deliveryItems : list) {
|
|
|
StockGoodsVO stock = this.getStock(tradeType, null, allotStorageId, deliveryItems);
|
|
|
- if (stock == null){
|
|
|
+ if (stock == null) {
|
|
|
throw new SecurityException("商品未找库存");
|
|
|
}
|
|
|
- if (stock.getSurplusRouteQuantity().compareTo(deliveryItems.getActualQuantity()) <0){
|
|
|
+ if (stock.getSurplusRouteQuantity().compareTo(deliveryItems.getActualQuantity()) < 0) {
|
|
|
throw new SecurityException("商品库存不足");
|
|
|
}
|
|
|
//原仓库添加库存
|
|
|
StockGoodsVO serviceStock = this.getStock(tradeType, null, storageId, deliveryItems);
|
|
|
- if (serviceStock == null){
|
|
|
+ if (serviceStock == null) {
|
|
|
throw new SecurityException("未找到原仓库库存信息");
|
|
|
- }else {
|
|
|
- serviceStock.setOutQuantity(serviceStock.getOutQuantity().subtract( deliveryItems.getActualQuantity()));//出库数量 减
|
|
|
+ } else {
|
|
|
+ serviceStock.setOutQuantity(serviceStock.getOutQuantity().subtract(deliveryItems.getActualQuantity()));//出库数量 减
|
|
|
serviceStock.setSurplusRouteQuantity(serviceStock.getSurplusRouteQuantity().add(deliveryItems.getActualQuantity()));//可用数量 加
|
|
|
serviceStock.setBalanceQuantity(serviceStock.getInQuantity().add(serviceStock.getOutQuantity()));//结余数量 加
|
|
|
//出库金额减
|
|
|
serviceStock.setOutAmount(serviceStock.getOutAmount().subtract((serviceStock.getInAmount().divide(serviceStock.getInQuantity(), 5, RoundingMode.HALF_UP)).setScale(2, RoundingMode.HALF_UP).multiply(deliveryItems.getActualQuantity())));
|
|
|
|
|
|
boolean stockMessage = stockGoodsClient.updateStock(serviceStock);
|
|
|
- if (!stockMessage){
|
|
|
+ if (!stockMessage) {
|
|
|
throw new RuntimeException("更新库存总账失败");
|
|
|
}
|
|
|
}
|
|
|
//新仓库减去库存
|
|
|
- stock.setInQuantity(stock.getInQuantity().subtract( deliveryItems.getActualQuantity()));//入库数量 减
|
|
|
+ stock.setInQuantity(stock.getInQuantity().subtract(deliveryItems.getActualQuantity()));//入库数量 减
|
|
|
stock.setSurplusRouteQuantity(stock.getSurplusRouteQuantity().subtract(deliveryItems.getActualQuantity()));//可用数量 减
|
|
|
stock.setBalanceQuantity(stock.getInQuantity().subtract(stock.getOutQuantity()));//结余数量 减
|
|
|
//入库金额减
|
|
|
stock.setInAmount(stock.getInAmount().subtract((serviceStock.getInAmount().divide(serviceStock.getInQuantity(), 5, RoundingMode.HALF_UP)).setScale(2, RoundingMode.HALF_UP).multiply(deliveryItems.getActualQuantity())));
|
|
|
|
|
|
boolean updateStock = stockGoodsClient.updateStock(stock);
|
|
|
- if (!updateStock){
|
|
|
+ if (!updateStock) {
|
|
|
throw new RuntimeException("更新库存总账失败");
|
|
|
}
|
|
|
}
|
|
|
@@ -923,11 +998,11 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
public DailyNumberVO dailyNumber(DeliveryVO delivery) {
|
|
|
DailyNumberVO dailyNumberVo = new DailyNumberVO();
|
|
|
//获取今日发货数量
|
|
|
- dailyNumberVo.setShipmentsNumber(baseMapper.dailyNumber(delivery.getTradeType(),delivery.getBillType(),delivery.getTenantId(),null,0,DeliveryStatusEnum.REVOCATION.getType()));
|
|
|
+ dailyNumberVo.setShipmentsNumber(baseMapper.dailyNumber(delivery.getTradeType(), delivery.getBillType(), delivery.getTenantId(), null, 0, DeliveryStatusEnum.REVOCATION.getType()));
|
|
|
//获取总发货量(月)
|
|
|
- dailyNumberVo.setTotalShipments(baseMapper.dailyNumber(delivery.getTradeType(),delivery.getBillType(),delivery.getTenantId(),null,1,DeliveryStatusEnum.REVOCATION.getType()));
|
|
|
+ dailyNumberVo.setTotalShipments(baseMapper.dailyNumber(delivery.getTradeType(), delivery.getBillType(), delivery.getTenantId(), null, 1, DeliveryStatusEnum.REVOCATION.getType()));
|
|
|
//获取待发货数量
|
|
|
- dailyNumberVo.setWaitDeliver(baseMapper.dailyNumber(delivery.getTradeType(),delivery.getBillType(),delivery.getTenantId(),null,null,DeliveryStatusEnum.REPEAL.getType()));
|
|
|
+ dailyNumberVo.setWaitDeliver(baseMapper.dailyNumber(delivery.getTradeType(), delivery.getBillType(), delivery.getTenantId(), null, null, DeliveryStatusEnum.REPEAL.getType()));
|
|
|
return dailyNumberVo;
|
|
|
}
|
|
|
|
|
|
@@ -936,16 +1011,16 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
List<CorpNumberVO> list = new ArrayList<>();
|
|
|
//获取所属公司
|
|
|
List<CorpsDesc> corpsType = corpsDescClient.getCorpsType("GS");
|
|
|
- if (CollectionUtils.isNotEmpty(corpsType)){
|
|
|
- corpsType.stream().forEach(e ->{
|
|
|
+ if (CollectionUtils.isNotEmpty(corpsType)) {
|
|
|
+ corpsType.stream().forEach(e -> {
|
|
|
CorpNumberVO corpNumberVO = new CorpNumberVO();
|
|
|
corpNumberVO.setBelongToCorpName(e.getGoodtypes());
|
|
|
//获取今日发货数量
|
|
|
- corpNumberVO.setShipmentsNumber(baseMapper.dailyNumber(delivery.getTradeType(),delivery.getBillType(),delivery.getTenantId(),e.getId(),0,DeliveryStatusEnum.REVOCATION.getType()));
|
|
|
+ corpNumberVO.setShipmentsNumber(baseMapper.dailyNumber(delivery.getTradeType(), delivery.getBillType(), delivery.getTenantId(), e.getId(), 0, DeliveryStatusEnum.REVOCATION.getType()));
|
|
|
//获取发货量(月)
|
|
|
- corpNumberVO.setDelivered(baseMapper.dailyNumber(delivery.getTradeType(),delivery.getBillType(),delivery.getTenantId(),e.getId(),1,DeliveryStatusEnum.REVOCATION.getType()));
|
|
|
+ corpNumberVO.setDelivered(baseMapper.dailyNumber(delivery.getTradeType(), delivery.getBillType(), delivery.getTenantId(), e.getId(), 1, DeliveryStatusEnum.REVOCATION.getType()));
|
|
|
//获取待发货数量
|
|
|
- corpNumberVO.setWaitDeliver(baseMapper.dailyNumber(delivery.getTradeType(),delivery.getBillType(),delivery.getTenantId(),e.getId(),null,DeliveryStatusEnum.REPEAL.getType()));
|
|
|
+ corpNumberVO.setWaitDeliver(baseMapper.dailyNumber(delivery.getTradeType(), delivery.getBillType(), delivery.getTenantId(), e.getId(), null, DeliveryStatusEnum.REPEAL.getType()));
|
|
|
list.add(corpNumberVO);
|
|
|
});
|
|
|
}
|
|
|
@@ -955,7 +1030,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
|
|
|
@Override
|
|
|
public boolean submitPay(Long id) {
|
|
|
Integer integer = baseMapper.submitPay(id);
|
|
|
- if (integer != null && integer >0){
|
|
|
+ if (integer != null && integer > 0) {
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|