货品清单导出统计及货品清单列表排序 #4

Merged
yangmaofu merged 1 commits from feature_ymf_dev into dev 2 weeks ago
  1. 59
      lab-service/lab-capital/src/main/java/org/springblade/lims/capital/excel/GoodsDetailExcel.java
  2. 66
      lab-service/lab-capital/src/main/java/org/springblade/lims/goods/controller/GoodsController.java
  3. 3
      lab-service/lab-capital/src/main/java/org/springblade/lims/goods/mapper/GoodsMapper.java
  4. 35
      lab-service/lab-capital/src/main/java/org/springblade/lims/goods/mapper/GoodsMapper.xml
  5. 11
      lab-service/lab-capital/src/main/java/org/springblade/lims/goods/service/IGoodsService.java
  6. 5
      lab-service/lab-capital/src/main/java/org/springblade/lims/goods/service/impl/GoodsServiceImpl.java
  7. 59
      lab-service/lab-lims/src/main/java/org/springblade/lims/excel/ExamineExportExcel.java

@ -0,0 +1,59 @@
package org.springblade.lims.capital.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 lombok.Data;
import java.io.Serializable;
/**
* UserExcel
*/
@Data
@ColumnWidth(25)
@HeadRowHeight(20)
@ContentRowHeight(18)
public class GoodsDetailExcel implements Serializable {
private static final long serialVersionUID = 1L;
@ColumnWidth(20)
@ExcelProperty("物品名称")
private String goodsName;
@ColumnWidth(20)
@ExcelProperty("供应商")
private String supplierName;
@ColumnWidth(20)
@ExcelProperty("物品到货率")
private String goodsRate;
@ColumnWidth(20)
@ExcelProperty("物品种类数量")
private String goodsClassNum;
@ColumnWidth(20)
@ExcelProperty("物品数量")
private String goodsNum;
@ColumnWidth(20)
@ExcelProperty("已到数量")
private String inNum;
@ColumnWidth(20)
@ExcelProperty("未到货数量")
private String notNum;
@ColumnWidth(20)
@ExcelProperty("订单状态")
private String statusText;
@ColumnWidth(25)
@ExcelProperty("创建时间")
private String createTime;
}

@ -15,6 +15,8 @@ import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.apache.commons.lang.math.RandomUtils; import org.apache.commons.lang.math.RandomUtils;
import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.excel.util.ExcelUtil;
import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.mp.base.BaseEntity;
@ -26,10 +28,7 @@ import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringUtil; import org.springblade.core.tool.utils.StringUtil;
import org.springblade.lims.capital.entity.*; import org.springblade.lims.capital.entity.*;
import org.springblade.lims.capital.excel.ApplyDetailExcel; import org.springblade.lims.capital.excel.*;
import org.springblade.lims.capital.excel.DetailExcel;
import org.springblade.lims.capital.excel.GoodsExcel;
import org.springblade.lims.capital.excel.InAndOutExcel;
import org.springblade.lims.capital.service.IGoodsCheckLogService; import org.springblade.lims.capital.service.IGoodsCheckLogService;
import org.springblade.lims.capital.service.IProductClassService; import org.springblade.lims.capital.service.IProductClassService;
import org.springblade.lims.capital.service.IProductStoreDetialService; import org.springblade.lims.capital.service.IProductStoreDetialService;
@ -62,6 +61,8 @@ import static java.util.stream.Collectors.toList;
@Api(value = "物品列表接口", tags = "物品列表接口") @Api(value = "物品列表接口", tags = "物品列表接口")
public class GoodsController extends BladeController { public class GoodsController extends BladeController {
private static Logger logger = LoggerFactory.getLogger(GoodsController.class);
private final IGoodsService goodsService; private final IGoodsService goodsService;
private final IReportService reportService; private final IReportService reportService;
@ -98,18 +99,25 @@ public class GoodsController extends BladeController {
.or().like(Goods::getYt, keyword)); .or().like(Goods::getYt, keyword));
} }
} }
// 物品厂商模糊查询
if (StringUtil.isNoneBlank(goods.getCompany())) {
queryWrapper.like(Goods::getCompany, goods.getCompany().trim());
}
// 根据物品类型大类查询 // 根据物品类型大类查询
if (goods.getBigClassId() != null) { if (goods.getBigClassId() != null) {
queryWrapper.eq(Goods::getBigClassId, goods.getBigClassId()); queryWrapper.eq(Goods::getBigClassId, goods.getBigClassId());
} }
if(StringUtils.isBlank(query.getDescs()) && StringUtils.isBlank(query.getAscs())){ if(StringUtils.isBlank(query.getDescs()) && StringUtils.isBlank(query.getAscs())){
queryWrapper.orderByDesc(Goods::getCreateTime); // 默认排序 按库存排序 时间排序
queryWrapper.orderByDesc(Goods::getNum).orderByDesc(Goods::getCreateTime);
} }
// 查看类型:1普通类 2课题类 // 查看类型:1普通类 2课题类
if (goods.getGetType() != null) { if (goods.getGetType() != null) {
queryWrapper.eq(Goods::getGetType, goods.getGetType()); queryWrapper.eq(Goods::getGetType, goods.getGetType());
} }
queryWrapper.orderByDesc(Goods::getCreateTime); // 默认排序 按库存排序 时间排序
queryWrapper.orderByDesc(Goods::getNum)
.orderByDesc(Goods::getCreateTime);
IPage<Goods> page = goodsService.page(Condition.getPage(query), queryWrapper); IPage<Goods> page = goodsService.page(Condition.getPage(query), queryWrapper);
List<Goods> goodsList = page.getRecords(); List<Goods> goodsList = page.getRecords();
for (Goods goods1 : goodsList) { for (Goods goods1 : goodsList) {
@ -121,6 +129,8 @@ public class GoodsController extends BladeController {
List<ContractDetail> contractDetail = contractDetailService.list(Wrappers.<ContractDetail>lambdaQuery().eq(ContractDetail::getGoodsId, goods1.getId()).eq(BaseEntity::getIsDeleted, 0)); List<ContractDetail> contractDetail = contractDetailService.list(Wrappers.<ContractDetail>lambdaQuery().eq(ContractDetail::getGoodsId, goods1.getId()).eq(BaseEntity::getIsDeleted, 0));
if (CollectionUtils.isNotEmpty(contractDetail)) { if (CollectionUtils.isNotEmpty(contractDetail)) {
goods1.setNotNum(contractDetail.stream().mapToInt(ContractDetail::getNotNum).sum()); goods1.setNotNum(contractDetail.stream().mapToInt(ContractDetail::getNotNum).sum());
goods1.setInNum(contractDetail.stream().mapToInt(ContractDetail::getInNum).sum());
goods1.setGoodsNum(contractDetail.stream().mapToInt(ContractDetail::getGoodsNum).sum());
} }
LambdaQueryWrapper<ProductStoreDetial> timeWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ProductStoreDetial> timeWrapper = new LambdaQueryWrapper<>();
timeWrapper.eq(ProductStoreDetial::getGoodsId, goods1.getId()) timeWrapper.eq(ProductStoreDetial::getGoodsId, goods1.getId())
@ -394,6 +404,8 @@ public class GoodsController extends BladeController {
checkLog.setCheckUserId(AuthUtil.getUserId()); checkLog.setCheckUserId(AuthUtil.getUserId());
goodsCheckLogService.save(checkLog); goodsCheckLogService.save(checkLog);
detial.setStatus(checkLog.getStatus()); detial.setStatus(checkLog.getStatus());
detial.setQualityTest(AuthUtil.getUserId());//质检人
detial.setQualityTestDate(new Date());//质检时间
productStoreDetialService.updateById(detial); productStoreDetialService.updateById(detial);
} }
@ -1008,4 +1020,46 @@ public class GoodsController extends BladeController {
return map; return map;
} }
/**
* @MethodName: exportSumGoodsList
* @Annotation: 货品清单导出统计
* @author: YangMaoFu
* @date: 2026/3/24 16:16
* @Version: 1.0
*/
@GetMapping("exportSumGoodsList")
@ApiOperationSupport(order = 9)
@ApiOperation(value = "货品清单导出统计")
public void exportSumGoodsList(
@RequestParam(required = false) String goodsName,
@RequestParam(required = false) String supplierName,
HttpServletResponse response) {
Map<String,Object> map;
try{
map = new HashMap<>();
map.put("goodsName", goodsName);
map.put("supplierName", supplierName);
List<Map<String, Object>> goods = goodsService.summaryOfGoodsList(map);
List<GoodsDetailExcel> list = goods.stream().map(m -> {
GoodsDetailExcel excel = new GoodsDetailExcel();
excel.setGoodsName((String) m.get("goodsName"));
excel.setSupplierName((String) m.get("supplierName"));
excel.setGoodsRate(m.get("goodsRate") != null ? String.valueOf(m.get("goodsRate")) : null);
excel.setGoodsClassNum(m.get("goodsClassNum") != null ? String.valueOf(m.get("goodsClassNum")) : null);
excel.setGoodsNum(m.get("goodsNum") != null ? String.valueOf(m.get("goodsNum")) : null);
excel.setInNum(m.get("inNum") != null ? String.valueOf(m.get("inNum")) : null);
excel.setNotNum(m.get("notNum") != null ? String.valueOf(m.get("notNum")) : null);
excel.setStatusText((String) m.get("statusText"));
excel.setCreateTime((String) m.get("createTime"));
return excel;
}).collect(Collectors.toList());
ExcelUtil.export(response, "货品清单统计", "货品清单", list, GoodsDetailExcel.class);
}catch (Exception e){
if (logger.isErrorEnabled()) {
logger.error("货品清单导出统计失败:{}", e.getMessage());
}
}
}
} }

@ -9,10 +9,13 @@ import org.springblade.lims.capital.vo.ProductVO;
import org.springblade.lims.goods.entity.Goods; import org.springblade.lims.goods.entity.Goods;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 物品表 Mapper 接口 * 物品表 Mapper 接口
*/ */
public interface GoodsMapper extends BaseMapper<Goods> { public interface GoodsMapper extends BaseMapper<Goods> {
IPage<Goods> listByPnum(Goods goods,IPage<Goods> page); IPage<Goods> listByPnum(Goods goods,IPage<Goods> page);
List<Map<String,Object>> summaryOfGoodsList(Map<String,Object> map);
} }

@ -43,4 +43,39 @@
ORDER BY ORDER BY
A.name,B.p_num asc A.name,B.p_num asc
</select> </select>
<select id="summaryOfGoodsList" resultType="java.util.Map" parameterType="map">
SELECT
a.goods_name AS goodsName,
a.goods_num AS goodsNum,
a.in_num AS inNum,
a.not_num AS notNum,
c.goods_class_num AS goodsClassNum,
CONCAT(ROUND(c.goods_rate, 2), '%') AS goodsRate,
CASE c.status
WHEN 0 THEN '待确定'
WHEN 1 THEN '待接收'
WHEN 2 THEN '已完成'
WHEN 4 THEN '待开票'
ELSE '未知状态'
END AS statusText,
DATE_FORMAT(c.create_time, '%Y-%m-%d %H:%i:%s') AS createTime,
c.supplier_name AS supplierName,
c.supplier_id AS supplierId
FROM
f_contract_detail a
LEFT JOIN f_contract c ON a.contract_id = c.id
WHERE 1=1
<if test="goodsName != null and goodsName !=''">
AND a.goods_name = #{goodsName}
</if>
<if test="supplierName != null and supplierName !=''">
AND c.supplier_name LIKE CONCAT('%',CONCAT(#{supplierName},'%'))
</if>
<if test="supplierId != null and supplierId !=''">
AND c.supplier_id = #{supplierId}
</if>
ORDER BY c.create_time DESC
</select>
</mapper> </mapper>

@ -10,4 +10,15 @@ import java.util.Map;
public interface IGoodsService extends BaseService<Goods> { public interface IGoodsService extends BaseService<Goods> {
IPage<Goods> listByPnum(Goods goods,IPage<Goods> page); IPage<Goods> listByPnum(Goods goods,IPage<Goods> page);
/**
* @MethodName: summaryOfGoodsList
* @Annotation: 货品清单导出统计
* @author: YangMaoFu
* @date: 2026/3/24 16:15
* @Version: 1.0
*/
List<Map<String,Object>> summaryOfGoodsList(Map<String,Object> map);
} }

@ -35,4 +35,9 @@ public class GoodsServiceImpl extends BaseServiceImpl<GoodsMapper, Goods> implem
public IPage<Goods> listByPnum(Goods goods, IPage<Goods> page) { public IPage<Goods> listByPnum(Goods goods, IPage<Goods> page) {
return goodsMapper.listByPnum(goods, page); return goodsMapper.listByPnum(goods, page);
} }
@Override
public List<Map<String, Object>> summaryOfGoodsList(Map<String, Object> map) {
return goodsMapper.summaryOfGoodsList(map);
}
} }

@ -0,0 +1,59 @@
package org.springblade.lims.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
@Data
public class ExamineExportExcel implements Serializable {
private static final long serialVersionUID = 1L;
@ColumnWidth(20)
@ExcelProperty("检测项目")
private String examineItemName;
@ColumnWidth(20)
@ExcelProperty("样品名称")
private String simpleName;
@ColumnWidth(20)
@ExcelProperty("检测编号")
private String experieNum;
@ColumnWidth(20)
@ExcelProperty("样品数量")
private String simpleCount;
@ColumnWidth(20)
@ExcelProperty("检测方法")
private String examineWayName;
@ColumnWidth(20)
@ExcelProperty("检测标准")
private String examineBasisName;
@ColumnWidth(20)
@ExcelProperty("要求完成时间")
private String demandCompletionTime;
@ColumnWidth(20)
@ExcelProperty("创建时间")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private String createTime;
@ColumnWidth(20)
@ExcelProperty("领取人")
private String examineByName;
@ColumnWidth(20)
@ExcelProperty("样品所在")
private String simpleCurrPlace;
@ColumnWidth(20)
@ExcelProperty("状态")
private String status;
}
Loading…
Cancel
Save