Przeglądaj źródła

2025年3月10日16:59:40

纪新园 9 miesięcy temu
rodzic
commit
ed86c4f8a8

+ 12 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjSettlementItems.java

@@ -190,5 +190,17 @@ public class PjSettlementItems implements Serializable {
 	@ApiModelProperty(value = "物流公司名称")
 	private String logisticsCorpName;
 
+	/**
+	 * 税率
+	 */
+	@ApiModelProperty(value = "税率")
+	private BigDecimal taxRate;
+
+	/**
+	 * 不含税金额
+	 */
+	@ApiModelProperty(value = "不含税金额")
+	private BigDecimal excludingTaxAmount;
+
 
 }

+ 7 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjShip.java

@@ -372,6 +372,13 @@ public class PjShip implements Serializable {
 	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
 	@DateTimeFormat(pattern = "yyyy-MM-dd")
 	private Date completedDate;
+	/**
+	 * 操作时间
+	 */
+	@ApiModelProperty(value = "操作时间")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	private Date operateDate;
 
 
 	/**

+ 10 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/controller/OrderController.java

@@ -1446,7 +1446,7 @@ public class OrderController extends BladeController {
 		LambdaQueryWrapper<PjOrder> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(PjOrder::getTenantId, AuthUtil.getTenantId())
 			.eq(PjOrder::getIsDeleted, 0)
-			.eq(PjOrder::getBsType, "XS")
+			.apply("FIND_IN_SET( bs_type, 'XS,GX' )")
 			.eq(PjOrder::getCustomerId, order.getCustomerId())
 			.eq(PjOrder::getBusinessSource, "额度支付")
 			.apply("FIND_IN_SET( actual_payment_status, '0,1,2,3,4' )")
@@ -1478,4 +1478,13 @@ public class OrderController extends BladeController {
 		return orderService.copy(id);
 	}
 
+	/**
+	 * 生成采购
+	 */
+	@GetMapping("/generateProcurement")
+	@RepeatSubmit
+	public R generateProcurement(@RequestParam Long id) {
+		return orderService.generateProcurement(id);
+	}
+
 }

+ 2 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/IOrderService.java

@@ -275,4 +275,6 @@ public interface IOrderService extends IService<PjOrder> {
 	PjOrder appShareDetail(PjOrder order);
 
 	R copy(Long id);
+
+	R generateProcurement(Long id);
 }

+ 75 - 2
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java

@@ -4717,7 +4717,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 	public R copy(Long id) {
 		PjOrder order = new PjOrder();
 		PjOrder detail = baseMapper.selectById(id);
-		BeanUtil.copyProperties(detail,order);
+		BeanUtil.copyProperties(detail, order);
 		order.setId(null);
 		order.setStatus("");
 		order.setXcxStatus("");
@@ -4738,7 +4738,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 			.eq(PjOrderItems::getIsDeleted, 0)
 			.eq(PjOrderItems::getPid, id);
 		List<PjOrderItems> list = orderItemsService.list(itemsLambdaQueryWrapper);
-		for (PjOrderItems item : list){
+		for (PjOrderItems item : list) {
 			item.setId(null);
 			item.setUpdateTime(null);
 			item.setUpdateUser(0L);
@@ -4750,6 +4750,79 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		return this.saveOrderMessage(order);
 	}
 
+	@Override
+	public R generateProcurement(Long id) {
+		PjOrderItems orderItems = orderItemsService.getById(id);
+		PjOrder order = new PjOrder();
+		order.setBsType("CG");
+		PjOrderItems items = new PjOrderItems();
+		// 获取系统编号
+		String billNo = serialService.getBillNo(order.getBsType(), order.getBsType(), order.getBsType());
+		if (ObjectUtils.isNull(billNo)) {
+			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+			return R.fail(500, "生成系统编号失败");
+		}
+		order.setOrdNo(billNo);
+		order.setSrcOrdNo(billNo);
+		order.setCreateTime(new Date());
+		order.setCreateUser(AuthUtil.getUserId());
+		order.setBusinesDate(new Date());
+		order.setBusinessSource("内部销售");
+		R<Dept> dept = sysClient.getDept(Long.valueOf(AuthUtil.getDeptId()));
+		if (ObjectUtil.isNotEmpty(dept)) {
+			order.setSalesCompanyId(dept.getData().getId());
+			order.setSalesCompanyName(dept.getData().getFullName());
+		} else {
+			throw new SecurityException("未维护所属公司");
+		}
+		baseMapper.insert(order);
+		BeanUtil.copyProperties(orderItems, items);
+		items.setId(null);
+		items.setPid(order.getId());
+		items.setCreateTime(new Date());
+		items.setCreateUser(AuthUtil.getUserId());
+		items.setBillNo(billNo);
+		items.setBsType(order.getBsType());
+		items.setBizType(order.getBsType());
+		items.setPrice(items.getCostpriePrice());
+		items.setSubTotalMoney(items.getCostprie());
+		items.setTotalAmount(items.getCostprie());
+		items.setUpdateUser(0L);
+		items.setUpdateTime(null);
+		items.setGrossProfit(new BigDecimal("0"));
+		items.setPoNo("");
+		items.setSharedCompanyId(null);
+		items.setSharedCompanyName("");
+		items.setProportion("");
+		items.setSrcFinancing("");
+		items.setCostprie(new BigDecimal("0"));
+		items.setCostpriePrice(new BigDecimal("0"));
+		items.setProfit(new BigDecimal("0"));
+		items.setThisUsedProfit(new BigDecimal("0"));
+		items.setGrossProfit(new BigDecimal("0"));
+		items.setInventoryHave(new BigDecimal("0"));
+		items.setInventoryFinancing(new BigDecimal("0"));
+		items.setProfitLossNum(new BigDecimal("0"));
+		items.setProfitLossAmount(new BigDecimal("0"));
+		items.setReturnsNumber(new BigDecimal("0"));
+		items.setReturnsAmount(new BigDecimal("0"));
+		items.setSendNum(new BigDecimal("0"));
+		items.setGoodsTotalShipAmount(new BigDecimal("0"));
+		items.setOutGoodsTotalShipNum(new BigDecimal("0"));
+		items.setOutGoodsTotalShipAmount(new BigDecimal("0"));
+		items.setPrimaryGoodsTotalNum(new BigDecimal("0"));
+		items.setPrimaryGoodsTotalAmount(new BigDecimal("0"));
+		items.setRedeemNum(new BigDecimal("0"));
+		items.setRebateProfit(new BigDecimal("0"));
+		items.setNextDayNum(new BigDecimal("0"));
+		items.setSendNumFinancing(new BigDecimal("0"));
+		items.setSendNumHave(new BigDecimal("0"));
+		items.setRefundType("");
+		items.setSrcItemId(orderItems.getId());
+		orderItemsService.save(items);
+		return R.success("操作成功");
+	}
+
 	/**
 	 * 保存订单信息
 	 */

+ 29 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/controller/ProductionOrderController.java

@@ -41,6 +41,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -177,5 +178,33 @@ public class ProductionOrderController extends BladeController {
 		return shipService.revokeCompleted(ship);
 	}
 
+	/**
+	 * 确认
+	 */
+	@GetMapping("/confirm")
+	public R confirm(@RequestParam("id") Long id) {
+		PjShip ship = new PjShip();
+		ship.setId(id);
+		ship.setStatusName("已确认");
+		ship.setUpdateTime(new Date());
+		ship.setUpdateUser(AuthUtil.getUserId());
+		shipService.updateById(ship);
+		return R.data(ship);
+	}
+
+	/**
+	 * 撤销确认
+	 */
+	@GetMapping("/revokeConfirm")
+	public R revokeConfirm(@RequestParam("id") Long id) {
+		PjShip ship = new PjShip();
+		ship.setId(id);
+		ship.setStatusName("待确认");
+		ship.setUpdateTime(new Date());
+		ship.setUpdateUser(AuthUtil.getUserId());
+		shipService.updateById(ship);
+		return R.data(ship);
+	}
+
 
 }

+ 1 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/produce/controller/ProductionPickingController.java

@@ -110,6 +110,7 @@ public class ProductionPickingController extends BladeController {
 		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("老板")) {
 			if (AuthUtil.getUserRole().contains("库管")) {
 				lambdaQueryWrapper.and(i -> i.eq(PjShip::getStockClerkId, AuthUtil.getUserId()).or().isNull(PjShip::getStockClerkId));
+				lambdaQueryWrapper.apply("find_in_set(status_name,'待确认,已确认')");
 			}
 		}
 		IPage<PjShip> pages = shipService.page(Condition.getPage(query), lambdaQueryWrapper);

+ 10 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/controller/ShipController.java

@@ -520,4 +520,14 @@ public class ShipController extends BladeController {
 		return R.success("操作成功");
 	}
 
+
+	/**
+	 * 生成生产订单
+	 */
+	@GetMapping("/generateProductionOrder")
+	@RepeatSubmit
+	public R generateProductionOrder(@RequestParam Long id) {
+		return shipService.generateProductionOrder(id);
+	}
+
 }

+ 2 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/IShipService.java

@@ -197,4 +197,6 @@ public interface IShipService extends IService<PjShip> {
 	R revokePicking(PjShip ship);
 
 	R generatePicking(PjShip ship);
+
+    R generateProductionOrder(Long id);
 }

+ 81 - 5
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java

@@ -58,8 +58,10 @@ import org.springblade.salesPart.history.mapper.HistoryMapper;
 import org.springblade.salesPart.order.mapper.OrderMapper;
 import org.springblade.salesPart.order.service.IOrderItemsService;
 import org.springblade.salesPart.order.service.IOrderRecordService;
+import org.springblade.salesPart.produce.entity.ProductWorkmanship;
 import org.springblade.salesPart.produce.entity.ProductWorkmanshipItems;
 import org.springblade.salesPart.produce.service.IProductWorkmanshipItemsService;
+import org.springblade.salesPart.produce.service.IProductWorkmanshipService;
 import org.springblade.salesPart.productLaunch.service.IProductLaunchService;
 import org.springblade.salesPart.serial.service.IPjpfSerialService;
 import org.springblade.salesPart.ship.mapper.ShipMapper;
@@ -134,6 +136,8 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 
 	private final IProductWorkmanshipItemsService productWorkmanshipItemsService;
 
+	private final IProductWorkmanshipService productWorkmanshipService;
+
 	/**
 	 * 获取收发货订单详情
 	 *
@@ -6543,7 +6547,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			ship.setShipItemsList(ship.getShipItemsList());
 			ship.setNumberRows(ship.getShipItemsList().size());
 		}
-		ship.setStatusName(OrderTypeEnum.PRODUCTION_COMPLETED.getType());
+		ship.setStatusName("待确认");
 		baseMapper.updateById(ship);
 		return R.data(ship);
 	}
@@ -6681,7 +6685,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public R confirmPicking(PjShip ship) {
-		ship.setStatusName(OrderTypeEnum.STOP_PICKING.getType());
+		ship.setStatusName("待确认");
 		if (ObjectUtils.isNull(ship.getStorageId())) {
 			throw new RuntimeException("请先选择仓库");
 		}
@@ -6838,7 +6842,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public R revokePicking(PjShip ship) {
-		ship.setStatusName(OrderTypeEnum.STAY_PICKING.getType());
+		ship.setStatusName("待领料");
 		ship.setUpdateUser(AuthUtil.getUserId());
 		ship.setUpdateTime(new Date());
 		PjShip shipVersion = baseMapper.selectById(ship.getId());
@@ -6896,10 +6900,10 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 							&& ObjectUtils.isNull(e.getDot())).findFirst().orElse(null);
 				}
 				if (stockOne != null) {
-					stockOne.setBalanceQuantity(stockOne.getBalanceQuantity().add(item.getSendNum()));
+					stockOne.setBalanceQuantity(stockOne.getBalanceQuantity().add(item.getSendNumHave()));
 					stockOne.setBalanceQuantityHave(stockOne.getBalanceQuantityHave().add(item.getSendNumHave()));
 					stockOne.setStoreInventory(stockOne.getBalanceQuantity());
-					BigDecimal inventoryAmount = item.getSendNum().multiply(stockOne.getInventoryCostPrice());
+					BigDecimal inventoryAmount = item.getSendNumHave().multiply(stockOne.getInventoryCostPrice());
 					stockOne.setInventoryAmount(stockOne.getInventoryAmount().add(inventoryAmount));
 					stockOne.setVersion(stockOne.getVersion());
 					pjStockDescArrayList.add(stockOne);
@@ -6960,6 +6964,9 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 	public R generatePicking(PjShip ship) {
 		PjShip picking = new PjShip();
 		PjShip detail = baseMapper.selectById(ship.getId());
+		if (detail == null) {
+			throw new RuntimeException("未查到单据信息");
+		}
 		BeanUtil.copyProperties(detail, picking);
 		//明细
 		LambdaQueryWrapper<PjShipItems> itemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -7007,4 +7014,73 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 		return R.data(picking);
 	}
 
+	@Override
+	public R generateProductionOrder(Long id) {
+		PjOrderItems orderItems = orderItemsService.getById(id);
+		//新建入库工单
+		PjShip gdShip = new PjShip();
+		// 获取系统编号
+		String billNo = serialService.getBillNo(OrderTypeEnum.SCDD.getType(), OrderTypeEnum.SCDD.getType(), OrderTypeEnum.SCDD.getType());
+		if (ObjectUtils.isNull(billNo)) {
+			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+			return R.fail(500, "生成系统编号失败");
+		}
+		gdShip.setId(null);
+		gdShip.setBillno(billNo);
+		gdShip.setStatusName(OrderTypeEnum.PRODUCTION_IN.getType());
+		gdShip.setTenantId(AuthUtil.getTenantId());
+		gdShip.setBizTypeName(OrderTypeEnum.SCDD.getType());
+		gdShip.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+		gdShip.setCreateUser(AuthUtil.getUserId());
+		gdShip.setCreateTime(new Date());
+		gdShip.setGoodsId(orderItems.getGoodsId());
+		gdShip.setGoodsName(orderItems.getGoodsName());
+		gdShip.setGoodsTotalNum(orderItems.getGoodsNum());
+		gdShip.setOperateDate(new Date());
+		R<Dept> dept = sysClient.getDept(Long.valueOf(AuthUtil.getDeptId()));
+		if (ObjectUtil.isNotEmpty(dept)) {
+			gdShip.setSalesCompanyId(dept.getData().getId());
+			gdShip.setSalesCompanyName(dept.getData().getFullName());
+		} else {
+			throw new SecurityException("未维护所属公司");
+		}
+		baseMapper.insert(gdShip);
+
+		//根据采购明细创建入库工单明细
+		PjShipItems shipItems = new PjShipItems();
+		BeanUtil.copyProperties(orderItems, shipItems);
+		shipItems.setId(null);
+		shipItems.setPid(gdShip.getId());
+		shipItems.setSrcItemId(orderItems.getId());
+		shipItems.setCreateTime(new Date());
+		shipItems.setCreateUser(AuthUtil.getUserId());
+		shipItems.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+		shipItemsService.save(shipItems);
+		ProductWorkmanship productWorkmanship = productWorkmanshipService.getOne(new LambdaQueryWrapper<ProductWorkmanship>()
+			.eq(ProductWorkmanship::getGoodsId, shipItems.getGoodsId())
+			.eq(ProductWorkmanship::getTenantId, AuthUtil.getTenantId())
+			.eq(ProductWorkmanship::getIsDeleted, 0)
+			.apply("limit 1"));
+		if (productWorkmanship != null) {
+			List<ProductWorkmanshipItems> itemsList = productWorkmanshipItemsService.list(new LambdaQueryWrapper<ProductWorkmanshipItems>()
+				.eq(ProductWorkmanshipItems::getPid, productWorkmanship.getId())
+				.eq(ProductWorkmanshipItems::getTenantId, AuthUtil.getTenantId())
+				.eq(ProductWorkmanshipItems::getIsDeleted, 0));
+			List<ProductWorkmanshipItems> itemsListNew = new ArrayList<>();
+			for (ProductWorkmanshipItems item : itemsList) {
+				item.setId(null);
+				item.setPid(gdShip.getId());
+				item.setCreateTime(new Date());
+				item.setCreateUser(AuthUtil.getUserId());
+				item.setUpdateTime(null);
+				item.setUpdateUser(0L);
+				itemsListNew.add(item);
+			}
+			if (!itemsListNew.isEmpty()) {
+				productWorkmanshipItemsService.saveBatch(itemsListNew);
+			}
+		}
+		return R.success("操作成功");
+	}
+
 }

+ 37 - 37
blade-service/blade-sales-part/src/main/resources/log/logback-dev.xml

@@ -58,56 +58,56 @@
     </if>
 
     <!-- 日志输出级别 -->
-    <root level="ERROR">
+    <root level="info">
         <appender-ref ref="STDOUT"/>
         <appender-ref ref="${STDOUT_APPENDER}"/>
     </root>
 
-    <logger name="net.sf.ehcache" level="ERROR"/>
-    <logger name="druid.sql" level="ERROR"/>
+    <logger name="net.sf.ehcache" level="info"/>
+    <logger name="druid.sql" level="info"/>
 
 
     <!-- MyBatis log configure -->
-    <logger name="com.apache.ibatis" level="ERROR"/>
-    <logger name="org.mybatis.spring" level="ERROR"/>
-    <logger name="java.sql.Connection" level="ERROR"/>
-    <logger name="java.sql.Statement" level="ERROR"/>
-    <logger name="java.sql.PreparedStatement" level="ERROR"/>
+    <logger name="com.apache.ibatis" level="info"/>
+    <logger name="org.mybatis.spring" level="info"/>
+    <logger name="java.sql.Connection" level="info"/>
+    <logger name="java.sql.Statement" level="info"/>
+    <logger name="java.sql.PreparedStatement" level="info"/>
 
     <!-- 减少部分debug日志 -->
-    <logger name="druid.sql" level="ERROR"/>
-    <logger name="org.apache.shiro" level="ERROR"/>
-    <logger name="org.mybatis.spring" level="ERROR"/>
-    <logger name="org.springframework" level="ERROR"/>
-    <logger name="org.springframework.context" level="ERROR"/>
-    <logger name="org.springframework.beans" level="ERROR"/>
-    <logger name="com.baomidou.mybatisplus" level="ERROR"/>
-    <logger name="org.apache.ibatis.io" level="ERROR"/>
-    <logger name="org.apache.velocity" level="ERROR"/>
-    <logger name="org.eclipse.jetty" level="ERROR"/>
-    <logger name="io.undertow" level="ERROR"/>
-    <logger name="org.xnio.nio" level="ERROR"/>
-    <logger name="org.thymeleaf" level="ERROR"/>
-    <logger name="springfox.documentation" level="ERROR"/>
-    <logger name="org.hibernate.validator" level="ERROR"/>
-    <logger name="com.netflix.loadbalancer" level="ERROR"/>
-    <logger name="com.netflix.hystrix" level="ERROR"/>
-    <logger name="com.netflix.zuul" level="ERROR"/>
-    <logger name="de.codecentric" level="ERROR"/>
-    <!-- cache ERROR -->
-    <logger name="net.sf.ehcache" level="ERROR"/>
-    <logger name="org.springframework.cache" level="ERROR"/>
+    <logger name="druid.sql" level="info"/>
+    <logger name="org.apache.shiro" level="info"/>
+    <logger name="org.mybatis.spring" level="info"/>
+    <logger name="org.springframework" level="info"/>
+    <logger name="org.springframework.context" level="info"/>
+    <logger name="org.springframework.beans" level="info"/>
+    <logger name="com.baomidou.mybatisplus" level="info"/>
+    <logger name="org.apache.ibatis.io" level="info"/>
+    <logger name="org.apache.velocity" level="info"/>
+    <logger name="org.eclipse.jetty" level="info"/>
+    <logger name="io.undertow" level="info"/>
+    <logger name="org.xnio.nio" level="info"/>
+    <logger name="org.thymeleaf" level="info"/>
+    <logger name="springfox.documentation" level="info"/>
+    <logger name="org.hibernate.validator" level="info"/>
+    <logger name="com.netflix.loadbalancer" level="info"/>
+    <logger name="com.netflix.hystrix" level="info"/>
+    <logger name="com.netflix.zuul" level="info"/>
+    <logger name="de.codecentric" level="info"/>
+    <!-- cache info -->
+    <logger name="net.sf.ehcache" level="info"/>
+    <logger name="org.springframework.cache" level="info"/>
     <!-- cloud -->
-    <logger name="org.apache.http" level="ERROR"/>
-    <logger name="com.netflix.discovery" level="ERROR"/>
-    <logger name="com.netflix.eureka" level="ERROR"/>
+    <logger name="org.apache.http" level="info"/>
+    <logger name="com.netflix.discovery" level="info"/>
+    <logger name="com.netflix.eureka" level="info"/>
     <!-- 业务日志 -->
-    <Logger name="org.springblade" level="ERROR"/>
-    <Logger name="org.springblade.core.tenant" level="ERROR"/>
-    <Logger name="org.springblade.core.version" level="ERROR"/>
+    <Logger name="org.springblade" level="info"/>
+    <Logger name="org.springblade.core.tenant" level="info"/>
+    <Logger name="org.springblade.core.version" level="info"/>
 
     <!-- 减少nacos日志 -->
-    <logger name="com.alibaba.nacos" level="ERROR"/>
+    <logger name="com.alibaba.nacos" level="info"/>
 
 
 </configuration>