From 72145d1e9b6f057403f5c1c03cdb2ea20783f13b Mon Sep 17 00:00:00 2001 From: Administrator <1923636941@qq.com> Date: Tue, 25 Apr 2023 09:56:33 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=A9=E6=96=99=E7=AE=A1=E7=90=86-=E7=BC=96?= =?UTF-8?q?=E8=BE=91/=E6=96=B0=E5=A2=9E=E5=87=BA=E5=85=A5=E5=BA=93?= =?UTF-8?q?=E5=92=8C=E7=89=A9=E6=96=99=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/system/query/QueryGenerator.java | 30 +++++-- .../GtMaterialInOutWarehouseController.java | 42 ++++++---- .../gt/entity/GtMaterialInOutWarehouse.java | 13 +++ .../GtMaterialInOutWarehouseMapper.java | 12 ++- .../xml/GtMaterialInOutWarehouseMapper.xml | 9 +- .../IGtMaterialInOutWarehouseService.java | 11 ++- .../GtMaterialInOutWarehouseServiceImpl.java | 84 ++++++++++++++++++- .../com/zhgd/xmgl/util/ReflectionUtil.java | 28 +------ 8 files changed, 173 insertions(+), 56 deletions(-) diff --git a/src/main/java/com/zhgd/jeecg/common/system/query/QueryGenerator.java b/src/main/java/com/zhgd/jeecg/common/system/query/QueryGenerator.java index 4496acc5a..1aba3b7ab 100644 --- a/src/main/java/com/zhgd/jeecg/common/system/query/QueryGenerator.java +++ b/src/main/java/com/zhgd/jeecg/common/system/query/QueryGenerator.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zhgd.jeecg.common.util.oConvertUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.beanutils.PropertyUtils; +import org.apache.commons.lang.StringUtils; import java.beans.PropertyDescriptor; import java.io.UnsupportedEncodingException; @@ -16,6 +17,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Slf4j public class QueryGenerator { @@ -76,7 +78,11 @@ public class QueryGenerator { * @return */ public static QueryWrapper initQueryWrapper(T searchObj, Map parameterMap, List excludeFields) { - return initQueryWrapper(searchObj, parameterMap, excludeFields, null); + return initQueryWrapper(searchObj, parameterMap, excludeFields, null, false); + } + + public static QueryWrapper initQueryWrapper(T searchObj, Map parameterMap, List excludeFields, List likeFields) { + return initQueryWrapper(searchObj, parameterMap, excludeFields, null, false); } /** @@ -86,12 +92,13 @@ public class QueryGenerator { * @param parameterMap * @param excludeFields 排除属性(eg:ReflectionUtil.getFieldNameList) * @param likeFields like属性 + * @param enableAlias 开启likeFields的别名 * @return */ - public static QueryWrapper initQueryWrapper(T searchObj, Map parameterMap, List excludeFields, List likeFields) { + public static QueryWrapper initQueryWrapper(T searchObj, Map parameterMap, List excludeFields, List likeFields, boolean enableAlias) { long start = System.currentTimeMillis(); QueryWrapper queryWrapper = new QueryWrapper(); - installMplus(queryWrapper, searchObj, parameterMap, excludeFields, likeFields); + installMplus(queryWrapper, searchObj, parameterMap, excludeFields, likeFields, enableAlias); log.info("---查询条件构造器初始化完成,耗时:" + (System.currentTimeMillis() - start) + "毫秒----"); return queryWrapper; } @@ -105,10 +112,10 @@ public class QueryGenerator { * @param excludeFields 排除属性 */ public static void installMplus(QueryWrapper queryWrapper, Object searchObj, Map parameterMap, List excludeFields) { - installMplus(queryWrapper, searchObj, parameterMap, excludeFields, null); + installMplus(queryWrapper, searchObj, parameterMap, excludeFields, null, false); } - public static void installMplus(QueryWrapper queryWrapper, Object searchObj, Map parameterMap, List excludeFields, List likeFields) { + public static void installMplus(QueryWrapper queryWrapper, Object searchObj, Map parameterMap, List excludeFields, List likeFields, boolean enableAlias) { /* * 注意:权限查询由前端配置数据规则 当一个人有多个所属部门时候 可以在规则配置包含条件 orgCode 包含 #{sys_org_code} @@ -119,6 +126,14 @@ public class QueryGenerator { //区间条件组装 模糊查询 高级查询组装 简单排序 权限查询 PropertyDescriptor origDescriptors[] = PropertyUtils.getPropertyDescriptors(searchObj); + Map fieldNameAndAliasMap = null; + if (likeFields != null) { + if (enableAlias) { + fieldNameAndAliasMap = likeFields.stream().collect(Collectors.toMap(s -> StringUtils.substringAfter(s, "."), s -> StringUtils.substringBefore(s, "."))); + } else { + fieldNameAndAliasMap = likeFields.stream().collect(Collectors.toMap(s -> s, s -> s)); + } + } String name, type; for (int i = 0; i < origDescriptors.length; i++) { @@ -131,9 +146,9 @@ public class QueryGenerator { } //模糊查询 - if (likeFields != null && likeFields.contains(name)) { + if (fieldNameAndAliasMap != null && fieldNameAndAliasMap.get(name) != null) { Object v = PropertyUtils.getSimpleProperty(searchObj, name); - queryWrapper.like(v != null, StrUtil.toUnderlineCase(name), v); + queryWrapper.like(v != null, enableAlias ? fieldNameAndAliasMap.get(name) + "." + StrUtil.toUnderlineCase(name) : StrUtil.toUnderlineCase(name), v); continue; } @@ -443,5 +458,4 @@ public class QueryGenerator { || "sort".equals(name) || "order".equals(name); } - } diff --git a/src/main/java/com/zhgd/xmgl/modules/gt/controller/GtMaterialInOutWarehouseController.java b/src/main/java/com/zhgd/xmgl/modules/gt/controller/GtMaterialInOutWarehouseController.java index c2f440088..ea1f29317 100644 --- a/src/main/java/com/zhgd/xmgl/modules/gt/controller/GtMaterialInOutWarehouseController.java +++ b/src/main/java/com/zhgd/xmgl/modules/gt/controller/GtMaterialInOutWarehouseController.java @@ -4,18 +4,15 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.jeecg.common.system.query.QueryGenerator; import com.zhgd.jeecg.common.util.oConvertUtils; import com.zhgd.xmgl.modules.gt.entity.GtMaterialInOutWarehouse; import com.zhgd.xmgl.modules.gt.service.IGtMaterialInOutWarehouseService; -import com.zhgd.xmgl.util.ReflectionUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; @@ -67,20 +64,7 @@ public class GtMaterialInOutWarehouseController { @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { - Result> result = new Result>(); - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(gtMaterialInOutWarehouse, req.getParameterMap() - , null, ReflectionUtil.getFieldNameList(GtMaterialInOutWarehouse::getNumber, GtMaterialInOutWarehouse::getCategory, GtMaterialInOutWarehouse::getVendor, - GtMaterialInOutWarehouse::getLotNumber, GtMaterialInOutWarehouse::getWarehouse, GtMaterialInOutWarehouse::getDepartment, GtMaterialInOutWarehouse::getHandler - , GtMaterialInOutWarehouse::getCustomer)); - queryWrapper.lambda() - .ge(gtMaterialInOutWarehouse.getCreateTime() != null, GtMaterialInOutWarehouse::getUpdateTime, gtMaterialInOutWarehouse.getCreateTime()) - .le(gtMaterialInOutWarehouse.getEndTime() != null, GtMaterialInOutWarehouse::getUpdateTime, gtMaterialInOutWarehouse.getEndTime()) - .orderByDesc(GtMaterialInOutWarehouse::getId); - Page page = new Page(pageNo, pageSize); - IPage pageList = gtMaterialInOutWarehouseService.page(page, queryWrapper); - result.setSuccess(true); - result.setResult(pageList); - return result; + return gtMaterialInOutWarehouseService.queryPageList(gtMaterialInOutWarehouse, pageNo, pageSize, req); } /** @@ -143,6 +127,30 @@ public class GtMaterialInOutWarehouseController { return result; } + /** + * 添加出入库和物料信息 + * + * @param gtMaterialInOutWarehouse + * @return + */ + @ApiOperation(value = " 添加出入库和物料信息", notes = "添加出入库和物料信息", httpMethod = "POST") + @PostMapping(value = "/addWithMaterial") + public Result addWithMaterial(@RequestBody GtMaterialInOutWarehouse gtMaterialInOutWarehouse) { + return gtMaterialInOutWarehouseService.addWithMaterial(gtMaterialInOutWarehouse); + } + + /** + * 编辑出入库和物料信息 + * + * @param gtMaterialInOutWarehouse + * @return + */ + @ApiOperation(value = " 编辑出入库和物料信息", notes = "编辑出入库和物料信息", httpMethod = "POST") + @PostMapping(value = "/editWithMaterial") + public Result editWithMaterial(@RequestBody GtMaterialInOutWarehouse gtMaterialInOutWarehouse) { + return gtMaterialInOutWarehouseService.editWithMaterial(gtMaterialInOutWarehouse); + } + /** * 通过id删除 * diff --git a/src/main/java/com/zhgd/xmgl/modules/gt/entity/GtMaterialInOutWarehouse.java b/src/main/java/com/zhgd/xmgl/modules/gt/entity/GtMaterialInOutWarehouse.java index 841a3c03e..6c7a992a4 100644 --- a/src/main/java/com/zhgd/xmgl/modules/gt/entity/GtMaterialInOutWarehouse.java +++ b/src/main/java/com/zhgd/xmgl/modules/gt/entity/GtMaterialInOutWarehouse.java @@ -2,6 +2,8 @@ package com.zhgd.xmgl.modules.gt.entity; import java.io.Serializable; import java.util.Date; +import java.util.List; + import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -108,10 +110,21 @@ public class GtMaterialInOutWarehouse implements Serializable { @TableField(exist = false) @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty(value = "开始时间") private Date startTime; @TableField(exist = false) @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty(value = "结束时间") private Date endTime; + @ApiModelProperty(value = "助查码") + @TableField(exist = false) + private java.lang.String lookupCode; + @ApiModelProperty(value = "货号") + @TableField(exist = false) + private java.lang.String stuffNumber; + @TableField(exist = false) + @ApiModelProperty(value = "物料列表") + private List materialList; } diff --git a/src/main/java/com/zhgd/xmgl/modules/gt/mapper/GtMaterialInOutWarehouseMapper.java b/src/main/java/com/zhgd/xmgl/modules/gt/mapper/GtMaterialInOutWarehouseMapper.java index b7181dbf7..2e128fa0c 100644 --- a/src/main/java/com/zhgd/xmgl/modules/gt/mapper/GtMaterialInOutWarehouseMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/gt/mapper/GtMaterialInOutWarehouseMapper.java @@ -1,16 +1,22 @@ package com.zhgd.xmgl.modules.gt.mapper; -import org.apache.ibatis.annotations.Mapper; -import com.zhgd.xmgl.modules.gt.entity.GtMaterialInOutWarehouse; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.zhgd.xmgl.modules.gt.entity.GtMaterialInOutWarehouse; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * @Description: 出入库 * @author: pds - * @date: 2023-04-18 + * @date: 2023-04-18 * @version: V1.0 */ @Mapper public interface GtMaterialInOutWarehouseMapper extends BaseMapper { + IPage queryPageList(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); } diff --git a/src/main/java/com/zhgd/xmgl/modules/gt/mapper/xml/GtMaterialInOutWarehouseMapper.xml b/src/main/java/com/zhgd/xmgl/modules/gt/mapper/xml/GtMaterialInOutWarehouseMapper.xml index fccc3cecf..95b02d080 100644 --- a/src/main/java/com/zhgd/xmgl/modules/gt/mapper/xml/GtMaterialInOutWarehouseMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/gt/mapper/xml/GtMaterialInOutWarehouseMapper.xml @@ -1,5 +1,12 @@ - + diff --git a/src/main/java/com/zhgd/xmgl/modules/gt/service/IGtMaterialInOutWarehouseService.java b/src/main/java/com/zhgd/xmgl/modules/gt/service/IGtMaterialInOutWarehouseService.java index ec6c95c35..898b11987 100644 --- a/src/main/java/com/zhgd/xmgl/modules/gt/service/IGtMaterialInOutWarehouseService.java +++ b/src/main/java/com/zhgd/xmgl/modules/gt/service/IGtMaterialInOutWarehouseService.java @@ -1,14 +1,23 @@ package com.zhgd.xmgl.modules.gt.service; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.xmgl.modules.gt.entity.GtMaterialInOutWarehouse; import com.baomidou.mybatisplus.extension.service.IService; +import javax.servlet.http.HttpServletRequest; + /** * @Description: 出入库 * @author: pds - * @date: 2023-04-18 + * @date: 2023-04-18 * @version: V1.0 */ public interface IGtMaterialInOutWarehouseService extends IService { + Result> queryPageList(GtMaterialInOutWarehouse gtMaterialInOutWarehouse, Integer pageNo, Integer pageSize, HttpServletRequest req); + + Result addWithMaterial(GtMaterialInOutWarehouse gtMaterialInOutWarehouse); + + Result editWithMaterial(GtMaterialInOutWarehouse gtMaterialInOutWarehouse); } diff --git a/src/main/java/com/zhgd/xmgl/modules/gt/service/impl/GtMaterialInOutWarehouseServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/gt/service/impl/GtMaterialInOutWarehouseServiceImpl.java index 8c156554a..16e45088f 100644 --- a/src/main/java/com/zhgd/xmgl/modules/gt/service/impl/GtMaterialInOutWarehouseServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/gt/service/impl/GtMaterialInOutWarehouseServiceImpl.java @@ -1,19 +1,99 @@ package com.zhgd.xmgl.modules.gt.service.impl; +import cn.hutool.core.collection.CollUtil; +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.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zhgd.jeecg.common.api.vo.Result; +import com.zhgd.jeecg.common.system.query.QueryGenerator; import com.zhgd.xmgl.modules.gt.entity.GtMaterialInOutWarehouse; +import com.zhgd.xmgl.modules.gt.entity.GtMaterialPointCheckIntoWarehouseDetail; import com.zhgd.xmgl.modules.gt.mapper.GtMaterialInOutWarehouseMapper; import com.zhgd.xmgl.modules.gt.service.IGtMaterialInOutWarehouseService; +import com.zhgd.xmgl.modules.gt.service.IGtMaterialPointCheckIntoWarehouseDetailService; +import com.zhgd.xmgl.util.ReflectionUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import javax.servlet.http.HttpServletRequest; +import java.util.List; /** * @Description: 出入库 * @author: pds - * @date: 2023-04-18 + * @date: 2023-04-18 * @version: V1.0 */ @Service +@Slf4j +@Transactional(rollbackFor = Exception.class) public class GtMaterialInOutWarehouseServiceImpl extends ServiceImpl implements IGtMaterialInOutWarehouseService { + @Autowired + IGtMaterialPointCheckIntoWarehouseDetailService materialPointCheckIntoWarehouseDetailService; + @Autowired + GtMaterialInOutWarehouseMapper gtMaterialInOutWarehouseMapper; + @Override + public Result> queryPageList(GtMaterialInOutWarehouse gtMaterialInOutWarehouse, Integer pageNo, Integer pageSize, HttpServletRequest req) { + Result> result = new Result>(); + List fieldNameList = ReflectionUtil.getFieldNameList("io", GtMaterialInOutWarehouse::getNumber, GtMaterialInOutWarehouse::getCategory, GtMaterialInOutWarehouse::getVendor, + GtMaterialInOutWarehouse::getLotNumber, GtMaterialInOutWarehouse::getWarehouse, GtMaterialInOutWarehouse::getDepartment, GtMaterialInOutWarehouse::getHandler + , GtMaterialInOutWarehouse::getCustomer); + fieldNameList.addAll(ReflectionUtil.getFieldNameList("d", GtMaterialInOutWarehouse::getLookupCode, GtMaterialInOutWarehouse::getStuffNumber)); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(gtMaterialInOutWarehouse, req.getParameterMap() + , null, fieldNameList, true); + + queryWrapper.lambda() + .ge(gtMaterialInOutWarehouse.getStartTime() != null, GtMaterialInOutWarehouse::getUpdateTime, gtMaterialInOutWarehouse.getStartTime()) + .le(gtMaterialInOutWarehouse.getEndTime() != null, GtMaterialInOutWarehouse::getUpdateTime, gtMaterialInOutWarehouse.getEndTime()) + .orderByDesc(GtMaterialInOutWarehouse::getId); + Page page = new Page(pageNo, pageSize); + IPage pageList = gtMaterialInOutWarehouseMapper.queryPageList(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + @Override + public Result addWithMaterial(GtMaterialInOutWarehouse gtMaterialInOutWarehouse) { + Result result = new Result(); + try { + save(gtMaterialInOutWarehouse); + List materialList = gtMaterialInOutWarehouse.getMaterialList(); + materialList.stream().forEach(o -> o.setGtMaterialInOutWarehouseId(gtMaterialInOutWarehouse.getId())); + if (CollUtil.isNotEmpty(materialList)) { + materialPointCheckIntoWarehouseDetailService.saveBatch(materialList); + } + result.success("添加成功!"); + } catch (Exception e) { + e.printStackTrace(); + log.info(e.getMessage()); + result.error500("操作失败"); + } + return result; + } + + @Override + public Result editWithMaterial(GtMaterialInOutWarehouse gtMaterialInOutWarehouse) { + Result result = new Result(); + GtMaterialInOutWarehouse gtMaterialInOutWarehouseEntity = getById(gtMaterialInOutWarehouse.getId()); + if (gtMaterialInOutWarehouseEntity == null) { + result.error500("未找到对应实体"); + } else { + updateById(gtMaterialInOutWarehouse); + materialPointCheckIntoWarehouseDetailService.remove(new LambdaQueryWrapper() + .eq(GtMaterialPointCheckIntoWarehouseDetail::getGtMaterialInOutWarehouseId, gtMaterialInOutWarehouse.getId())); + List materialList = gtMaterialInOutWarehouse.getMaterialList(); + if (CollUtil.isNotEmpty(materialList)) { + materialPointCheckIntoWarehouseDetailService.saveBatch(materialList); + } + result.success("修改成功!"); + } + + return result; + } } diff --git a/src/main/java/com/zhgd/xmgl/util/ReflectionUtil.java b/src/main/java/com/zhgd/xmgl/util/ReflectionUtil.java index 28d220ba3..ba002b9e5 100644 --- a/src/main/java/com/zhgd/xmgl/util/ReflectionUtil.java +++ b/src/main/java/com/zhgd/xmgl/util/ReflectionUtil.java @@ -1,11 +1,6 @@ package com.zhgd.xmgl.util; import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.extension.api.R; -import lombok.Builder; -import lombok.Data; -import org.apache.commons.collections.CollectionUtils; -import org.apache.poi.ss.formula.functions.T; import org.springframework.util.ClassUtils; import org.springframework.util.ReflectionUtils; @@ -13,7 +8,6 @@ import java.beans.Introspector; import java.lang.invoke.SerializedLambda; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -23,30 +17,16 @@ import java.util.stream.Collectors; /** * 方法引用获取属性名工具类 */ -@Data -@Builder public class ReflectionUtil { - private String alias; - private List> functions; private static Map, Field> cache = new ConcurrentHashMap<>(); - public static List getFieldNameList(SerializableFunction... functions) { - return Arrays.stream(functions).map(ReflectionUtil::getFieldName).collect(Collectors.toList()); + public static List getFieldNameList(String alias, SerializableFunction... functions) { + return Arrays.stream(functions).map(function -> alias + "." + getFieldName(function)).collect(Collectors.toList()); } - public static List getFieldNameListWithAlias(List list) { - if (CollectionUtils.isEmpty(list)) { - return null; - } - ArrayList l = new ArrayList<>(); - for (ReflectionUtil reflectionUtil : list) { - for (SerializableFunction function : reflectionUtil.getFunctions()) { - String fieldName = getFieldName(function); - l.add(reflectionUtil.getAlias() + "." + fieldName); - } - } - return l; + public static List getFieldNameList(SerializableFunction... functions) { + return Arrays.stream(functions).map(ReflectionUtil::getFieldName).collect(Collectors.toList()); } public static String getFieldNameToUlc(SerializableFunction function) {