Przeglądaj źródła

学校、出口贸易修改

lazhaoqian 3 lat temu
rodzic
commit
4208971eea

+ 10 - 1
blade-service/blade-client/src/main/java/org/springblade/client/goods/controller/GoodsDescController.java

@@ -315,10 +315,19 @@ public class GoodsDescController extends BladeController {
 	@GetMapping("/selectGoods")
 	@ApiOperationSupport(order = 5)
 	@ApiOperation(value = "获取商品详情", notes = "传入goodsDesc")
-	public R<IPage<GoodsDescVO>> selectGoods(GoodsDesc goodsDesc, Query query) {
+	public R<IPage<GoodsDescVO>> selectGoods(GoodsDescVO goodsDesc, Query query) {
 		goodsDesc.setIsDeleted(0);
 		goodsDesc.setTenantId(AuthUtil.getTenantId());
 		goodsDesc.setType(GoodsTypeEnum.GOODS.getType());
+		List<Long> goodsIdList = new ArrayList<>();
+		if (StringUtils.isNotEmpty(goodsDesc.getGoodsTypeId())) {
+			Long goodsId = Long.parseLong(goodsDesc.getGoodsTypeId());
+			selectChildById(goodsId, goodsIdList);
+			goodsIdList.add(goodsId);
+		}
+		if (CollectionUtils.isNotEmpty(goodsIdList)){
+			goodsDesc.setGoodsTypeIdList(goodsIdList);
+		}
 		IPage<GoodsDescVO> goodsDescVOIPage = goodsDescService.selectGoods(Condition.getPage(query), goodsDesc);
 		if (CollectionUtils.isNotEmpty(goodsDescVOIPage.getRecords())) {
 			goodsDescVOIPage.getRecords().forEach(e -> {

+ 13 - 7
blade-service/blade-client/src/main/java/org/springblade/client/goods/mapper/GoodsDescMapper.xml

@@ -154,20 +154,23 @@
         <if test="GoodsDesc.cname!=null and GoodsDesc.cname != ''">
             and bg.cname like concat(concat('%',  #{GoodsDesc.cname}),'%')
         </if>
+        <if test="GoodsDesc.ename!=null and GoodsDesc.ename != ''">
+            and bg.ename like concat(concat('%',  #{GoodsDesc.ename}),'%')
+        </if>
         <if test="GoodsDesc.code!=null and GoodsDesc.code != ''">
-            and bg.code = #{GoodsDesc.code}
+            and bg.code like concat(concat('%',  #{GoodsDesc.code}),'%')
         </if>
         <if test="GoodsDesc.typeno!=null and GoodsDesc.typeno != ''">
-            and bg.typeno = #{GoodsDesc.typeno}
+            and bg.typeno like concat(concat('%',  #{GoodsDesc.typeno}),'%')
         </if>
         <if test="GoodsDesc.brand!=null and GoodsDesc.brand != ''">
-            and bg.brand = #{GoodsDesc.brand}
+            and bg.brand like concat(concat('%',  #{GoodsDesc.brand}),'%')
         </if>
         <if test="GoodsDesc.brandItem!=null and GoodsDesc.brandItem != ''">
-            and bg.brand_item = #{GoodsDesc.brandItem}
+            and bg.brand_item like concat(concat('%',  #{GoodsDesc.brandItem}),'%')
         </if>
         <if test="GoodsDesc.specs!=null and GoodsDesc.specs != ''">
-            and bg.specs = #{GoodsDesc.specs}
+            and bg.specs like concat(concat('%',  #{GoodsDesc.specs}),'%')
         </if>
         <if test="GoodsDesc.category!=null and GoodsDesc.category != ''">
             and bg.category = #{GoodsDesc.category}
@@ -190,8 +193,11 @@
         <if test="GoodsDesc.status!=null">
             and bg.status = #{GoodsDesc.status}
         </if>
-        <if test='GoodsDesc.goodsTypeId!=null and GoodsDesc.goodsTypeId != ""'>
-            AND bg.goods_type_id  like concat(concat('%',  #{GoodsDesc.goodsTypeId}),'%')
+        <if test='GoodsDesc.goodsTypeIdList!=null and GoodsDesc.goodsTypeIdList != ""'>
+            AND goods_type_id  in
+            <foreach collection="GoodsDesc.goodsTypeIdList" index="index" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
         </if>
     </select>
     <select id="selectGoodsMessage" resultType="org.springblade.client.vo.GoodsDescVO">

+ 6 - 3
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/controller/PriceBankController.java

@@ -86,10 +86,11 @@ public class PriceBankController extends BladeController {
 		lambdaQueryWrapper.eq(PriceBank::getTenantId, SecureUtil.getTenantId());
 		lambdaQueryWrapper.eq(PriceBank::getTradeType,"CK");
 		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCname()),PriceBank::getCname,priceBank.getCname());
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCode()),PriceBank::getCode,priceBank.getCode());
 		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getCorpId()),PriceBank::getCorpId,priceBank.getCorpId());
 		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getSpecs()),PriceBank::getSpecs,priceBank.getSpecs());
 		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getEname()),PriceBank::getEname,priceBank.getEname());
-		lambdaQueryWrapper.le(Func.isNotEmpty(priceBank.getStatusTime()),PriceBank::getEndTime,priceBank.getStatusTime());
+		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getStatusTime()),PriceBank::getEndTime,priceBank.getStatusTime());
 		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getBillType()),PriceBank::getBillType,priceBank.getBillType());
 		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getDateValidityStart()),PriceBank::getEndTime,priceBank.getDateValidityStart());
 		lambdaQueryWrapper.le(Func.isNotEmpty(priceBank.getDateValidityEnd()),PriceBank::getEndTime,priceBank.getDateValidityEnd());
@@ -119,10 +120,11 @@ public class PriceBankController extends BladeController {
 		lambdaQueryWrapper.eq(PriceBank::getTenantId, SecureUtil.getTenantId());
 		lambdaQueryWrapper.eq(PriceBank::getTradeType,"CK");
 		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCname()),PriceBank::getCname,priceBank.getCname());
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCode()),PriceBank::getCode,priceBank.getCode());
 		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getCorpId()),PriceBank::getCorpId,priceBank.getCorpId());
 		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getSpecs()),PriceBank::getSpecs,priceBank.getSpecs());
 		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getGoodsTypeName()),PriceBank::getGoodsTypeName,priceBank.getGoodsTypeName());
-		lambdaQueryWrapper.le(Func.isNotEmpty(priceBank.getStatusTime()),PriceBank::getEndTime,priceBank.getStatusTime());
+		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getStatusTime()),PriceBank::getEndTime,priceBank.getStatusTime());
 		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getEname()),PriceBank::getEname,priceBank.getEname());
 		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getDateValidityStart()),PriceBank::getEndTime,priceBank.getDateValidityStart());
 		lambdaQueryWrapper.le(Func.isNotEmpty(priceBank.getDateValidityEnd()),PriceBank::getEndTime,priceBank.getDateValidityEnd());
@@ -193,12 +195,13 @@ public class PriceBankController extends BladeController {
 		lambdaQueryWrapper.eq(PriceBank::getTenantId, SecureUtil.getTenantId());
 		lambdaQueryWrapper.eq(PriceBank::getTradeType,"CK");
 		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCname()),PriceBank::getCname,priceBank.getCname());
+		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getCode()),PriceBank::getCode,priceBank.getCode());
 		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getEname()),PriceBank::getEname,priceBank.getEname());
 		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getCorpId()),PriceBank::getCorpId,priceBank.getCorpId());
 		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getSpecs()),PriceBank::getSpecs,priceBank.getSpecs());
 		lambdaQueryWrapper.like(Func.isNotEmpty(priceBank.getGoodsTypeName()),PriceBank::getGoodsTypeName,priceBank.getGoodsTypeName());
 		//lambdaQueryWrapper.le(Func.isNotEmpty(priceBank.getStatusTime()),PriceBank::getStartTime,priceBank.getStatusTime());
-		lambdaQueryWrapper.le(Func.isNotEmpty(priceBank.getStatusTime()),PriceBank::getEndTime,priceBank.getStatusTime());
+		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getStatusTime()),PriceBank::getEndTime,priceBank.getStatusTime());
 		lambdaQueryWrapper.ge(Func.isNotEmpty(priceBank.getDateValidityStart()),PriceBank::getEndTime,priceBank.getDateValidityStart());
 		lambdaQueryWrapper.le(Func.isNotEmpty(priceBank.getDateValidityEnd()),PriceBank::getEndTime,priceBank.getDateValidityEnd());
 		lambdaQueryWrapper.eq(Func.isNotEmpty(priceBank.getBillType()),PriceBank::getBillType,priceBank.getBillType());

+ 97 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/excel/ProfitItemExcel.java

@@ -0,0 +1,97 @@
+package org.springblade.purchase.sales.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 福达贸易销售利润
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class ProfitItemExcel implements Serializable {
+	private static final long serialVersionUID = 1L;
+	/**
+	 * 合同号
+	 */
+	@ExcelProperty(value = "合同号")
+	private String orderNo;
+	/**
+	 * 客户名称
+	 */
+	@ExcelProperty(value = "客户名称")
+	private String corpsName;
+
+	/**
+	 * 合同日期
+	 */
+	@ExcelProperty(value = "合同日期")
+	private Date businesDate;
+	/**
+	 * 装货港
+	 */
+	@ExcelProperty(value = "起运港")
+	private String portOfLoad;
+	/**
+	 * 目的港
+	 */
+	@ExcelProperty(value = "目的港")
+	private String portOfDestination;
+	/**
+	 * 运输方式
+	 */
+	@ApiModelProperty(value = "运输条款")
+	private String transport;
+	/**
+	 * 采购成本
+	 */
+	@ExcelProperty(value = "采购成本")
+	@TableField(exist = false)
+	private BigDecimal procurementCost;
+	/**
+	 * 采购报价
+	 */
+	@ExcelProperty(value = "采购报价")
+	private BigDecimal purchasePrice;
+	/**
+	 * 销售金额
+	 */
+	@ExcelProperty(value = "销售金额")
+	private BigDecimal amount;
+	/**
+	 * 产品毛利
+	 */
+	@ExcelProperty(value = "产品毛利")
+	private BigDecimal grossProfit;
+	/**
+	 * 毛利率
+	 */
+	@ExcelProperty(value = "产品利率")
+	private BigDecimal grossProfitRate;
+	/**
+	 * 费用应收
+	 */
+	@ExcelProperty(value = "费用应收")
+	private BigDecimal fd;
+	/**
+	 * 费用应付
+	 */
+	@ExcelProperty(value = "费用应付")
+	private BigDecimal fc;
+	/**
+	 * 单票毛利
+	 */
+	@ExcelProperty(value = "单票毛利")
+	private BigDecimal singleTicketMargin;
+
+}

+ 75 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/export/ExportOrderController.java

@@ -1,9 +1,11 @@
 package org.springblade.purchase.sales.export;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.trade.purchase.order.enums.OrderTypeEnum;
 import io.swagger.annotations.Api;
@@ -13,6 +15,7 @@ import lombok.AllArgsConstructor;
 import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.SecureUtil;
@@ -25,6 +28,7 @@ import org.springblade.finance.vojo.Acc;
 import org.springblade.purchase.sales.entity.Order;
 import org.springblade.purchase.sales.entity.OrderFees;
 import org.springblade.purchase.sales.entity.OrderItems;
+import org.springblade.purchase.sales.excel.ProfitItemExcel;
 import org.springblade.purchase.sales.service.*;
 import org.springblade.purchase.sales.vo.OrderItemsVO;
 import org.springblade.purchase.sales.vo.OrderVO;
@@ -32,8 +36,10 @@ import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -291,10 +297,13 @@ public class ExportOrderController extends BladeController {
 	@ApiOperationSupport(order = 11)
 	@ApiOperation(value = "销售利润", notes = "传入order")
 	public R<IPage<Order>> profit(OrderVO order, Query query) {
+		if (StringUtils.isBlank(order.getBillType())){
+			throw new SecurityException("请选择查询订单类型");
+		}
 		LambdaQueryWrapper<Order> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(Order::getTenantId,SecureUtil.getTenantId());//租户id
 		lambdaQueryWrapper.eq(Order::getIsDeleted,0);//订单是否有效
-		lambdaQueryWrapper.eq(Order::getBillType,OrderTypeEnum.SALES.getType());//订单类型
+		lambdaQueryWrapper.eq(Order::getBillType,order.getBillType());//订单类型
 		lambdaQueryWrapper.eq(Order::getTradeType,OrderTypeEnum.EXPORT.getType());//贸易类型
 		lambdaQueryWrapper.like(Func.isNotEmpty(order.getOrderNo()),Order::getOrderNo,order.getOrderNo());//订单号
 		lambdaQueryWrapper.like(Func.isNotEmpty(order.getCorpId()),Order::getCorpId,order.getCorpId());//客户id
@@ -356,4 +365,69 @@ public class ExportOrderController extends BladeController {
 		}
 		return R.data(orderItemsService.getProfitItem(order.getId()));
 	}
+	/**
+	 * 销售利润
+	 */
+	@GetMapping("/exportProfit")
+	@ApiOperationSupport(order = 13)
+	@ApiOperation(value = "销售利润", notes = "传入order")
+	public void exportProfit(OrderVO order, Query query, HttpServletResponse response) {
+		if (StringUtils.isBlank(order.getBillType())){
+			throw new SecurityException("请选择查询订单类型");
+		}
+		List<ProfitItemExcel> profitItemExcelList = new ArrayList<>();
+		LambdaQueryWrapper<Order> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(Order::getTenantId,SecureUtil.getTenantId());//租户id
+		lambdaQueryWrapper.eq(Order::getIsDeleted,0);//订单是否有效
+		lambdaQueryWrapper.eq(Order::getBillType,order.getBillType());//订单类型
+		lambdaQueryWrapper.eq(Order::getTradeType,OrderTypeEnum.EXPORT.getType());//贸易类型
+		lambdaQueryWrapper.like(Func.isNotEmpty(order.getOrderNo()),Order::getOrderNo,order.getOrderNo());//订单号
+		lambdaQueryWrapper.like(Func.isNotEmpty(order.getCorpId()),Order::getCorpId,order.getCorpId());//客户id
+		lambdaQueryWrapper.ge(Func.isNotEmpty(order.getContractStartDate()),Order::getBusinesDate,order.getContractStartDate());//合同日期开始
+		lambdaQueryWrapper.le(Func.isNotEmpty(order.getContractEndDate()),Order::getBusinesDate,order.getContractEndDate());//合同日期结束
+		lambdaQueryWrapper.like(Func.isNotEmpty(order.getPortOfLoad()),Order::getPortOfLoad,order.getPortOfLoad());//装货港
+		lambdaQueryWrapper.like(Func.isNotEmpty(order.getPortOfDestination()),Order::getPortOfDestination,order.getPortOfDestination());//目的港
+		lambdaQueryWrapper.like(Func.isNotEmpty(order.getOrderRemark()),Order::getOrderRemark,order.getOrderRemark());//备注
+		lambdaQueryWrapper.orderByDesc(Order::getId);
+		IPage<Order> page = orderService.page(Condition.getPage(query), lambdaQueryWrapper);
+		if (CollectionUtils.isNotEmpty(page.getRecords())){
+			page.getRecords().stream().forEach(item ->{
+				if (item.getCorpId() != null){
+					R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(item.getCorpId());//客户
+					if (corpMessage.isSuccess() && corpMessage.getData() != null){
+						item.setCorpsName(corpMessage.getData().getCname());
+					}
+				}
+				//获取订单明细
+				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) ->{
+						return x.add(y.getPurchaseCost().multiply(y.getOrderQuantity()));
+					},BigDecimal::add));//采购成本和
+					item.setPurchasePrice(list.stream().reduce(BigDecimal.ZERO,(x,y) ->{
+						return x.add(y.getPurchaseAmount().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> 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));
+				}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));
+				}else {
+					item.setFc(BigDecimal.ZERO);
+				}
+				//计算单票利润=单票利润+费用应收-费用应付
+				item.setSingleTicketMargin(item.getSingleTicketMargin().add(item.getFd()).subtract(item.getFc()));
+			});
+			profitItemExcelList = JSON.parseArray(JSON.toJSONString(page.getRecords()), ProfitItemExcel.class);
+		}
+		ExcelUtil.export(response, "销售利润", "销售利润", profitItemExcelList, ProfitItemExcel.class);
+	}
 }

+ 2 - 2
blade-service/blade-school/src/main/java/org/springblade/school/controller/SalaryController.java

@@ -157,8 +157,8 @@ public class SalaryController extends BladeController {
 	public R checkOrder(@RequestBody Salary salary)
 	{
 
-		salaryService.checkOrder(salary);
-		return R.data("操作成功");
+
+		return salaryService.checkOrder(salary);
 	}
 
 	/**

+ 17 - 0
blade-service/blade-school/src/main/java/org/springblade/school/controller/SalaryItemController.java

@@ -176,6 +176,8 @@ public class SalaryItemController extends BladeController {
 	@ApiOperationSupport(order = 9)
 	@ApiOperation(value = "导出-工资管理-小学部-工资表导出")
 	public void exportSupplierTemplate(SalaryItem salaryItem,HttpServletResponse response) {
+		salaryItem.setTenantId(SecureUtil.getTenantId());
+		salaryItem.setIsDeleted(0);
 		List<SalaryItemExcel> list = new ArrayList<>();
 		List<SalaryItem> schoolTeacherList = salaryItemService.list(new QueryWrapper<SalaryItem>().setEntity(salaryItem));
 		if (CollectionUtils.isNotEmpty(schoolTeacherList)){
@@ -842,5 +844,20 @@ public class SalaryItemController extends BladeController {
 	public R calculate(@Valid @RequestBody SalaryItem salaryItem) {
 		return salaryItemService.calculate(salaryItem);
 	}
+	/**
+	 * 导出-工资管理-小学部-工资表导出
+	 *
+	 * */
+	@GetMapping("/export/exception")
+	@ApiOperationSupport(order = 9)
+	@ApiOperation(value = "导出-工资管理-小学部-异常工资表导出")
+	public void exportException(SalaryItem salaryItem,HttpServletResponse response) {
+		List<SalaryException> list = new ArrayList<>();
+		List<SalaryItem> schoolTeacherList = salaryItemService.exportException(salaryItem);
+		if (CollectionUtils.isNotEmpty(schoolTeacherList)){
+			list = JSON.parseArray(JSON.toJSONString(schoolTeacherList), SalaryException.class);
+		}
+		ExcelUtil.export(response, "工资表", "工资表", list, SalaryException.class);
+	}
 
 }

+ 98 - 0
blade-service/blade-school/src/main/java/org/springblade/school/excel/SalaryException.java

@@ -0,0 +1,98 @@
+package org.springblade.school.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 通济学校-工资管理-异常导出
+ */
+@Data
+@ColumnWidth(15)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class SalaryException implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 姓名
+	 */
+	@ExcelProperty(value = "姓名")
+	private String cname;
+	/**
+	 * 身份证号
+	 */
+	@ExcelProperty(value = "身份证号")
+	@ColumnWidth(20)
+	private String idNumber;
+	/**
+	 * 工资拨付标准
+	 */
+	@ExcelProperty(value = "工资拨付标准")
+	@ColumnWidth(20)
+	private BigDecimal salaryWithdrawalStandard;
+	/**
+	 * 职级拨付标准
+	 */
+	@ExcelProperty(value = "职级拨付标准")
+	@ColumnWidth(20)
+	private BigDecimal rankWithdrawalStandard;
+	/**
+	 * 职级标准
+	 */
+	@ExcelProperty(value = "职级标准")
+	private BigDecimal rankStandard;
+	/**
+	 * 工资基数
+	 */
+	@ExcelProperty(value = "工资基数标准")
+	@ColumnWidth(20)
+	private BigDecimal salaryBaseName;
+	/**
+	 * 工作量工资标准
+	 */
+	@ExcelProperty(value = "工作量工资标准")
+	@ColumnWidth(25)
+	private BigDecimal workloadSalaryCritertion;
+	/**
+	 * 日常考核标准
+	 */
+	@ExcelProperty(value = "日常考核标准")
+	@ColumnWidth(20)
+	private BigDecimal dailyAssessmentCriteria;
+	/**
+	 * 学期绩效工资
+	 */
+	@ExcelProperty(value = "学期绩效标准")
+	@ColumnWidth(20)
+	private BigDecimal termPerformanceSalaryName;
+	/**
+	 * 虚拟工作量工资标准
+	 */
+	@ExcelProperty(value = "虚拟工作量工资标准")
+	@ColumnWidth(35)
+	private BigDecimal virtualWorkloadSalary;
+	/**
+	 * 双休日工作量工资标准
+	 */
+	@ExcelProperty(value = "双休日工作量工资标准")
+	@ColumnWidth(35)
+	private BigDecimal doubleCease;
+	/**
+	 * 虚拟双休日工作量工资标准
+	 */
+	@ExcelProperty(value = "虚拟双休日工作量工资标准")
+	@ColumnWidth(40)
+	private BigDecimal virtualDoubleCease;
+	/**
+	 * 其他标准
+	 */
+	@ExcelProperty(value = "其他标准")
+	private BigDecimal otherCriterion;
+}

+ 7 - 0
blade-service/blade-school/src/main/java/org/springblade/school/service/ISalaryItemService.java

@@ -240,6 +240,13 @@ public interface ISalaryItemService extends IService<SalaryItem> {
 	 */
 	R calculate(SalaryItem salaryItem);
 
+	/**
+	 * 获取不符合标准的员工信息
+	 * @param salaryItem
+	 * @return
+	 */
+	List<SalaryItem> exportException(SalaryItem salaryItem);
+
 
 
 }

+ 2 - 1
blade-service/blade-school/src/main/java/org/springblade/school/service/ISalaryService.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.school.service;
 
+import org.springblade.core.tool.api.R;
 import org.springblade.school.entity.Salary;
 import org.springblade.school.vo.SalaryVO;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -63,7 +64,7 @@ public interface ISalaryService extends IService<Salary> {
 	 * 工资请核
 	 * @param salary
 	 */
-	void checkOrder(Salary salary);
+	R checkOrder(Salary salary);
 
 	/**
 	 * 审核通过

+ 20 - 0
blade-service/blade-school/src/main/java/org/springblade/school/service/impl/SalaryItemServiceImpl.java

@@ -45,6 +45,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -1403,6 +1404,25 @@ public class SalaryItemServiceImpl extends ServiceImpl<SalaryItemMapper, SalaryI
 		return R.success("计算完成");
 	}
 
+	@Override
+	public List<SalaryItem> exportException(SalaryItem salaryItem) {
+		List<SalaryItem> list = new ArrayList<>();
+		List<SalaryItem> salaryItemList = baseMapper.selectList(new QueryWrapper<SalaryItem>().eq("pid", salaryItem.getPid()).eq("is_deleted", 0));
+		if (CollectionUtils.isNotEmpty(salaryItemList)){
+			salaryItemList.stream().forEach(item ->{
+				BigDecimal summarize = item.getSalaryWithdrawalStandard().add(item.getRankWithdrawalStandard()); //工资拨付标准+职级拨付标准+其他剩余所有标准
+				//职级拨付标准+职级标准(也就是职级拨付标准)+工资基数标准+工作量工资标准+日常考核标准+绩效工资标准-虚拟工作量工资标准+双休日工作量工资标准-虚拟双休日工作量工资标准+其他剩余所有标准
+				BigDecimal itemMessage = item.getRankWithdrawalStandard().add(item.getRankStandard()).add(item.getSalaryBaseName()).add(item.getWorkloadSalaryCritertion())
+					.add(item.getDailyAssessmentCriteria()).add(item.getTermPerformanceSalaryName()).subtract(item.getVirtualWorkloadSalary())
+					.add(item.getDoubleCease()).subtract(item.getVirtualDoubleCease());
+				if (summarize.compareTo(itemMessage) != 0){
+					list.add(item);
+				}
+			});
+		}
+		return list;
+	}
+
 	/**
 	 *工资计算
 	 *

+ 5 - 4
blade-service/blade-school/src/main/java/org/springblade/school/service/impl/SalaryServiceImpl.java

@@ -151,7 +151,7 @@ public class SalaryServiceImpl extends ServiceImpl<SalaryMapper, Salary> impleme
 	@Override
 	@Transactional
 	@GlobalTransactional
-	public void checkOrder(Salary salary) {
+	public R checkOrder(Salary salary) {
 		{
 			Salary selectById = baseMapper.selectById(salary.getId());
 			if (selectById == null) {
@@ -166,7 +166,7 @@ public class SalaryServiceImpl extends ServiceImpl<SalaryMapper, Salary> impleme
 				//判断数据是否合规
 				//获取明细表数据
 				List<SalaryItem> salaryItemList = salaryItemMapper.selectList(new QueryWrapper<SalaryItem>().eq("pid", salary.getId()).eq("is_deleted", 0));
-				List<String> list = new ArrayList<>();
+				List<SalaryItem> list = new ArrayList<>();
 				if (CollectionUtils.isNotEmpty(salaryItemList)){
 					salaryItemList.stream().forEach(item ->{
 						BigDecimal summarize = item.getSalaryWithdrawalStandard().add(item.getRankWithdrawalStandard()); //工资拨付标准+职级拨付标准+其他剩余所有标准
@@ -175,12 +175,12 @@ public class SalaryServiceImpl extends ServiceImpl<SalaryMapper, Salary> impleme
 							.add(item.getDailyAssessmentCriteria()).add(item.getTermPerformanceSalaryName()).subtract(item.getVirtualWorkloadSalary())
 							.add(item.getDoubleCease()).subtract(item.getVirtualDoubleCease());
 						if (summarize.compareTo(itemMessage) != 0){
-							list.add(item.getCname());
+							list.add(item);
 						}
 					});
 				}
 				if (CollectionUtils.isNotEmpty(list)){
-					throw new RuntimeException("工资表中"+ String.join(",",list)+"中标准不符合要求");
+					return R.data(200,list,"请核失败");
 				}
 
 				selectById.setStatus(1);
@@ -211,6 +211,7 @@ public class SalaryServiceImpl extends ServiceImpl<SalaryMapper, Salary> impleme
 
 			}
 		}
+		return R.success("请核成功");
 	}
 
 	@Override