فهرست منبع

修改财务和库存

1021934019@qq.com 4 سال پیش
والد
کامیت
b8042ef768

+ 4 - 0
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/DeliveryItems.java

@@ -280,6 +280,10 @@ public class DeliveryItems implements Serializable {
 
     	@ApiModelProperty(value = "库存重量")
 		private BigDecimal inWeight;
+		@ApiModelProperty(value = "币别")
+    	private String currency;
+		@ApiModelProperty(value = "汇率")
+    	private String exRate;
 
 
 }

+ 5 - 0
blade-service-api/blade-stock-api/src/main/java/org/springblade/stock/feign/IStockGoodsClient.java

@@ -25,6 +25,7 @@ public interface IStockGoodsClient {
 	String GET_STOCK_BY_ID = API_PREFIX + "/getStockByID";
 	String GET_ONE = API_PREFIX + "/getOne";
 	String GET_STOCK_BY_CONDITIONS = API_PREFIX + "/getStockByCondition";
+	String LIST_STOCK_BY_CONDITIONS = API_PREFIX + "/listStockByCondition";
 
 	/**
 	 * 查询库存总账 是否存在
@@ -89,4 +90,8 @@ public interface IStockGoodsClient {
 	 */
 	@PostMapping(GET_ONE)
 	StockGoods getOneStock(@RequestBody StockGoods stockGoods);
+
+	@GetMapping(LIST_STOCK_BY_CONDITIONS)
+    List<StockGoods> listStockByCondition(@RequestBody StockGoods stockGoods);
+
 }

+ 3 - 0
blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/dto/SettlementDTO.java

@@ -44,4 +44,7 @@ public class SettlementDTO extends Settlement {
 
 	@ApiModelProperty(value = "收付款明细列表")
 	private List<Items> itemsList;
+
+	@ApiModelProperty(value = "原结算单状态")
+	private String originBillType;
 }

+ 25 - 0
blade-service/blade-stock/src/main/java/org/springblade/stock/feign/StockGoodsClient.java

@@ -3,6 +3,7 @@ package org.springblade.stock.feign;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ss.formula.functions.T;
@@ -22,6 +23,7 @@ import springfox.documentation.annotations.ApiIgnore;
 
 import javax.validation.Valid;
 import java.math.BigDecimal;
+import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
@@ -125,4 +127,27 @@ public class StockGoodsClient implements IStockGoodsClient{
 
 		return stockGoodsService.getOne(queryWrapper);
 	}
+
+	@Override
+	@GetMapping(LIST_STOCK_BY_CONDITIONS)
+	public List<StockGoods> listStockByCondition(StockGoods stockGoods)
+	{
+		LambdaQueryWrapper<StockGoods> stockGoodsLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		stockGoodsLambdaQueryWrapper
+			.eq(stockGoods.getStorageId()!=null,StockGoods::getStorageId,stockGoods.getStorageId())
+			.eq(StringUtils.isNotBlank(stockGoods.getContractNumber()),StockGoods::getContractNumber,stockGoods.getContractNumber())
+			.eq(StringUtils.isNotBlank(stockGoods.getBillNo()),StockGoods::getBillNo,stockGoods.getBillNo())
+			.eq(StockGoods::getIsDeleted,0)
+			.eq(StockGoods::getTenantId,AuthUtil.getTenantId());
+		List<StockGoods> goodsList = stockGoodsService.list(stockGoodsLambdaQueryWrapper);
+		if(CollectionUtils.isNotEmpty(goodsList))
+		{
+			return goodsList;
+		}
+		else
+		{
+			return Collections.EMPTY_LIST;
+		}
+
+	}
 }

+ 14 - 2
blade-service/trade-finance/src/main/java/org/springblade/finance/controller/SettlementController.java

@@ -163,8 +163,20 @@ public class SettlementController extends BladeController {
 	@ApiOperation(value = "修改新增收付款信息", notes = "传入修改新增收付款信息对象")
 	public R modify(@RequestBody SettlementDTO dto)
 	{
-		settlementService.modify(dto);
-		return R.data(dto);
+		Settlement modify = settlementService.modify(dto);
+		return R.data(modify);
+	}
+
+	@PostMapping("cancelModify")
+	@ApiOperation(value = "撤销结算", notes = "撤销结算")
+	public R cancelModify(@RequestBody SettlementDTO dto)
+	{
+		if(StringUtils.isNotBlank(dto.getOriginBillType())|| !dto.getOriginBillType().equals("收费") || !dto.getOriginBillType().equals("付费"))
+		{
+			throw new SecurityException("撤销失败,originBillType状态不正确");
+		}
+		Settlement modify = settlementService.cancelModify(dto);
+		return R.data(modify);
 	}
 
 	@PostMapping("saveOrEdit")

+ 3 - 1
blade-service/trade-finance/src/main/java/org/springblade/finance/service/ISettlementService.java

@@ -44,7 +44,9 @@ public interface ISettlementService extends IService<Settlement> {
 	IPage<SettlementVO> selectSettlementPage(IPage<SettlementVO> page, SettlementVO settlement);
 
 	/**修改新增收付款信息 */
-	void modify(SettlementDTO settlementDTO);
+	Settlement modify(SettlementDTO settlementDTO);
+    //取消结算
+	Settlement cancelModify(SettlementDTO settlementDTO);
 
 	Settlement apply(List<Items> itemsList, String billType);
 

+ 99 - 3
blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java

@@ -85,12 +85,52 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 	@Override
 	@Transactional
 	@GlobalTransactional
-	public void modify(SettlementDTO settlementDTO)
+	public Settlement cancelModify(SettlementDTO settlementDTO)
+	{
+		Settlement model=new Settlement();
+		BeanUtils.copyProperties(settlementDTO,model);
+		List<Items> itemsList = settlementDTO.getItemsList();
+		if(settlementDTO.getId()==null)
+		{
+			throw new SecurityException("取消结算失败,无主表信息");
+		}
+		//撤销后, 回归主表原来的状态
+		model.setFinanceStatus(settlementDTO.getOriginBillType());
+		model.setUpdateTime(new Date());
+		model.setUpdateUser(AuthUtil.getUserId());
+		model.setUpdateUserName(AuthUtil.getUser().getRoleName());
+		baseMapper.updateById(model);
+		//撤销后, 回归子表回归原来状态
+		if(CollectionUtils.isNotEmpty(itemsList))
+		{
+			itemsList.forEach(e->{
+
+				e.setUpdateTime(new Date());
+				e.setUpdateUser(AuthUtil.getUserId());
+				e.setUpdateUserName(AuthUtil.getUser().getRoleName());
+				itemsMapper.updateById(e);
+				cancelPayAcc(settlementDTO,e);
+			});
+		}
+		model.setItemsList(itemsList);
+		return model;
+	}
+
+
+
+
+
+
+	@Override
+	@Transactional
+	@GlobalTransactional
+	public Settlement modify(SettlementDTO settlementDTO)
 	{
 		Settlement model=new Settlement();
 		BeanUtils.copyProperties(settlementDTO,model);
 		List<Files> filesList = settlementDTO.getFilesList();
  		List<Items> itemsList = settlementDTO.getItemsList();
+		model.setItemsList(itemsList);
 		//如果id=null, 无论主表还是从表, 必然都是新增
  		Long id = settlementDTO.getId();
 		if(id==null)
@@ -150,11 +190,11 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 						payAcc(settlementDTO,e);
 					}
 
-
 				});
 			}
 
 		}
+		return model;
 		//验证结算总金额是否超限
 		/*if(settlementDTO.getBillType().equals("收费")||settlementDTO.getBillType().equals("付费"))
 		{
@@ -180,10 +220,62 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 
 
 	}
+	//撤销
+	public void  cancelPayAcc(SettlementDTO settlementDTO,Items items)
+	{
+		Long accId = items.getAccId();
+		if(accId==null)
+		{
+			throw new SecurityException("撤销账单失败,没有绑定明细信息");
+		}
+		Acc acc = accMapper.selectById(accId);
+		if(acc==null)
+		{
+			throw new SecurityException("撤销账单失败,无对应明细信息");
+		}
+		//取消结算后,更新回退acc表金额,采购收费 销售付费
+		if(acc.getSettlementAmount()==null)
+		{
+			throw new SecurityException("撤销账单失败,结算金额为空");
+		}
+		acc.setSettlementAmount(acc.getSettlementAmount().subtract(items.getThisAmount()));
+        //判断是否退款,已收金额为负数
+		BigDecimal settlementAmount = acc.getSettlementAmount();
+		if(settlementAmount.compareTo(new BigDecimal("0")) ==-1)
+		{
+			throw new SecurityException("撤销账单失败,已结算金额为负数");
+		}
+		accMapper.updateById(acc);
+		//修改原业务表数据
+		Long srcParentId = acc.getSrcParentId();
+		if(srcParentId==null)
+		{
+			throw new SecurityException("撤销账单失败,未获取到原业务信息");
+		}
+		Order client = orderDescClient.getById(srcParentId);
+		if(client==null)
+		{
+			throw new SecurityException("撤销账单失败,未获取到原业务信息");
+		}
+		//回退原业务表数据
+		if(client.getSettlmentAmount() == null)
+		{
+			throw new SecurityException("撤销账单失败,原业务表已收金额为空");
+		}
+		client.setSettlmentAmount(client.getSettlmentAmount().subtract(items.getThisAmount()));
+		orderDescClient.updateOrder(client);
+	}
+
+
+
     //修改财务账单和订单表已收金额
 	public void  payAcc(SettlementDTO settlementDTO,Items items)
 	{
 		Long accId = items.getAccId();
+		if(accId==null)
+		{
+			throw new SecurityException("操作失败,没有绑定明细信息");
+		}
 		Acc acc = accMapper.selectById(accId);
 		if(acc==null)
 		{
@@ -200,6 +292,10 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 		accMapper.updateById(acc);
 		//修改原业务表数据
 		Long srcParentId = acc.getSrcParentId();
+		if(srcParentId==null)
+		{
+			throw new SecurityException("操作失败,未获取到原业务信息");
+		}
 		Order client = orderDescClient.getById(srcParentId);
         if(client==null)
         {
@@ -232,7 +328,7 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 		   //todo 系统编号暂时按时间戳, 后续按正式
 		   settlement.setSysNo(String.valueOf(System.currentTimeMillis()));
 		   settlement.setCreateTime(new Date());
-		   settlement.setAmount(total);
+		  /* settlement.setAmount(total);*/
 		   settlement.setTenantId(AuthUtil.getTenantId());
 		   settlement.setCreateUser(AuthUtil.getUserId());
 		   settlement.setStatus(0);