From e811bb95ece59c05662ec11223597da43d2992b7 Mon Sep 17 00:00:00 2001 From: renfan <2206580733@qq.com> Date: Thu, 8 Aug 2024 21:13:14 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90admin=E3=80=91=E6=96=B0=E5=A2=9E#?= =?UTF-8?q?=E5=A4=87=E4=BB=B6=E9=87=87=E8=B4=AD=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../setting/DictTypeController.java | 14 + .../sparePartPurchaseController.java | 98 +++++ .../impl/SparePartReceiveServiceImpl.java | 27 +- .../setting/ISettingDictTypeService.java | 9 + .../impl/SettingDictDataServiceImpl.java | 4 +- .../impl/SettingDictTypeServiceImpl.java | 63 +++ .../ISparePartPurchaseService.java | 59 +++ .../impl/SparePartPurchaseServiceImpl.java | 394 ++++++++++++++++++ .../SparePartAudit/SparePartAuditParam.java | 5 +- .../SparePartAudit/SparePartAuditListVo.java | 7 +- .../com/hcy/admin/vo/setting/DictTypeVo.java | 3 +- .../admin/vo/sparePart/SparePartDetailVo.java | 2 +- .../admin/vo/sparePart/SparePartListVo.java | 2 +- .../SparePartPurchaseListVo.java | 48 +++ .../SparePartReceiveListVo.java | 4 +- .../entity/SparePartAudit/SparePartAudit.java | 2 +- 16 files changed, 721 insertions(+), 20 deletions(-) create mode 100644 admin/src/main/java/com/hcy/admin/controller/sparePartPurchase/sparePartPurchaseController.java create mode 100644 admin/src/main/java/com/hcy/admin/service/sparePartPurchase/ISparePartPurchaseService.java create mode 100644 admin/src/main/java/com/hcy/admin/service/sparePartPurchase/impl/SparePartPurchaseServiceImpl.java create mode 100644 admin/src/main/java/com/hcy/admin/vo/sparePartPurchase/SparePartPurchaseListVo.java diff --git a/admin/src/main/java/com/hcy/admin/controller/setting/DictTypeController.java b/admin/src/main/java/com/hcy/admin/controller/setting/DictTypeController.java index 96c42cf..da55a73 100644 --- a/admin/src/main/java/com/hcy/admin/controller/setting/DictTypeController.java +++ b/admin/src/main/java/com/hcy/admin/controller/setting/DictTypeController.java @@ -103,4 +103,18 @@ public class DictTypeController { return AjaxResult.success(); } + /** + * 返回所有的字典和字典下的所有数据项 + * + * @author fzr + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return Object + */ + @GetMapping("/allDataList") + public Object allDataList(@Validated PageParam pageParam, + @RequestParam Map params) { + PageResult list = iSettingDictTypeService.allDataList(pageParam, params); + return AjaxResult.success(list); + } } diff --git a/admin/src/main/java/com/hcy/admin/controller/sparePartPurchase/sparePartPurchaseController.java b/admin/src/main/java/com/hcy/admin/controller/sparePartPurchase/sparePartPurchaseController.java new file mode 100644 index 0000000..3c33553 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/controller/sparePartPurchase/sparePartPurchaseController.java @@ -0,0 +1,98 @@ +package com.hcy.admin.controller.sparePartPurchase; + +import com.hcy.admin.config.aop.Log; +import com.hcy.admin.service.SparePartReceive.ISparePartReceiveService; +import com.hcy.admin.service.sparePartPurchase.ISparePartPurchaseService; +import com.hcy.admin.validate.common.PageParam; +import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam; +import com.hcy.admin.vo.sparePartPurchase.SparePartPurchaseListVo; +import com.hcy.admin.vo.sparePartReceive.SparePartReceiveListVo; +import com.hcy.common.core.AjaxResult; +import com.hcy.common.core.PageResult; +import com.hcy.common.validator.annotation.IDMust; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.Map; + +/** + * 备件采购管理 + */ +@RestController +@RequestMapping("api/sparePartPurchase") +public class sparePartPurchaseController { + + @Resource + ISparePartPurchaseService iSparePartPurchaseService; + + /** + * 备件采购列表 + * + * @author hcy + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return Object + */ + @GetMapping("/list") + public Object list(@Validated PageParam pageParam, + @RequestParam Map params) { + PageResult list = iSparePartPurchaseService.list(pageParam, params); + return AjaxResult.success(list); + } + /** + * 备件采购详情 + * + * @author hcy + * @param id 主键ID + * @return Object + */ + @GetMapping("/detail") + public Object detail(@Validated @IDMust() @RequestParam("id") Integer id) { + SparePartPurchaseListVo detail = iSparePartPurchaseService.detail(id); + return AjaxResult.success(detail); + } + + /** + * 备件采购新增 + * + * @author hcy + * @param sparePartStockAuditParam 参数 + * @return Object + */ + @Log(title = "备件采购新增") + @PostMapping("/add") + public Object add(@Validated(value = SparePartStockAuditParam.create.class) @RequestBody SparePartStockAuditParam sparePartStockAuditParam) { + iSparePartPurchaseService.add(sparePartStockAuditParam); + return AjaxResult.success(); + } + + /** + * 备件采购编辑 + * + * @author hcy + * @param sparePartStockAuditParam 参数 + * @return Object + */ + @Log(title = "备件采购编辑") + @PostMapping("/edit") + public Object edit(@Validated(value = SparePartStockAuditParam.update.class) @RequestBody SparePartStockAuditParam sparePartStockAuditParam) { + iSparePartPurchaseService.edit(sparePartStockAuditParam); + return AjaxResult.success(); + } + + /** + * 备件采购删除 + * + * @author hcy + * @param sparePartStockAuditParam 参数 + * @return Object + */ + @Log(title = "备件采购删除") + @PostMapping("/del") + public Object del(@Validated(value = SparePartStockAuditParam.delete.class) @RequestBody SparePartStockAuditParam sparePartStockAuditParam) { + iSparePartPurchaseService.del(Math.toIntExact(sparePartStockAuditParam.getId())); + return AjaxResult.success(); + } + +} diff --git a/admin/src/main/java/com/hcy/admin/service/SparePartReceive/impl/SparePartReceiveServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/SparePartReceive/impl/SparePartReceiveServiceImpl.java index 9045f8f..216b45a 100644 --- a/admin/src/main/java/com/hcy/admin/service/SparePartReceive/impl/SparePartReceiveServiceImpl.java +++ b/admin/src/main/java/com/hcy/admin/service/SparePartReceive/impl/SparePartReceiveServiceImpl.java @@ -8,6 +8,7 @@ import com.hcy.admin.service.SparePartReceive.ISparePartReceiveService; import com.hcy.admin.service.sparePartOutWarehouse.ISparePartOutWarehouseService; import com.hcy.admin.validate.common.PageParam; import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam; +import com.hcy.admin.vo.SparePartAudit.SparePartAuditListVo; import com.hcy.admin.vo.SparePartOutWarehouseListVo.SparePartOutWarehouseListVo; import com.hcy.admin.vo.sparePartReceive.SparePartReceiveListVo; import com.hcy.common.core.PageResult; @@ -80,7 +81,11 @@ public class SparePartReceiveServiceImpl implements ISparePartReceiveService { vo.setCreateTime(TimeUtil.timestampToDate(item.getCreateTime())); vo.setUpdateTime(TimeUtil.timestampToDate(item.getUpdateTime())); vo.setHandlingTime(TimeUtil.timestampToDate(item.getHandlingTime())); //经办时间 - vo.setRecipientAndPhone(item.getRecipient() + "/" + item.getRecipientPhone()); //领料员工/联系电话 + if(item.getRecipient() != null && item.getRecipientPhone() != null){ + vo.setRecipientAndPhone(item.getRecipient() + "/" + item.getRecipientPhone()); //领料员工/联系电话 + }else{ + vo.setRecipientAndPhone("--"); + } int number = 0; //领用数量 //获取待审核备件信息 List stockAuditId = sparePartAuditMapper.selectList( @@ -89,7 +94,7 @@ public class SparePartReceiveServiceImpl implements ISparePartReceiveService { .eq("is_delete", 0) ); //获取备件信息 - List listVo = new ArrayList<>(); + List listVo = new ArrayList<>(); for (SparePartAudit sparePartAudit : stockAuditId) { SparePart sparePart = sparePartMapper.selectOne( new QueryWrapper() @@ -97,7 +102,7 @@ public class SparePartReceiveServiceImpl implements ISparePartReceiveService { .eq("is_delete", 0) .last("limit 1")); - SparePartAudit sparePartAudit1 = new SparePartAudit(); + SparePartAuditListVo sparePartAudit1 = new SparePartAuditListVo(); BeanUtils.copyProperties(sparePart, sparePartAudit1); sparePartAudit1.setId(sparePartAudit.getId()); sparePartAudit1.setSparePartsId(sparePart.getId()); @@ -143,7 +148,7 @@ public class SparePartReceiveServiceImpl implements ISparePartReceiveService { .eq("is_delete", 0) ); //获取备件信息 - List listVo = new ArrayList<>(); + List listVo = new ArrayList<>(); for (SparePartAudit sparePartAudit : stockAuditId) { SparePart sparePart = sparePartMapper.selectOne( new QueryWrapper() @@ -151,12 +156,20 @@ public class SparePartReceiveServiceImpl implements ISparePartReceiveService { .eq("is_delete", 0) .last("limit 1")); - SparePartAudit sparePartAudit1 = new SparePartAudit(); + SparePartAuditListVo sparePartAudit1 = new SparePartAuditListVo(); BeanUtils.copyProperties(sparePart, sparePartAudit1); sparePartAudit1.setId(sparePartAudit.getId()); - sparePartAudit1.setSparePartsId(sparePart.getId()); - sparePartAudit1.setStockAuditId(sparePartAudit.getStockAuditId()); + sparePartAudit1.setSparePartsId(sparePart.getId()); // 备件id + sparePartAudit1.setStockAuditId(sparePartAudit.getStockAuditId()); // 出入库审核id + sparePartAudit1.setUnit(sparePart.getUnit()); //单位 sparePartAudit1.setCount(sparePartAudit.getCount()); // 出库数量 + sparePartAudit1.setQuantity(sparePart.getQuantity()); //库存数量 + Warehouse warehouse = warehouseMapper.selectOne( + new QueryWrapper() + .eq("id", sparePart.getWarehouseId()) + .eq("is_delete", 0) + .last("limit 1")); + sparePartAudit1.setWarehouseName(warehouse.getWarehouseName()); listVo.add(sparePartAudit1); } vo.setSparePartAuditList(listVo); diff --git a/admin/src/main/java/com/hcy/admin/service/setting/ISettingDictTypeService.java b/admin/src/main/java/com/hcy/admin/service/setting/ISettingDictTypeService.java index 8bf7c61..4b62819 100644 --- a/admin/src/main/java/com/hcy/admin/service/setting/ISettingDictTypeService.java +++ b/admin/src/main/java/com/hcy/admin/service/setting/ISettingDictTypeService.java @@ -64,4 +64,13 @@ public interface ISettingDictTypeService { */ void del(List ids); + /** + * 返回所有的字典和字典下的所有数据项 + * + * @author fzr + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return PageResult + */ + PageResult allDataList(PageParam pageParam, Map params); } diff --git a/admin/src/main/java/com/hcy/admin/service/setting/impl/SettingDictDataServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/setting/impl/SettingDictDataServiceImpl.java index 51e7a8f..63a63bb 100644 --- a/admin/src/main/java/com/hcy/admin/service/setting/impl/SettingDictDataServiceImpl.java +++ b/admin/src/main/java/com/hcy/admin/service/setting/impl/SettingDictDataServiceImpl.java @@ -53,7 +53,7 @@ public class SettingDictDataServiceImpl implements ISettingDictDataService { queryWrapper.select("id,type_id,name,value,remark,sort,status,create_time,update_time"); queryWrapper.eq("is_delete", 0); queryWrapper.eq("type_id", dictType.getId()); - queryWrapper.orderByDesc("id"); + queryWrapper.orderByDesc("sort"); dictDataMapper.setSearch(queryWrapper, params, new String[]{ "like:name:str", @@ -100,7 +100,7 @@ public class SettingDictDataServiceImpl implements ISettingDictDataService { queryWrapper.select("id,type_id,name,value,remark,sort,status,create_time,update_time"); queryWrapper.eq("type_id", dictType.getId()); queryWrapper.eq("is_delete", 0); - queryWrapper.orderByDesc("id"); + queryWrapper.orderByDesc("sort"); dictDataMapper.setSearch(queryWrapper, params, new String[]{ "like:name:str", diff --git a/admin/src/main/java/com/hcy/admin/service/setting/impl/SettingDictTypeServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/setting/impl/SettingDictTypeServiceImpl.java index a56a9a1..853c797 100644 --- a/admin/src/main/java/com/hcy/admin/service/setting/impl/SettingDictTypeServiceImpl.java +++ b/admin/src/main/java/com/hcy/admin/service/setting/impl/SettingDictTypeServiceImpl.java @@ -7,15 +7,22 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.hcy.admin.service.setting.ISettingDictTypeService; import com.hcy.admin.validate.common.PageParam; import com.hcy.admin.validate.setting.DictTypeParam; +import com.hcy.admin.vo.SparePartAudit.SparePartAuditListVo; +import com.hcy.admin.vo.setting.DictDataVo; import com.hcy.admin.vo.setting.DictTypeVo; import com.hcy.common.core.PageResult; +import com.hcy.common.entity.SparePartAudit.SparePartAudit; +import com.hcy.common.entity.setting.DictData; import com.hcy.common.entity.setting.DictType; +import com.hcy.common.entity.sparePart.SparePart; +import com.hcy.common.mapper.setting.DictDataMapper; import com.hcy.common.mapper.setting.DictTypeMapper; import com.hcy.common.utils.TimeUtil; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -29,6 +36,9 @@ public class SettingDictTypeServiceImpl implements ISettingDictTypeService { @Resource DictTypeMapper dictTypeMapper; + @Resource + DictDataMapper dictDataMapper; + /** * 字典类型所有 * @@ -202,4 +212,57 @@ public class SettingDictTypeServiceImpl implements ISettingDictTypeService { } } + /** + * 返回所有的字典和字典下的所有数据项 + * + * @author fzr + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return PageResult + */ + @Override + public PageResult allDataList(PageParam pageParam, Map params) { + Integer page = pageParam.getPageNo(); + Integer limit = pageParam.getPageSize(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.select("id,dict_name,dict_type,dict_remark,dict_status,create_time,update_time"); + queryWrapper.eq("is_delete", 0); + queryWrapper.orderByDesc("id"); + + dictTypeMapper.setSearch(queryWrapper, params, new String[]{ + "like:dictName@dict_name:str", + "like:dictType@dict_type:str", + "=:dictStatus@dict_status:int", + }); + + IPage iPage = dictTypeMapper.selectPage(new Page<>(page, limit), queryWrapper); + + List list = new LinkedList<>(); + for (DictType dictType : iPage.getRecords()) { + DictTypeVo vo = new DictTypeVo(); + BeanUtils.copyProperties(dictType, vo); + + vo.setCreateTime(TimeUtil.timestampToDate(dictType.getCreateTime())); + vo.setUpdateTime(TimeUtil.timestampToDate(dictType.getUpdateTime())); + + //获取字典数据 + List dictDataList = dictDataMapper.selectList( + new QueryWrapper() + .eq("type_id", dictType.getId()) + .eq("is_delete", 0) + ); + //获取字典数据 + List listVo = new ArrayList<>(); + for (DictData dictData : dictDataList) { + DictDataVo dictDataVo = new DictDataVo(); + BeanUtils.copyProperties(dictData, dictDataVo); + listVo.add(dictDataVo); + } + vo.setDictDataVoList(listVo); + list.add(vo); + } + + return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list); + } } diff --git a/admin/src/main/java/com/hcy/admin/service/sparePartPurchase/ISparePartPurchaseService.java b/admin/src/main/java/com/hcy/admin/service/sparePartPurchase/ISparePartPurchaseService.java new file mode 100644 index 0000000..480ee99 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/service/sparePartPurchase/ISparePartPurchaseService.java @@ -0,0 +1,59 @@ +package com.hcy.admin.service.sparePartPurchase; + +import com.hcy.admin.validate.common.PageParam; +import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam; +import com.hcy.admin.vo.sparePartPurchase.SparePartPurchaseListVo; +import com.hcy.admin.vo.sparePartReceive.SparePartReceiveListVo; +import com.hcy.common.core.PageResult; + +import java.util.Map; + +/** + * 备件采购服务接口类 + */ +public interface ISparePartPurchaseService { + + /** + * 备件采购列表 + * + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return PageResult + * @author hcy + */ + PageResult list(PageParam pageParam, Map params); + + /** + * 备件采购详情 + * + * @author hcy + * @param id 主键ID + * @return SparePartPurchaseListVo + */ + SparePartPurchaseListVo detail(Integer id); + + /** + * 备件采购新增 + * + * @author hcy + * @param sparePartStockAuditParam 参数 + */ + void add(SparePartStockAuditParam sparePartStockAuditParam); + + /** + * 备件采购编辑 + * + * @author hcy + * @param sparePartStockAuditParam 参数 + */ + void edit(SparePartStockAuditParam sparePartStockAuditParam); + + /** + * 备件采购删除 + * + * @author hcy + * @param id 主键ID + */ + void del(Integer id); + +} diff --git a/admin/src/main/java/com/hcy/admin/service/sparePartPurchase/impl/SparePartPurchaseServiceImpl.java b/admin/src/main/java/com/hcy/admin/service/sparePartPurchase/impl/SparePartPurchaseServiceImpl.java new file mode 100644 index 0000000..dfd44df --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/service/sparePartPurchase/impl/SparePartPurchaseServiceImpl.java @@ -0,0 +1,394 @@ +package com.hcy.admin.service.sparePartPurchase.impl; + +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.hcy.admin.AdminThreadLocal; +import com.hcy.admin.service.sparePartPurchase.ISparePartPurchaseService; +import com.hcy.admin.validate.common.PageParam; +import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam; +import com.hcy.admin.vo.SparePartAudit.SparePartAuditListVo; +import com.hcy.admin.vo.sparePartPurchase.SparePartPurchaseListVo; +import com.hcy.admin.vo.sparePartReceive.SparePartReceiveListVo; +import com.hcy.common.core.PageResult; +import com.hcy.common.entity.SparePartAudit.SparePartAudit; +import com.hcy.common.entity.sparePart.SparePart; +import com.hcy.common.entity.sparePartStockAudit.SparePartStockAudit; +import com.hcy.common.entity.warehouse.Warehouse; +import com.hcy.common.enums.Audit.AuditStateEnum; +import com.hcy.common.mapper.SparePartAudit.SparePartAuditMapper; +import com.hcy.common.mapper.sparePart.SparePartMapper; +import com.hcy.common.mapper.sparePartStockAudit.SparePartStockAuditMapper; +import com.hcy.common.mapper.warehouse.WarehouseMapper; +import com.hcy.common.utils.TimeUtil; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * 备件采购实现类 + */ +@Service +public class SparePartPurchaseServiceImpl implements ISparePartPurchaseService { + + @Resource + SparePartStockAuditMapper sparePartStockAuditMapper; + + @Resource + SparePartAuditMapper sparePartAuditMapper; + + @Resource + SparePartMapper sparePartMapper; + + @Resource + WarehouseMapper warehouseMapper; + + /** + * 备件采购列表 + * + * @param pageParam 分页参数 + * @param params 搜索参数 + * @return PageResult + * @author hcy + */ + + public PageResult list(PageParam pageParam, Map params) { + Integer page = pageParam.getPageNo(); + Integer limit = pageParam.getPageSize(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("receipt_type",1); + queryWrapper.eq("is_delete", 0); + queryWrapper.orderByDesc("id"); + + sparePartStockAuditMapper.setSearch(queryWrapper, params, new String[]{ + "like:receiptNumber@receipt_number:str", + "=:deliveryMethod@delivery_method:int", + "like:responsiblePerson@responsible_person:str", + "=:purchaseStatus@purchase_status:int", + "datetime:createTimeStart-createTimeEnd@create_time:str", + }); + + IPage iPage = sparePartStockAuditMapper.selectPage(new Page<>(page, limit), queryWrapper); + List list = new LinkedList<>(); + for(SparePartStockAudit item : iPage.getRecords()) { + SparePartPurchaseListVo vo = new SparePartPurchaseListVo(); + BeanUtils.copyProperties(item, vo); + vo.setCreateTime(TimeUtil.timestampToDate(item.getCreateTime())); + vo.setUpdateTime(TimeUtil.timestampToDate(item.getUpdateTime())); + + vo.setHandlingTime(TimeUtil.timestampToDate(item.getHandlingTime())); //经办时间 + vo.setResponsiblePersonPhone(vo.getResponsiblePerson() + "/" + vo.getPhone()); //采购人/联系电话 + + //获取待审核备件信息 + List stockAuditId = sparePartAuditMapper.selectList( + new QueryWrapper() + .eq("stock_audit_id", item.getId()) + .eq("is_delete", 0) + ); + //获取备件信息 + List listVo = new ArrayList<>(); + for (SparePartAudit sparePartAudit : stockAuditId) { + SparePart sparePart = sparePartMapper.selectOne( + new QueryWrapper() + .eq("id", sparePartAudit.getSparePartsId()) + .eq("is_delete", 0) + .last("limit 1")); + + SparePartAuditListVo sparePartAudit1 = new SparePartAuditListVo(); + BeanUtils.copyProperties(sparePart, sparePartAudit1); + sparePartAudit1.setId(sparePartAudit.getId()); + sparePartAudit1.setSparePartsId(sparePart.getId()); + sparePartAudit1.setStockAuditId(sparePartAudit.getStockAuditId()); + sparePartAudit1.setCount(sparePartAudit.getCount()); // 出库数量 + + listVo.add(sparePartAudit1); + } + vo.setSparePartAuditList(listVo); + list.add(vo); + } + + + + return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list); + } + + /** + * 备件采购详情 + * + * @author hcy + * @param id 主键参数 + * @return SparePartPurchaseListVo + */ + @Override + public SparePartPurchaseListVo detail(Integer id) { + SparePartStockAudit model = sparePartStockAuditMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在"); + + SparePartPurchaseListVo vo = new SparePartPurchaseListVo(); + BeanUtils.copyProperties(model, vo); + + Warehouse warehouseName = warehouseMapper.selectOne( + new QueryWrapper() + .eq("id", model.getWarehouseId()) + .eq("is_delete", 0) + .last("limit 1")); + vo.setWarehouseName(warehouseName.getWarehouseName()); + + //获取待审核备件信息 + List stockAuditId = sparePartAuditMapper.selectList( + new QueryWrapper() + .eq("stock_audit_id", model.getId()) + .eq("is_delete", 0) + ); + //获取备件信息 + List listVo = new ArrayList<>(); + for (SparePartAudit sparePartAudit : stockAuditId) { + SparePart sparePart = sparePartMapper.selectOne( + new QueryWrapper() + .eq("id", sparePartAudit.getSparePartsId()) + .eq("is_delete", 0) + .last("limit 1")); + + SparePartAuditListVo sparePartAudit1 = new SparePartAuditListVo(); + BeanUtils.copyProperties(sparePart, sparePartAudit1); + sparePartAudit1.setId(sparePartAudit.getId()); + sparePartAudit1.setSparePartsId(sparePart.getId()); // 备件id + sparePartAudit1.setStockAuditId(sparePartAudit.getStockAuditId()); // 出入库审核id + sparePartAudit1.setUnit(sparePart.getUnit()); //单位 + sparePartAudit1.setCount(sparePartAudit.getCount()); // 出库数量 + sparePartAudit1.setQuantity(sparePart.getQuantity()); //库存数量 + Warehouse warehouse = warehouseMapper.selectOne( + new QueryWrapper() + .eq("id", sparePart.getWarehouseId()) + .eq("is_delete", 0) + .last("limit 1")); + sparePartAudit1.setWarehouseName(warehouse.getWarehouseName()); + listVo.add(sparePartAudit1); + } + vo.setSparePartAuditList(listVo); + vo.setResponsiblePersonPhone(vo.getResponsiblePerson() + "/" + vo.getPhone()); //采购人/联系电话 + + vo.setHandlingTime(TimeUtil.timestampToDate(model.getHandlingTime())); //经办时间 + return vo; + } + + /** + * 备件采购新增 + * + * @author hcy + * @param sparePartStockAuditParam 参数 + */ + @Override + public void add(SparePartStockAuditParam sparePartStockAuditParam) { + SparePartStockAudit model = new SparePartStockAudit(); + + QueryWrapper qw = new QueryWrapper<>(); + qw.select("max(id) as id"); + SparePartStockAudit sparePartStockAudit = sparePartStockAuditMapper.selectOne(qw); + if(sparePartStockAudit == null){ + model.setId(1L); + }else{ + model.setId(sparePartStockAudit.getId() + 1); + } + + model.setWarehouseId(sparePartStockAuditParam.getWarehouseId()); // 出库仓库 + model.setOutInWarehouseType(sparePartStockAuditParam.getOutInWarehouseType()); // 出库类别 2=员工领料,3=销售出库) + model.setPhone(sparePartStockAuditParam.getPhone()); // 联系电话 + model.setReceiptNumber(generateOrderNumber()); // 单据编号 + model.setShippingAddress(sparePartStockAuditParam.getShippingAddress()); //收货地址 + + model.setConsigner(sparePartStockAuditParam.getConsigner()); //发货人 + model.setConsignerPhone(sparePartStockAuditParam.getConsignerPhone()); //发货人联系电话 + model.setShipAddress(sparePartStockAuditParam.getShipAddress()); //发货地址 + model.setLogisticsCompany(sparePartStockAuditParam.getLogisticsCompany()); //物流公司 + model.setTrackingNumber(sparePartStockAuditParam.getTrackingNumber()); //物流编号 + model.setDeliveryMethod(sparePartStockAuditParam.getDeliveryMethod()); //配送方式(0=物流快递,1=上门取件,2=送货上门) + model.setPurchaseStatus(AuditStateEnum.UNREVIEWED.getStatus()); //状态 未审核 + + + // 获取当前的用户 + Object username = AdminThreadLocal.get("username"); + model.setResponsiblePerson((String) username); // 经办人 + model.setConsignee((String) username); // 收货单位(人员) + model.setHandlingTime(System.currentTimeMillis() / 1000); //经办时间 + + // 审核状态 + model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus()); + //单据类型(0=入库单,1=出库单,2=仓库调拨单) + model.setReceiptType(AuditStateEnum.OUTWAREHOUSE.getStatus()); + + List sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList(); + // 使用StringBuilder来拼接id值 + StringBuilder sb = new StringBuilder(); + for (SparePartAudit sparePartAudit : sparePartAuditList) { + SparePartAudit insertSparePartAudit = new SparePartAudit(); + insertSparePartAudit.setSparePartsId(sparePartAudit.getId()); //备件id + sb.append(sparePartAudit.getId()).append(","); + + insertSparePartAudit.setCount(sparePartAudit.getCount()); //备件出库数量 + insertSparePartAudit.setStockAuditId(model.getId()); // 出入库审核id + insertSparePartAudit.setCreateTime(System.currentTimeMillis() / 1000); + sparePartAuditMapper.insert(insertSparePartAudit);//插入备件审核信息 + } + sb.deleteCharAt(sb.length() - 1); // 删除最后一个逗号 + model.setSparePartAuditId(String.valueOf(sb));// 备件审核id + model.setCreateTime(System.currentTimeMillis() / 1000); + sparePartStockAuditMapper.insert(model); + } + + /** + * 备件采购编辑 + * + * @author hcy + * @param sparePartStockAuditParam 参数 + */ + @Override + public void edit(SparePartStockAuditParam sparePartStockAuditParam) { + SparePartStockAudit model = sparePartStockAuditMapper.selectOne( + new QueryWrapper() + .eq("id", sparePartStockAuditParam.getId()) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在!"); + model.setId(sparePartStockAuditParam.getId()); + model.setWarehouseId(sparePartStockAuditParam.getWarehouseId()); // 出库仓库 + model.setOutInWarehouseType(sparePartStockAuditParam.getOutInWarehouseType()); // 出库类别 2=员工领料,3=销售出库) + model.setPhone(sparePartStockAuditParam.getPhone()); // 联系电话 + model.setReceiptNumber(generateOrderNumber()); // 单据编号 + model.setShippingAddress(sparePartStockAuditParam.getShippingAddress()); //收货地址 + + model.setConsigner(sparePartStockAuditParam.getConsigner()); //发货人 + model.setConsignerPhone(sparePartStockAuditParam.getConsignerPhone()); //发货人联系电话 + model.setShipAddress(sparePartStockAuditParam.getShipAddress()); //发货地址 + model.setLogisticsCompany(sparePartStockAuditParam.getLogisticsCompany()); //物流公司 + model.setTrackingNumber(sparePartStockAuditParam.getTrackingNumber()); //物流编号 + model.setDeliveryMethod(sparePartStockAuditParam.getDeliveryMethod()); //配送方式(0=物流快递,1=上门取件,2=送货上门) + model.setPurchaseStatus(AuditStateEnum.UNREVIEWED.getStatus()); //状态 未审核 + + // 获取当前的用户 + Object username = AdminThreadLocal.get("username"); + model.setResponsiblePerson((String) username); // 经办人 + model.setConsignee((String) username); // 收货单位(人员) + + // 审核状态 + model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus()); + //单据类型(0=入库单,1=出库单,2=仓库调拨单) + model.setReceiptType(AuditStateEnum.OUTWAREHOUSE.getStatus()); + + List sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList(); + // 使用StringBuilder来拼接id值 + StringBuilder sb = new StringBuilder(); + List auditList = sparePartAuditMapper.selectList( + new QueryWrapper() + .eq("stock_audit_id", model.getId()) + .eq("is_delete", 0)); + for (SparePartAudit sparePartAudit : auditList) { + //将旧备件审核信息删除 + SparePartAudit delectSparePartAudit = sparePartAuditMapper.selectOne( + new QueryWrapper() + .eq("stock_audit_id", model.getId()) + .eq("is_delete", 0) + .last("limit 1")); + if(delectSparePartAudit != null){ + delectSparePartAudit.setIsDelete(1); + delectSparePartAudit.setDeleteTime(System.currentTimeMillis() / 1000); + sparePartAuditMapper.updateById(delectSparePartAudit); + } + } + for (SparePartAudit sparePartAudit : sparePartAuditList) { + //插入新的备件审核信息 + SparePartAudit insertSparePartAudit = new SparePartAudit(); + if(sparePartAudit.getSparePartsId() != null){ + insertSparePartAudit.setSparePartsId(sparePartAudit.getSparePartsId()); //备件id + }else { + insertSparePartAudit.setSparePartsId(sparePartAudit.getId()); + } + sb.append(sparePartAudit.getId()).append(","); + + insertSparePartAudit.setCount(sparePartAudit.getCount()); //备件出库数量 + insertSparePartAudit.setStockAuditId(model.getId()); // 出入库审核id + insertSparePartAudit.setUpdateTime(System.currentTimeMillis() / 1000); + sparePartAuditMapper.insert(insertSparePartAudit);//插入备件审核信息 + } + //如果是已取消状态编辑改成未审核 + if(model.getAuditState() == AuditStateEnum.CANCELED.getStatus()){ + model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus()); + } + //已审核,但不通过的,重新编辑之后状态也要变成未审核,审核结果改成空 + if(model.getAuditState() == AuditStateEnum.AUDITED.getStatus() + && model.getAuditResult() == AuditStateEnum.NOTPASS.getStatus()){ + model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus()); + model.setAuditResult(null); + } + sb.deleteCharAt(sb.length() - 1); // 删除最后一个逗号 + model.setSparePartAuditId(String.valueOf(sb));// 备件审核id + model.setUpdateTime(System.currentTimeMillis() / 1000); + sparePartStockAuditMapper.updateById(model); + } + + /** + * 备件采购删除 + * + * @author hcy + * @param id 主键ID + */ + @Override + public void del(Integer id) { + SparePartStockAudit model = sparePartStockAuditMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在!"); + + model.setIsDelete(1); + model.setDeleteTime(System.currentTimeMillis() / 1000); + sparePartStockAuditMapper.updateById(model); + } + + + /** + * 系统自动生成订单号:年月日+6位流水号 + * @return + */ + public String generateOrderNumber() { + String DATE_FORMAT = "yyyyMMdd"; + int SEQUENCE_LENGTH = 6; + int sequence = 1; // 流水号从1开始 + // 获取当前日期 + SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); + String dateStr = dateFormat.format(new Date()); + + //查看数据库是否今日有订单编号 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.like("receipt_number",dateStr); + List sparePartStockAudits = sparePartStockAuditMapper.selectList(queryWrapper); + int max = sparePartStockAudits.size(); + if(sequence <= max){ + sequence = max + 1; // 递增流水号 + } + + // 生成6位流水号 + StringBuilder sequenceBuilder = new StringBuilder(); + for (int i = 0; i < SEQUENCE_LENGTH; i++) { + sequenceBuilder.append(String.format("%0" + (SEQUENCE_LENGTH - i) + "d", sequence)); + } + String truncatedString = sequenceBuilder.substring(0, 6); + // 拼接订单号 + String orderNumber = dateStr + truncatedString; + + return orderNumber; + } +} diff --git a/admin/src/main/java/com/hcy/admin/validate/SparePartAudit/SparePartAuditParam.java b/admin/src/main/java/com/hcy/admin/validate/SparePartAudit/SparePartAuditParam.java index 6daf266..b6ec6ea 100644 --- a/admin/src/main/java/com/hcy/admin/validate/SparePartAudit/SparePartAuditParam.java +++ b/admin/src/main/java/com/hcy/admin/validate/SparePartAudit/SparePartAuditParam.java @@ -1,5 +1,6 @@ package com.hcy.admin.validate.SparePartAudit; +import io.swagger.models.auth.In; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.hibernate.validator.constraints.Length; @@ -45,9 +46,7 @@ public class SparePartAuditParam implements Serializable { private String unit; - @NotNull(message = "quantity参数缺失", groups = {create.class, update.class}) - @DecimalMin(value = "0", message = "quantity参数值不能少于0", groups = {create.class, update.class}) - private Long quantity; + private Integer quantity; @NotNull(message = "unitPrice参数缺失", groups = {create.class, update.class}) private BigDecimal unitPrice; diff --git a/admin/src/main/java/com/hcy/admin/vo/SparePartAudit/SparePartAuditListVo.java b/admin/src/main/java/com/hcy/admin/vo/SparePartAudit/SparePartAuditListVo.java index 3f21c14..1de8b74 100644 --- a/admin/src/main/java/com/hcy/admin/vo/SparePartAudit/SparePartAuditListVo.java +++ b/admin/src/main/java/com/hcy/admin/vo/SparePartAudit/SparePartAuditListVo.java @@ -14,16 +14,17 @@ public class SparePartAuditListVo implements Serializable { private static final long serialVersionUID = 1L; private Long id; // 主键id + private Long sparePartsId; // 备件id private Long stockAuditId; // 出入库审核id private String sparePartsCode; // 备件编码 private String sparePartsName; // 备件名称 private Long warehouseId; // 所属仓库 private String specificationsModel; // 规格型号 - private Long unit; // 单位 - private Long quantity; // 库存数量 + private String unit; // 单位 + private Integer quantity; // 库存数量 private BigDecimal unitPrice; // 单价(元) private String createTime; // 创建时间 private String updateTime; // 更新时间 private String warehouseName; // 所属仓库名 - + private Integer count; // 出入库数量 } diff --git a/admin/src/main/java/com/hcy/admin/vo/setting/DictTypeVo.java b/admin/src/main/java/com/hcy/admin/vo/setting/DictTypeVo.java index b1f2959..6bf9e70 100644 --- a/admin/src/main/java/com/hcy/admin/vo/setting/DictTypeVo.java +++ b/admin/src/main/java/com/hcy/admin/vo/setting/DictTypeVo.java @@ -3,6 +3,7 @@ package com.hcy.admin.vo.setting; import lombok.Data; import java.io.Serializable; +import java.util.List; /** * 字典类型Vo @@ -19,5 +20,5 @@ public class DictTypeVo implements Serializable { private Integer dictStatus; // 字典状态 private String createTime; // 创建时间 private String updateTime; // 更新时间 - + private List dictDataVoList; //字典数据 } diff --git a/admin/src/main/java/com/hcy/admin/vo/sparePart/SparePartDetailVo.java b/admin/src/main/java/com/hcy/admin/vo/sparePart/SparePartDetailVo.java index a3a5cd3..ed09ab0 100644 --- a/admin/src/main/java/com/hcy/admin/vo/sparePart/SparePartDetailVo.java +++ b/admin/src/main/java/com/hcy/admin/vo/sparePart/SparePartDetailVo.java @@ -19,7 +19,7 @@ public class SparePartDetailVo implements Serializable { private Long warehouseId; // 所属仓库 private String specificationsModel; // 规格型号 private String unit; // 单位 - private Long quantity; // 库存数量 + private Integer quantity; // 库存数量 private BigDecimal unitPrice; // 单价 private String warehouseName; // 所属仓库名 } diff --git a/admin/src/main/java/com/hcy/admin/vo/sparePart/SparePartListVo.java b/admin/src/main/java/com/hcy/admin/vo/sparePart/SparePartListVo.java index 61ff802..f7fe498 100644 --- a/admin/src/main/java/com/hcy/admin/vo/sparePart/SparePartListVo.java +++ b/admin/src/main/java/com/hcy/admin/vo/sparePart/SparePartListVo.java @@ -19,7 +19,7 @@ public class SparePartListVo implements Serializable { private Long warehouseId; // 所属仓库 private String specificationsModel; // 规格型号 private String unit; // 单位 - private Long quantity; // 库存数量 + private Integer quantity; // 库存数量 private String createTime; // 创建时间 private String updateTime; // 更新时间 private BigDecimal unitPrice; // 单价 diff --git a/admin/src/main/java/com/hcy/admin/vo/sparePartPurchase/SparePartPurchaseListVo.java b/admin/src/main/java/com/hcy/admin/vo/sparePartPurchase/SparePartPurchaseListVo.java new file mode 100644 index 0000000..1935103 --- /dev/null +++ b/admin/src/main/java/com/hcy/admin/vo/sparePartPurchase/SparePartPurchaseListVo.java @@ -0,0 +1,48 @@ +package com.hcy.admin.vo.sparePartPurchase; + +import com.hcy.admin.vo.SparePartAudit.SparePartAuditListVo; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * SparePartPurchaseListVo + */ +@Data +public class SparePartPurchaseListVo implements Serializable { + + private static final long serialVersionUID = 1L; + + private Long id; // 主键id + private String receiptNumber; // 单据编号 + private Long warehouseId; // 所属仓库 + private String consignee; // 收货单位(人员) + private String phone; // 联系电话 + private String responsiblePerson; // 经办人 + private String handlingTime; // 经办时间 + private Integer auditState; // 审核状态(0=未审核,1=已审核,2=已取消) + private Integer auditResult; // 审核结果(0=已通过,1=未通过) + private Long auditTime; // 审核时间 + private String auditIdea; // 审核意见 + private String createTime; // 创建时间 + private String updateTime; // 更新时间 + private String sparePartAuditId; // 备件审核id + private String consigneePhone; // 收货单位(人员)/电话 + private List sparePartAuditList; //待入库的备件 + private String warehouseName; // 所属仓库名 + private Long outInWarehouseType; // 出入库类别(0=采购入库,1=库存调拨,2=员工领料,3=销售出库) + + private String orderId; //订单编号 + private Integer purchaseStatus; //配件状态(0=待审核,1=未通过,2=待管理员审核,3=待发货,4=待收货,5=已完成) + private String shippingAddress; //收货地址 + private String consigner; //发货人 + private String consignerPhone; //发货人联系电话 + private String shipAddress; //发货地址 + private String logisticsCompany; //物流公司 + private String trackingNumber; //物流编号 + private Integer deliveryMethod; //配送方式(0=物流快递,1=上门取件,2=送货上门) + private String responsiblePersonPhone; //采购人/联系电话 + private String createTimeStart; + private String createTimeEnd; +} diff --git a/admin/src/main/java/com/hcy/admin/vo/sparePartReceive/SparePartReceiveListVo.java b/admin/src/main/java/com/hcy/admin/vo/sparePartReceive/SparePartReceiveListVo.java index 06da936..591d15b 100644 --- a/admin/src/main/java/com/hcy/admin/vo/sparePartReceive/SparePartReceiveListVo.java +++ b/admin/src/main/java/com/hcy/admin/vo/sparePartReceive/SparePartReceiveListVo.java @@ -1,5 +1,6 @@ package com.hcy.admin.vo.sparePartReceive; +import com.hcy.admin.vo.SparePartAudit.SparePartAuditListVo; import com.hcy.common.entity.SparePartAudit.SparePartAudit; import lombok.Data; @@ -29,7 +30,7 @@ public class SparePartReceiveListVo implements Serializable { private String updateTime; // 更新时间 private String sparePartAuditId; // 备件审核id private String consigneePhone; // 收货单位(人员)/电话 - private List sparePartAuditList; //待入库的备件 + private List sparePartAuditList; //待入库的备件 private String warehouseName; // 所属仓库名 private Long outInWarehouseType; // 出入库类别(0=采购入库,1=库存调拨,2=员工领料,3=销售出库) @@ -45,5 +46,6 @@ public class SparePartReceiveListVo implements Serializable { private String shipAddress; //发货地址 private String logisticsCompany; //物流公司 private String trackingNumber; //物流编号 + private Integer deliveryMethod; //配送方式(0=物流快递,1=上门取件,2=送货上门) private String recipientAndPhone; //领用员工/联系电话 } diff --git a/common/src/main/java/com/hcy/common/entity/SparePartAudit/SparePartAudit.java b/common/src/main/java/com/hcy/common/entity/SparePartAudit/SparePartAudit.java index 0ad5ecd..c07e1ff 100644 --- a/common/src/main/java/com/hcy/common/entity/SparePartAudit/SparePartAudit.java +++ b/common/src/main/java/com/hcy/common/entity/SparePartAudit/SparePartAudit.java @@ -24,7 +24,7 @@ public class SparePartAudit implements Serializable { private Long warehouseId; // 所属仓库 private String specificationsModel; // 规格型号 private String unit; // 单位 - private Long quantity; // 库存数量 + private Integer quantity; // 库存数量 private BigDecimal unitPrice; // 单价(元) private Integer isDelete; // 是否删除: [0=否, 1=是] private Long createTime; // 创建时间