Browse Source

出口贸易修改

lazhaoqian 3 years ago
parent
commit
e3112204c3

+ 6 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/Order.java

@@ -746,6 +746,12 @@ public class Order implements Serializable {
 	@TableField(exist = false)
 	private BigDecimal purchasePrice;
 	/**
+	 * 配件成本
+	 */
+	@ApiModelProperty(value = "配件成本")
+	@TableField(exist = false)
+	private BigDecimal partsCost;
+	/**
 	 * 费用应收
 	 */
 	@ApiModelProperty(value = "费用应收")

+ 17 - 0
blade-service/blade-client/src/main/java/org/springblade/client/container/controller/ContainerController.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springblade.client.container.service.BasicContainerDescService;
@@ -24,6 +25,7 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
@@ -39,6 +41,7 @@ import java.util.List;
 @RestController
 @RequestMapping("/container")
 @AllArgsConstructor
+@Api(value = "箱型", tags = "箱型详情接口")
 public class ContainerController
 {
 
@@ -191,5 +194,19 @@ public class ContainerController
 		}
 		return typeList;
 	}
+	@GetMapping("/listMessage")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "获取所有的箱型", notes = "获取所有的箱型")
+	public R listMessage( BasicContainerDesc body )
+	{
+		LambdaQueryWrapper<BasicContainerDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(BasicContainerDesc::getTenantId,SecureUtil.getTenantId());
+		lambdaQueryWrapper.eq(BasicContainerDesc::getIsDeleted,0);
+		lambdaQueryWrapper.like(Func.isNotEmpty(body.getName()),BasicContainerDesc::getName,body.getName());
+		lambdaQueryWrapper.like(Func.isNotEmpty(body.getCode()),BasicContainerDesc::getCode,body.getCode());
+		lambdaQueryWrapper.like(Func.isNotEmpty(body.getEnName()),BasicContainerDesc::getEnName,body.getEnName());
+		lambdaQueryWrapper.like(Func.isNotEmpty(body.getUnCode()),BasicContainerDesc::getUnCode,body.getUnCode());
+		return R.data(basicContainerDescService.list(lambdaQueryWrapper));
+	}
 
 }

+ 42 - 17
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/export/ExportOrderController.java

@@ -325,30 +325,43 @@ public class ExportOrderController extends BladeController {
 				//获取订单明细
 				List<OrderItems> list = orderItemsService.list(new QueryWrapper<OrderItems>().eq("pid", item.getId()).eq("is_deleted", 0).eq("tenant_id",item.getTenantId()));
 				if (CollectionUtils.isNotEmpty(list)){
-					item.setAmount(list.stream().filter(e -> e.getAmount() != null).map(OrderItems::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add));//销售金额
-					item.setProcurementCost(list.stream().reduce(BigDecimal.ZERO,(x,y) ->{
+					item.setAmount(list.stream().filter(e -> e.getAmount() != null).reduce(BigDecimal.ZERO, (x, y) -> {
+						return x.add(y.getAmount().multiply(y.getExchangeRate()));
+					}, BigDecimal::add));//金额求和
+					item.setProcurementCost(list.stream().filter(e -> e.getPurchaseCost() != null).reduce(BigDecimal.ZERO,(x,y) ->{
 						return x.add(y.getPurchaseCost().multiply(y.getOrderQuantity()));
 					},BigDecimal::add));//采购成本和
-					item.setPurchasePrice(list.stream().reduce(BigDecimal.ZERO,(x,y) ->{
+					item.setPurchasePrice(list.stream().filter(e -> e.getPurchaseAmount() != null).reduce(BigDecimal.ZERO,(x,y) ->{
 						return x.add(y.getPurchaseAmount().multiply(y.getOrderQuantity()));
 					},BigDecimal::add));//采购报价金额和
+					item.setPartsCost(list.stream().filter(e -> e.getPartsCost() != null).reduce(BigDecimal.ZERO,(x,y) ->{
+						return x.add(y.getPartsCost().multiply(y.getOrderQuantity()));
+					},BigDecimal::add));//配件成本金额和
 				}
 				//获取应收费用
-				List<OrderFees> orderFees = orderFeesService.list(new QueryWrapper<OrderFees>().eq("pid", item.getId()).eq("is_deleted", 0).eq("tenant_id", item.getTenantId()).eq("fees_type", 1));
+				List<OrderFees> feesList = orderFeesService.list(new QueryWrapper<OrderFees>().eq("pid", item.getId()).eq("is_deleted", 0).eq("tenant_id", item.getTenantId()).eq("fees_type", 1));
 				//获取应付费用
 				List<OrderFees> orderFeesList = orderFeesService.list(new QueryWrapper<OrderFees>().eq("pid", item.getId()).eq("is_deleted", 0).eq("tenant_id", item.getTenantId()).eq("fees_type", 2));
-				if (CollectionUtils.isNotEmpty(orderFees)){
-					item.setFd(orderFees.stream().filter(e -> e.getAmount() != null).map(OrderFees::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add));
+				if (CollectionUtils.isNotEmpty(feesList)){
+					item.setFd(feesList.stream().filter(e -> e.getAmount() != null).reduce(BigDecimal.ZERO,(x,y) ->{
+						return x.add(y.getAmount().multiply(y.getExchangeRate()));
+					},BigDecimal::add));
 				}else {
 					item.setFd(BigDecimal.ZERO);
 				}
 				if (CollectionUtils.isNotEmpty(orderFeesList)){
-					item.setFc(orderFeesList.stream().filter(e -> e.getAmount() != null).map(OrderFees::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add));
+					item.setFc(orderFeesList.stream().filter(e -> e.getAmount() != null).reduce(BigDecimal.ZERO,(x,y) ->{
+						return x.add(y.getAmount().multiply(y.getExchangeRate()));
+					},BigDecimal::add));
 				}else {
 					item.setFc(BigDecimal.ZERO);
 				}
+				//产品利润 销售金额-采购成本金额-配件成本金额
+				item.setGrossProfit(item.getAmount().subtract(item.getProcurementCost()).subtract(item.getPartsCost()));
+				//产品利率
+				item.setGrossProfitRate(item.getGrossProfit().divide(item.getAmount(),2,BigDecimal.ROUND_HALF_UP));
 				//计算单票利润=单票利润+费用应收-费用应付
-				item.setSingleTicketMargin(item.getSingleTicketMargin().add(item.getFd()).subtract(item.getFc()));
+				item.setSingleTicketMargin(item.getAmount().add(item.getFd()).subtract(item.getFc()));
 			});
 		}
 		return R.data(page);
@@ -401,32 +414,44 @@ public class ExportOrderController extends BladeController {
 				//获取订单明细
 				List<OrderItems> list = orderItemsService.list(new QueryWrapper<OrderItems>().eq("pid", item.getId()).eq("is_deleted", 0).eq("tenant_id",item.getTenantId()));
 				if (CollectionUtils.isNotEmpty(list)){
-					item.setAmount(list.stream().filter(e -> e.getAmount() != null).map(OrderItems::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add));//销售金额
-					item.setProcurementCost(list.stream().reduce(BigDecimal.ZERO,(x,y) ->{
+					item.setAmount(list.stream().filter(e -> e.getAmount() != null).reduce(BigDecimal.ZERO, (x, y) -> {
+						return x.add(y.getAmount().multiply(y.getExchangeRate()));
+					}, BigDecimal::add));//金额求和
+					item.setProcurementCost(list.stream().filter(e -> e.getPurchaseCost() != null).reduce(BigDecimal.ZERO,(x,y) ->{
 						return x.add(y.getPurchaseCost().multiply(y.getOrderQuantity()));
 					},BigDecimal::add));//采购成本和
-					item.setPurchasePrice(list.stream().reduce(BigDecimal.ZERO,(x,y) ->{
+					item.setPurchasePrice(list.stream().filter(e -> e.getPurchaseAmount() != null).reduce(BigDecimal.ZERO,(x,y) ->{
 						return x.add(y.getPurchaseAmount().multiply(y.getOrderQuantity()));
 					},BigDecimal::add));//采购报价金额和
+					item.setPartsCost(list.stream().filter(e -> e.getPartsCost() != null).reduce(BigDecimal.ZERO,(x,y) ->{
+						return x.add(y.getPartsCost().multiply(y.getOrderQuantity()));
+					},BigDecimal::add));//配件成本金额和
 				}
 				//获取应收费用
-				List<OrderFees> orderFees = orderFeesService.list(new QueryWrapper<OrderFees>().eq("pid", item.getId()).eq("is_deleted", 0).eq("tenant_id", item.getTenantId()).eq("fees_type", 1));
+				List<OrderFees> feesList = orderFeesService.list(new QueryWrapper<OrderFees>().eq("pid", item.getId()).eq("is_deleted", 0).eq("tenant_id", item.getTenantId()).eq("fees_type", 1));
 				//获取应付费用
 				List<OrderFees> orderFeesList = orderFeesService.list(new QueryWrapper<OrderFees>().eq("pid", item.getId()).eq("is_deleted", 0).eq("tenant_id", item.getTenantId()).eq("fees_type", 2));
-				if (CollectionUtils.isNotEmpty(orderFees)){
-					item.setFd(orderFees.stream().filter(e -> e.getAmount() != null).map(OrderFees::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add));
+				if (CollectionUtils.isNotEmpty(feesList)){
+					item.setFd(feesList.stream().filter(e -> e.getAmount() != null).reduce(BigDecimal.ZERO,(x,y) ->{
+						return x.add(y.getAmount().multiply(y.getExchangeRate()));
+					},BigDecimal::add));
 				}else {
 					item.setFd(BigDecimal.ZERO);
 				}
 				if (CollectionUtils.isNotEmpty(orderFeesList)){
-					item.setFc(orderFeesList.stream().filter(e -> e.getAmount() != null).map(OrderFees::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add));
+					item.setFc(orderFeesList.stream().filter(e -> e.getAmount() != null).reduce(BigDecimal.ZERO,(x,y) ->{
+						return x.add(y.getAmount().multiply(y.getExchangeRate()));
+					},BigDecimal::add));
 				}else {
 					item.setFc(BigDecimal.ZERO);
 				}
+				//产品利润 销售金额-采购成本金额-配件成本金额
+				item.setGrossProfit(item.getAmount().subtract(item.getProcurementCost()).subtract(item.getPartsCost()));
+				//产品利率
+				item.setGrossProfitRate(item.getGrossProfit().divide(item.getAmount(),2,BigDecimal.ROUND_HALF_UP));
 				//计算单票利润=单票利润+费用应收-费用应付
-				item.setSingleTicketMargin(item.getSingleTicketMargin().add(item.getFd()).subtract(item.getFc()));
+				item.setSingleTicketMargin(item.getAmount().add(item.getFd()).subtract(item.getFc()));
 			});
-			profitItemExcelList = JSON.parseArray(JSON.toJSONString(page.getRecords()), ProfitItemExcel.class);
 		}
 		ExcelUtil.export(response, "销售利润", "销售利润", profitItemExcelList, ProfitItemExcel.class);
 	}

+ 1 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderItemsMapper.java

@@ -72,6 +72,6 @@ public interface OrderItemsMapper extends BaseMapper<OrderItems> {
 	 * @param pid
 	 * @return
 	 */
-	List<OrderItems> getProfitItem(@Param("pid") Long pid);
+	List<OrderItems> 	getProfitItem(@Param("pid") Long pid);
 
 }

+ 73 - 2
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderItemsMapper.xml

@@ -120,8 +120,79 @@
     </update>
     <select id="getProfitItem" resultMap="orderItemsResultMap">
     SELECT
-	   *,
-	    IFNULL(amount,0) * IFNULL(exchange_rate,0)-((IFNULL(purchase_cost,0) + IFNULL(parts_cost,0))* order_quantity) AS productGrossMargin
+	  	id,
+	pid,
+	price_category,
+	price_type,
+	item_id,
+	order_quantity,
+	actual_quantity,
+	storage_quantity,
+	package_remarks,
+	storage_amount,
+	purchase_amount,
+	storage_in_quantity,
+	purchase_quantity,
+	unit,
+	price,
+	amount,
+	tax_rate,
+	org_order_no,
+	src_order_no,
+	src_id,
+	bill_no,
+	container_no,
+	invoice_weight,
+	bill_weight,
+	remarks_one,
+	custom_two,
+	custom_three,
+	custom_four,
+	custom_five,
+	custom_six,
+	version,
+	tenant_id,
+	create_user,
+	create_dept,
+	create_time,
+	update_user,
+	update_time,
+	STATUS,
+	is_deleted,
+	remarks,
+	trade_terms,
+	item_url,
+	item_type,
+	item_prop,
+	if_tax,
+	item_description,
+	insurance,
+	freight,
+	discount,
+	price_category_names,
+	cntr_no,
+	corp_id,
+	priority_referrer,
+	referrer_reason,
+	corp_name,
+	parts_price,
+	parts_describe,
+	parts_price_describe,
+	coefficient,
+	exchange_rate,
+	greenback,
+	currency,
+	purchase_cost,
+	parts_cost,
+	product_remark,
+	actual_weight,
+	product_price,
+	good_type,
+	integral_multiples,
+	integral,
+	shop_quality,
+	ROUND(IFNULL(amount,0) * IFNULL(exchange_rate,0)-((IFNULL(purchase_cost,0) + IFNULL(parts_cost,0))* order_quantity),2) AS productGrossMargin,
+	ROUND(( IFNULL(amount,0) * IFNULL(exchange_rate,0)-((IFNULL(purchase_cost,0) + IFNULL(parts_cost,0))* order_quantity))/(IFNULL(amount,0) * IFNULL(exchange_rate,0)),2) AS item_margin
     FROM
 	    business_order_items
     WHERE is_deleted = 0