diff --git a/src/main/java/com/zg/project/information/controller/MtdController.java b/src/main/java/com/zg/project/information/controller/MtdController.java index b263933..4fdf202 100644 --- a/src/main/java/com/zg/project/information/controller/MtdController.java +++ b/src/main/java/com/zg/project/information/controller/MtdController.java @@ -1,54 +1,104 @@ package com.zg.project.information.controller; import java.util.List; - -import com.zg.common.utils.poi.ExcelUtil; -import com.zg.framework.web.controller.BaseController; -import com.zg.framework.web.domain.AjaxResult; -import com.zg.framework.web.page.TableDataInfo; +import javax.servlet.http.HttpServletResponse; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.zg.framework.aspectj.lang.annotation.Log; +import com.zg.framework.aspectj.lang.enums.BusinessType; import com.zg.project.information.domain.Mtd; import com.zg.project.information.service.IMtdService; +import com.zg.framework.web.controller.BaseController; +import com.zg.framework.web.domain.AjaxResult; +import com.zg.common.utils.poi.ExcelUtil; +import com.zg.framework.web.page.TableDataInfo; +/** + * 物料字典Controller + * + * @author zg + * @date 2025-07-31 + */ @RestController @RequestMapping("/information/mtd") -public class MtdController extends BaseController { - +public class MtdController extends BaseController +{ @Autowired private IMtdService mtdService; + /** + * 查询物料字典列表 + */ + @PreAuthorize("@ss.hasPermi('information:mtd:list')") @GetMapping("/list") - public TableDataInfo list(Mtd mtd) { + public TableDataInfo list(Mtd mtd) + { startPage(); List list = mtdService.selectMtdList(mtd); return getDataTable(list); } + /** + * 导出物料字典列表 + */ + @PreAuthorize("@ss.hasPermi('information:mtd:export')") + @Log(title = "物料字典", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, Mtd mtd) + { + List list = mtdService.selectMtdList(mtd); + ExcelUtil util = new ExcelUtil(Mtd.class); + util.exportExcel(response, list, "物料字典数据"); + } + + /** + * 获取物料字典详细信息 + */ + @PreAuthorize("@ss.hasPermi('information:mtd:query')") + @GetMapping(value = "/{Id}") + public AjaxResult getInfo(@PathVariable("Id") Long Id) + { + return success(mtdService.selectMtdById(Id)); + } + + /** + * 新增物料字典 + */ + @PreAuthorize("@ss.hasPermi('information:mtd:add')") + @Log(title = "物料字典", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@RequestBody Mtd mtd) { + public AjaxResult add(@RequestBody Mtd mtd) + { return toAjax(mtdService.insertMtd(mtd)); } + /** + * 修改物料字典 + */ + @PreAuthorize("@ss.hasPermi('information:mtd:edit')") + @Log(title = "物料字典", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@RequestBody Mtd mtd) { + public AjaxResult edit(@RequestBody Mtd mtd) + { return toAjax(mtdService.updateMtd(mtd)); } - @DeleteMapping("/{ids}") - public AjaxResult remove(@PathVariable Long[] ids) { - return toAjax(mtdService.deleteMtdByIds(ids)); - } - - @GetMapping("/export") - public AjaxResult export(Mtd mtd) { - List list = mtdService.selectMtdList(mtd); - ExcelUtil util = new ExcelUtil<>(Mtd.class); - return util.exportExcel(list, "物料信息"); - } - - @GetMapping("/{id}") - public AjaxResult getInfo(@PathVariable Long id) { - return AjaxResult.success(mtdService.selectMtdById(id)); + /** + * 删除物料字典 + */ + @PreAuthorize("@ss.hasPermi('information:mtd:remove')") + @Log(title = "物料字典", businessType = BusinessType.DELETE) + @DeleteMapping("/{Ids}") + public AjaxResult remove(@PathVariable Long[] Ids) + { + return toAjax(mtdService.deleteMtdByIds(Ids)); } } diff --git a/src/main/java/com/zg/project/information/domain/Mtd.java b/src/main/java/com/zg/project/information/domain/Mtd.java index cbbec16..17668e0 100644 --- a/src/main/java/com/zg/project/information/domain/Mtd.java +++ b/src/main/java/com/zg/project/information/domain/Mtd.java @@ -1,15 +1,22 @@ package com.zg.project.information.domain; -import com.zg.framework.aspectj.lang.annotation.Excel; -import com.zg.framework.web.domain.BaseEntity; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; +import com.zg.framework.aspectj.lang.annotation.Excel; +import com.zg.framework.web.domain.BaseEntity; -public class Mtd extends BaseEntity { +/** + * 物料字典对象 mtd + * + * @author zg + * @date 2025-07-31 + */ +public class Mtd extends BaseEntity +{ private static final long serialVersionUID = 1L; - /** 主键ID */ - private Long id; + /** $column.columnComment */ + private Long Id; /** 物料号 */ @Excel(name = "物料号") @@ -31,98 +38,112 @@ public class Mtd extends BaseEntity { @Excel(name = "单价") private String uprc; - /** 类型1 */ - @Excel(name = "btpe") + /** $column.columnComment */ + @Excel(name = "大类") private String btpe; - /** 类型2 */ - @Excel(name = "mtpe") + /** $column.columnComment */ + @Excel(name = "中类") private String mtpe; - /** 类型3 */ - @Excel(name = "stpe") + /** $column.columnComment */ + @Excel(name = "小类") private String stpe; - // ---------------- Getter & Setter ---------------- - - public void setId(Long id) { - this.id = id; + public void setId(Long Id) + { + this.Id = Id; } - public Long getId() { - return id; + public Long getId() + { + return Id; } - public void setMid(String mid) { + public void setMid(String mid) + { this.mid = mid; } - public String getMid() { + public String getMid() + { return mid; } - public void setDesMat(String desMat) { + public void setDesMat(String desMat) + { this.desMat = desMat; } - public String getDesMat() { + public String getDesMat() + { return desMat; } - public void setGrp(String grp) { + public void setGrp(String grp) + { this.grp = grp; } - public String getGrp() { + public String getGrp() + { return grp; } - public void setUnt(String unt) { + public void setUnt(String unt) + { this.unt = unt; } - public String getUnt() { + public String getUnt() + { return unt; } - public void setUprc(String uprc) { + public void setUprc(String uprc) + { this.uprc = uprc; } - public String getUprc() { + public String getUprc() + { return uprc; } - public void setBtpe(String btpe) { + public void setBtpe(String btpe) + { this.btpe = btpe; } - public String getBtpe() { + public String getBtpe() + { return btpe; } - public void setMtpe(String mtpe) { + public void setMtpe(String mtpe) + { this.mtpe = mtpe; } - public String getMtpe() { + public String getMtpe() + { return mtpe; } - public void setStpe(String stpe) { + public void setStpe(String stpe) + { this.stpe = stpe; } - public String getStpe() { + public String getStpe() + { return stpe; } - // ---------------- ToString ---------------- - @Override public String toString() { - return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) - .append("id", getId()) + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("Id", getId()) .append("mid", getMid()) .append("desMat", getDesMat()) .append("grp", getGrp()) @@ -131,11 +152,6 @@ public class Mtd extends BaseEntity { .append("btpe", getBtpe()) .append("mtpe", getMtpe()) .append("stpe", getStpe()) - .append("createBy", getCreateBy()) - .append("createTime", getCreateTime()) - .append("updateBy", getUpdateBy()) - .append("updateTime", getUpdateTime()) - .append("remark", getRemark()) .toString(); } } diff --git a/src/main/java/com/zg/project/information/mapper/MtdMapper.java b/src/main/java/com/zg/project/information/mapper/MtdMapper.java index fa76bac..bc5bded 100644 --- a/src/main/java/com/zg/project/information/mapper/MtdMapper.java +++ b/src/main/java/com/zg/project/information/mapper/MtdMapper.java @@ -3,13 +3,61 @@ package com.zg.project.information.mapper; import java.util.List; import com.zg.project.information.domain.Mtd; -public interface MtdMapper { - Mtd selectMtdById(Long id); - List selectMtdList(Mtd mtd); - int insertMtd(Mtd mtd); - int updateMtd(Mtd mtd); - int deleteMtdById(Long id); - int deleteMtdByIds(Long[] ids); +/** + * 物料字典Mapper接口 + * + * @author zg + * @date 2025-07-31 + */ +public interface MtdMapper +{ + /** + * 查询物料字典 + * + * @param Id 物料字典主键 + * @return 物料字典 + */ + public Mtd selectMtdById(Long Id); + + /** + * 查询物料字典列表 + * + * @param mtd 物料字典 + * @return 物料字典集合 + */ + public List selectMtdList(Mtd mtd); + + /** + * 新增物料字典 + * + * @param mtd 物料字典 + * @return 结果 + */ + public int insertMtd(Mtd mtd); + + /** + * 修改物料字典 + * + * @param mtd 物料字典 + * @return 结果 + */ + public int updateMtd(Mtd mtd); + + /** + * 删除物料字典 + * + * @param Id 物料字典主键 + * @return 结果 + */ + public int deleteMtdById(Long Id); + + /** + * 批量删除物料字典 + * + * @param Ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteMtdByIds(Long[] Ids); /** * 根据物料编码查询物料描述 diff --git a/src/main/java/com/zg/project/information/service/IMtdService.java b/src/main/java/com/zg/project/information/service/IMtdService.java index 40c5b8f..7ab81fd 100644 --- a/src/main/java/com/zg/project/information/service/IMtdService.java +++ b/src/main/java/com/zg/project/information/service/IMtdService.java @@ -3,11 +3,59 @@ package com.zg.project.information.service; import java.util.List; import com.zg.project.information.domain.Mtd; -public interface IMtdService { - Mtd selectMtdById(Long id); - List selectMtdList(Mtd mtd); - int insertMtd(Mtd mtd); - int updateMtd(Mtd mtd); - int deleteMtdById(Long id); - int deleteMtdByIds(Long[] ids); +/** + * 物料字典Service接口 + * + * @author zg + * @date 2025-07-31 + */ +public interface IMtdService +{ + /** + * 查询物料字典 + * + * @param Id 物料字典主键 + * @return 物料字典 + */ + public Mtd selectMtdById(Long Id); + + /** + * 查询物料字典列表 + * + * @param mtd 物料字典 + * @return 物料字典集合 + */ + public List selectMtdList(Mtd mtd); + + /** + * 新增物料字典 + * + * @param mtd 物料字典 + * @return 结果 + */ + public int insertMtd(Mtd mtd); + + /** + * 修改物料字典 + * + * @param mtd 物料字典 + * @return 结果 + */ + public int updateMtd(Mtd mtd); + + /** + * 批量删除物料字典 + * + * @param Ids 需要删除的物料字典主键集合 + * @return 结果 + */ + public int deleteMtdByIds(Long[] Ids); + + /** + * 删除物料字典信息 + * + * @param Id 物料字典主键 + * @return 结果 + */ + public int deleteMtdById(Long Id); } diff --git a/src/main/java/com/zg/project/information/service/impl/MtdServiceImpl.java b/src/main/java/com/zg/project/information/service/impl/MtdServiceImpl.java index cb6564f..7f03797 100644 --- a/src/main/java/com/zg/project/information/service/impl/MtdServiceImpl.java +++ b/src/main/java/com/zg/project/information/service/impl/MtdServiceImpl.java @@ -7,38 +7,87 @@ import com.zg.project.information.mapper.MtdMapper; import com.zg.project.information.domain.Mtd; import com.zg.project.information.service.IMtdService; +/** + * 物料字典Service业务层处理 + * + * @author zg + * @date 2025-07-31 + */ @Service -public class MtdServiceImpl implements IMtdService { +public class MtdServiceImpl implements IMtdService +{ @Autowired private MtdMapper mtdMapper; + /** + * 查询物料字典 + * + * @param Id 物料字典主键 + * @return 物料字典 + */ @Override - public Mtd selectMtdById(Long id) { - return mtdMapper.selectMtdById(id); + public Mtd selectMtdById(Long Id) + { + return mtdMapper.selectMtdById(Id); } + /** + * 查询物料字典列表 + * + * @param mtd 物料字典 + * @return 物料字典 + */ @Override - public List selectMtdList(Mtd mtd) { + public List selectMtdList(Mtd mtd) + { return mtdMapper.selectMtdList(mtd); } + /** + * 新增物料字典 + * + * @param mtd 物料字典 + * @return 结果 + */ @Override - public int insertMtd(Mtd mtd) { + public int insertMtd(Mtd mtd) + { return mtdMapper.insertMtd(mtd); } + /** + * 修改物料字典 + * + * @param mtd 物料字典 + * @return 结果 + */ @Override - public int updateMtd(Mtd mtd) { + public int updateMtd(Mtd mtd) + { return mtdMapper.updateMtd(mtd); } + /** + * 批量删除物料字典 + * + * @param Ids 需要删除的物料字典主键 + * @return 结果 + */ @Override - public int deleteMtdById(Long id) { - return mtdMapper.deleteMtdById(id); + public int deleteMtdByIds(Long[] Ids) + { + return mtdMapper.deleteMtdByIds(Ids); } + /** + * 删除物料字典信息 + * + * @param Id 物料字典主键 + * @return 结果 + */ @Override - public int deleteMtdByIds(Long[] ids) { - return mtdMapper.deleteMtdByIds(ids); + public int deleteMtdById(Long Id) + { + return mtdMapper.deleteMtdById(Id); } } diff --git a/src/main/java/com/zg/project/wisdom/controller/RkInfoController.java b/src/main/java/com/zg/project/wisdom/controller/RkInfoController.java index 13c3550..d5d5c38 100644 --- a/src/main/java/com/zg/project/wisdom/controller/RkInfoController.java +++ b/src/main/java/com/zg/project/wisdom/controller/RkInfoController.java @@ -7,6 +7,7 @@ import javax.servlet.http.HttpServletResponse; import com.zg.project.wisdom.domain.dto.PcRkInfoBatchDTO; import com.zg.project.wisdom.domain.dto.RefundRequestDTO; +import com.zg.project.wisdom.domain.dto.RkCancelDTO; import com.zg.project.wisdom.domain.dto.StockOutDTO; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; @@ -35,7 +36,7 @@ public class RkInfoController extends BaseController /** - * 查询库存单据主列表 + * 查询出库,借料,待审批,撤销出入库单据主列表 */ @PreAuthorize("@ss.hasPermi('wisdom:stock:list')") @PostMapping("/list") @@ -46,6 +47,7 @@ public class RkInfoController extends BaseController return getDataTable(list); } + /** * 导出库存单据主列表 */ @@ -118,7 +120,7 @@ public class RkInfoController extends BaseController } /** - * 撤销出库 + * App撤销出库 * @param * @return */ @@ -136,6 +138,47 @@ public class RkInfoController extends BaseController : AjaxResult.error("撤销失败,出库单据: " + billNoCk + " 不存在或已处理"); } + /** + * 根据主键ID撤销入库 + */ + @PostMapping("/cancel") + @PreAuthorize("@ss.hasPermi('wisdom:stock:deleteByBillNo')") + public AjaxResult deleteById(@RequestBody RkCancelDTO dto) { + rkInfoService.deleteRkInfoById(dto); + return AjaxResult.success("撤销成功"); + } + + /** + * 根据主键ID撤销出库 + */ + @PostMapping("/cancelById/{id}") + @PreAuthorize("@ss.hasPermi('wisdom:stock:deleteByBillNo')") + public AjaxResult cancelOutStockById(@PathVariable Long id) { + rkInfoService.cancelOutStockById(id); + return AjaxResult.success("撤销出库成功"); + } + + + /** + * 根据主键id进行删除 + * 出入库撤销记录删除 + */ + @PostMapping("/deleteByIds") + @PreAuthorize("@ss.hasPermi('wisdom:stock:deleteById')") + public AjaxResult deleteByIds(@RequestBody Long[] ids) { + return AjaxResult.success(rkInfoService.deleteRkInfoByIds(ids)); + } + + /** + * 根据ids恢复出库或入库 + */ + @PostMapping("/revertByIds") + @PreAuthorize("@ss.hasPermi('wisdom:stock:deleteById')") + public AjaxResult revertByIds(@RequestBody Long[] ids) { + rkInfoService.revertByIds(ids); + return AjaxResult.success(); + } + /** * 出库操作 * @param diff --git a/src/main/java/com/zg/project/wisdom/controller/app/AppRkInfoController.java b/src/main/java/com/zg/project/wisdom/controller/app/AppRkInfoController.java index 9581633..1967773 100644 --- a/src/main/java/com/zg/project/wisdom/controller/app/AppRkInfoController.java +++ b/src/main/java/com/zg/project/wisdom/controller/app/AppRkInfoController.java @@ -64,7 +64,7 @@ public class AppRkInfoController extends BaseController { /** - * 根据单据号进行撤销 + * 根据单据号进行撤销入库 * @param billNo * @return */ diff --git a/src/main/java/com/zg/project/wisdom/domain/RkInfo.java b/src/main/java/com/zg/project/wisdom/domain/RkInfo.java index 5fb0363..c956f4b 100644 --- a/src/main/java/com/zg/project/wisdom/domain/RkInfo.java +++ b/src/main/java/com/zg/project/wisdom/domain/RkInfo.java @@ -39,6 +39,7 @@ public class RkInfo extends BaseEntity private String approverId; /** 库龄 */ + @Excel(name = "库龄") private Long stockAge; /** 入库类型 */ @@ -50,6 +51,10 @@ public class RkInfo extends BaseEntity /** 所属仓库 */ private String cangku; + /** 多状态查询:是否出库(如 0=入库, 1=出库 等) */ + @TableField(exist = false) + private List isChukuList; + /** 入库类型名称(联查显示用,导出专用) */ @Excel(name = "入库类型名称") private String rkTypeName; @@ -84,7 +89,7 @@ public class RkInfo extends BaseEntity private String lihuoYName; /** 是否已出库(0未出库,1已出库) */ - @Excel(name = "是否已出库", readConverterExp = "0=已入库,1已出库") + @Excel(name = "是否已出库", readConverterExp = "0已入库,1已出库,2待审批,3借料出库,4入库撤销,5出库撤销") private String isChuku; /** 单据号 */ @@ -225,11 +230,23 @@ public class RkInfo extends BaseEntity private String auditResult; /** 入库开始时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date startTime; - /** 入库结束时间*/ + /** 入库结束时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date endTime; + /** 领用开始时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @TableField(exist = false) + private Date lyStartTime; + + /** 领用结束时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @TableField(exist = false) + private Date lyEndTime; + /** 是否删除(0 表示正常,1 表示已删除) */ private String isDelete; @@ -296,6 +313,14 @@ public class RkInfo extends BaseEntity public String getLihuoYName() { return lihuoYName; } public void setLihuoYName(String lihuoYName) { this.lihuoYName = lihuoYName; } + + public List getIsChukuList() { + return isChukuList; + } + + public void setIsChukuList(List isChukuList) { + this.isChukuList = isChukuList; + } public String getIsChuku() { return isChuku; } public void setIsChuku(String isChuku) { this.isChuku = isChuku; } public String getBillNo() { return billNo; } @@ -397,6 +422,22 @@ public class RkInfo extends BaseEntity this.endTime = endTime; } + public Date getLyStartTime() { + return lyStartTime; + } + + public void setLyStartTime(Date lyStartTime) { + this.lyStartTime = lyStartTime; + } + + public Date getLyEndTime() { + return lyEndTime; + } + + public void setLyEndTime(Date lyEndTime) { + this.lyEndTime = lyEndTime; + } + public String getIsBorrowed() { return isBorrowed; } @@ -489,6 +530,9 @@ public class RkInfo extends BaseEntity .append("signImageUrl", getSignImageUrl()) .append("scenePhotoUrl", getScenePhotoUrl()) .append("auditResult", getAuditResult()) + .append("isChukuList", getIsChukuList()) + .append("lyStartTime", getLyStartTime()) + .append("lyEndTime", getLyEndTime()) .append("isDelete", getIsDelete()) .toString(); } diff --git a/src/main/java/com/zg/project/wisdom/domain/dto/RkCancelDTO.java b/src/main/java/com/zg/project/wisdom/domain/dto/RkCancelDTO.java new file mode 100644 index 0000000..e87b425 --- /dev/null +++ b/src/main/java/com/zg/project/wisdom/domain/dto/RkCancelDTO.java @@ -0,0 +1,17 @@ +package com.zg.project.wisdom.domain.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class RkCancelDTO { + /** 主键ID */ + private Long id; + + /** 实际入库数量 */ + private BigDecimal realQty; + + /** 供应计划ID */ + private Long gysJhId; +} diff --git a/src/main/java/com/zg/project/wisdom/domain/dto/StockOutDTO.java b/src/main/java/com/zg/project/wisdom/domain/dto/StockOutDTO.java index 4ca9242..8cf79be 100644 --- a/src/main/java/com/zg/project/wisdom/domain/dto/StockOutDTO.java +++ b/src/main/java/com/zg/project/wisdom/domain/dto/StockOutDTO.java @@ -1,5 +1,6 @@ package com.zg.project.wisdom.domain.dto; +import com.fasterxml.jackson.annotation.JsonFormat; import com.zg.project.wisdom.domain.dto.StockOutItemDTO; import lombok.Data; @@ -13,6 +14,7 @@ import java.util.List; public class StockOutDTO { /** 领用时间(出库时间) */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date lyTime; /** 借用时间 */ diff --git a/src/main/java/com/zg/project/wisdom/mapper/RkInfoMapper.java b/src/main/java/com/zg/project/wisdom/mapper/RkInfoMapper.java index e435f3f..84ef252 100644 --- a/src/main/java/com/zg/project/wisdom/mapper/RkInfoMapper.java +++ b/src/main/java/com/zg/project/wisdom/mapper/RkInfoMapper.java @@ -207,4 +207,11 @@ public interface RkInfoMapper * 出库驳回时恢复单据表数据状态 */ void revertRkInfoStatusByBillNoCk(RkInfo revert); + + /** + * 根据id查询入库单据 + * @param ids + * @return + */ + List selectRkInfoByIds(@Param("ids") Long[] ids); } diff --git a/src/main/java/com/zg/project/wisdom/service/IRkInfoService.java b/src/main/java/com/zg/project/wisdom/service/IRkInfoService.java index 99ae5f0..8f74a0e 100644 --- a/src/main/java/com/zg/project/wisdom/service/IRkInfoService.java +++ b/src/main/java/com/zg/project/wisdom/service/IRkInfoService.java @@ -6,10 +6,7 @@ import java.util.Map; import com.zg.project.Inventory.domain.dto.QueryDTO; import com.zg.project.Inventory.domain.vo.ChartDataVO; import com.zg.project.wisdom.domain.RkInfo; -import com.zg.project.wisdom.domain.dto.PcRkInfoBatchDTO; -import com.zg.project.wisdom.domain.dto.RefundRequestDTO; -import com.zg.project.wisdom.domain.dto.RkInfoBatchDTO; -import com.zg.project.wisdom.domain.dto.StockOutDTO; +import com.zg.project.wisdom.domain.dto.*; import com.zg.project.wisdom.domain.vo.RkSubmitResultVO; /** @@ -56,10 +53,10 @@ public interface IRkInfoService /** * 删除库存单据主信息 * - * @param id 库存单据主主键 + * @param * @return 结果 */ - public int deleteRkInfoById(Long id); + int deleteRkInfoById(RkCancelDTO dto); /** * 批量新增入库记录 @@ -134,4 +131,17 @@ public interface IRkInfoService * @return */ int refundMaterial(RefundRequestDTO dto); + + /** + * 撤销出库 + * @param id + */ + void cancelOutStockById(Long id); + + /** + * 根据ids恢复出库或入库 + * @param ids + */ + void revertByIds(Long[] ids); + } diff --git a/src/main/java/com/zg/project/wisdom/service/impl/DdTaskServiceImpl.java b/src/main/java/com/zg/project/wisdom/service/impl/DdTaskServiceImpl.java index 526750b..e32f2da 100644 --- a/src/main/java/com/zg/project/wisdom/service/impl/DdTaskServiceImpl.java +++ b/src/main/java/com/zg/project/wisdom/service/impl/DdTaskServiceImpl.java @@ -7,7 +7,6 @@ import com.zg.common.utils.DateUtils; import com.zg.common.utils.SecurityUtils; import com.zg.common.utils.StringUtils; import com.zg.common.utils.http.HttpUtils; -import com.zg.framework.web.domain.AjaxResult; import com.zg.project.information.mapper.MtdMapper; import com.zg.project.wisdom.domain.AgvTaskResult; import com.zg.project.wisdom.domain.AgyWcs; @@ -20,17 +19,11 @@ import com.zg.project.wisdom.mapper.AgyWcsMapper; import com.zg.project.wisdom.mapper.DdTaskMapper; import com.zg.project.wisdom.mapper.WcsTaskResultMapper; import com.zg.project.wisdom.service.IDdTaskService; -import org.apache.commons.lang3.RandomUtils; -import org.apache.commons.lang3.math.NumberUtils; -import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.text.SimpleDateFormat; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; import java.util.*; import static com.zg.framework.datasource.DynamicDataSourceContextHolder.log; diff --git a/src/main/java/com/zg/project/wisdom/service/impl/RkInfoServiceImpl.java b/src/main/java/com/zg/project/wisdom/service/impl/RkInfoServiceImpl.java index b7993f1..4d88a32 100644 --- a/src/main/java/com/zg/project/wisdom/service/impl/RkInfoServiceImpl.java +++ b/src/main/java/com/zg/project/wisdom/service/impl/RkInfoServiceImpl.java @@ -124,6 +124,7 @@ public class RkInfoServiceImpl implements IRkInfoService return list; } + /** * 修改库存单据主 * @@ -139,29 +140,118 @@ public class RkInfoServiceImpl implements IRkInfoService } /** - * 批量删除库存单据主 + * 批量处理撤销入库 / 撤销出库的逻辑(不是通用删除接口) * - * @param ids 需要删除的库存单据主主键 - * @return 结果 + * 规则说明: + * - isChuku = 4:表示撤销入库 + * - 若存在 gysJhId 和 realQty,则处理供应计划回补 + * - 最终物理删除该库存单据 + * - isChuku = 5:表示撤销出库 + * - 不删除,只将 isChuku 改为 0(未出库状态) + * - 其他 isChuku 状态:不做任何处理 + * + * @param ids 需要处理的库存单据ID数组(必须是入库/出库撤销) + * @return 实际删除的条数(仅统计撤销入库场景) */ @Override - public int deleteRkInfoByIds(Long[] ids) - { - return rkInfoMapper.deleteRkInfoByIds(ids); + @Transactional(rollbackFor = Exception.class) + public int deleteRkInfoByIds(Long[] ids) { + int deleteCount = 0; + Date now = new Date(); + String userId = SecurityUtils.getUserId().toString(); + + for (Long id : ids) { + RkInfo info = rkInfoMapper.selectRkInfoById(id); + if (info == null) continue; + + String isChuku = info.getIsChuku(); + + // 撤销出库:只更新状态为“未出库”,不删除 + if ("5".equals(isChuku)) { + info.setIsChuku("0"); + info.setUpdateBy(userId); + info.setUpdateTime(now); + rkInfoMapper.updateRkInfo(info); + continue; + } + + // 撤销入库:更新供应计划,删除单据 + if ("4".equals(isChuku)) { + Long gysJhId = info.getGysJhId(); + BigDecimal realQty = info.getRealQty(); + + if (gysJhId != null && realQty != null) { + GysJh jh = gysJhMapper.selectGysJhById(gysJhId); + if (jh != null) { + String status = jh.getStatus(); + if ("2".equals(status)) { + // 回补 jh_qty,改为未到货 + BigDecimal updatedQty = (jh.getJhQty() == null ? BigDecimal.ZERO : new BigDecimal(jh.getJhQty())) + .add(realQty); + jh.setJhQty(updatedQty.longValue()); + jh.setStatus("0"); + jh.setUpdateBy(userId); + jh.setUpdateTime(now); + gysJhMapper.updateGysJh(jh); + } else if ("1".equals(status)) { + // 只更新状态 + jh.setStatus("0"); + jh.setUpdateBy(userId); + jh.setUpdateTime(now); + gysJhMapper.updateGysJh(jh); + } + } + } + + rkInfoMapper.deleteRkInfoById(id); + deleteCount++; + } + } + + return deleteCount; } /** * 删除库存单据主信息 * - * @param id 库存单据主主键 + * @param * @return 结果 */ + /** + * 撤销入库单据,并根据供应计划状态回退数量或修改状态 + * 逻辑说明: + * - 如果供应计划ID存在,查询对应供应计划记录 + * - 若状态为“2”(部分出库)且实际入库数量 realQty 不为空: + * - 将供应计划中的 jhQty 加上 realQty 回退数量 + * - 并将状态修改为“0”(未入库) + * - 若状态不是“2”,也将状态修改为“0” + * - 最后根据入库单据ID删除 rk_info 表中的对应入库记录 + * + * @param dto 包含主键id、实际入库数量realQty、供应计划IDgysJhId + * @return 删除成功的记录数 + */ @Override - public int deleteRkInfoById(Long id) - { - return rkInfoMapper.deleteRkInfoById(id); + @Transactional(rollbackFor = Exception.class) + public int deleteRkInfoById(RkCancelDTO dto) { + Long id = dto.getId(); // 获取要撤销的入库记录ID + + // 校验是否存在 + RkInfo rkInfo = rkInfoMapper.selectRkInfoById(id); + if (rkInfo == null) { + throw new ServiceException("入库记录不存在"); + } + + // 仅更新 is_chuku 字段为 "4" 表示已撤销 + RkInfo update = new RkInfo(); + update.setId(id); + update.setIsChuku("4"); // 4 = 已撤销 + update.setUpdateBy(SecurityUtils.getUsername()); + update.setUpdateTime(DateUtils.getNowDate()); + + return rkInfoMapper.updateRkInfo(update); } + /** * 新增入库单据 * @param dto @@ -796,4 +886,56 @@ public class RkInfoServiceImpl implements IRkInfoService return rows; } + + @Override + public void cancelOutStockById(Long id) { + // 构造只更新 is_chuku 字段的对象 + RkInfo update = new RkInfo(); + update.setId(id); + update.setIsChuku("5"); + update.setUpdateBy(SecurityUtils.getUsername()); + update.setUpdateTime(DateUtils.getNowDate()); + + // 执行更新 + rkInfoMapper.updateRkInfo(update); + } + + /** + * 根据 IDs 恢复入库或出库状态(撤销撤销操作) + * + * 说明: + * - 如果 isChuku = 4(撤销入库),改为 0(已入库); + * - 如果 isChuku = 5(撤销出库),改为 1(已出库); + * - 其他状态不处理; + * + * @param ids 单据 ID 数组 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void revertByIds(Long[] ids) { + Date now = new Date(); + String userId = SecurityUtils.getUserId().toString(); + + for (Long id : ids) { + RkInfo info = rkInfoMapper.selectRkInfoById(id); + if (info == null) continue; + + String isChuku = info.getIsChuku(); + + if ("4".equals(isChuku)) { + // 撤销入库 -> 恢复为已入库 + info.setIsChuku("0"); + info.setUpdateBy(userId); + info.setUpdateTime(now); + rkInfoMapper.updateRkInfo(info); + } else if ("5".equals(isChuku)) { + // 撤销出库 -> 恢复为已出库 + info.setIsChuku("1"); + info.setUpdateBy(userId); + info.setUpdateTime(now); + rkInfoMapper.updateRkInfo(info); + } + } + } + } diff --git a/src/main/java/com/zg/project/wisdom/utils/BillNoUtil.java b/src/main/java/com/zg/project/wisdom/utils/BillNoUtil.java index e8fe136..24a7ee0 100644 --- a/src/main/java/com/zg/project/wisdom/utils/BillNoUtil.java +++ b/src/main/java/com/zg/project/wisdom/utils/BillNoUtil.java @@ -2,19 +2,33 @@ package com.zg.project.wisdom.utils; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; public class BillNoUtil { + // 内存缓存:key = prefix + date,value = 当前递增号 + private static final Map DAILY_SEQUENCE_MAP = new ConcurrentHashMap<>(); + /** - * 生成当天单据号:支持传入前缀(如 "RK" 或 "CK") - * 示例结果:RK20240610153015999 + * 生成当天单据号(格式:RK20250731_1、CK20250731_2) + * @param prefix 单据前缀(如 RK 或 CK) + * @return 单据号 */ - public static String generateTodayBillNo(String prefix) { + public static synchronized String generateTodayBillNo(String prefix) { if (prefix == null || prefix.trim().isEmpty()) { - prefix = "RK"; // 默认用 RK + prefix = "RK"; } - String time = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()); - return prefix + time; + // 获取当天日期字符串 yyyyMMdd + String today = new SimpleDateFormat("yyyyMMdd").format(new Date()); + String key = prefix + today; + + // 获取并递增序号 + AtomicInteger counter = DAILY_SEQUENCE_MAP.computeIfAbsent(key, k -> new AtomicInteger(1)); + int sequence = counter.getAndIncrement(); + + return prefix + today + "_" + sequence; } } diff --git a/src/main/resources/mybatis/information/MtdMapper.xml b/src/main/resources/mybatis/information/MtdMapper.xml index 53e4ed5..6950c27 100644 --- a/src/main/resources/mybatis/information/MtdMapper.xml +++ b/src/main/resources/mybatis/information/MtdMapper.xml @@ -1,66 +1,97 @@ - - + - - - - - - - - - - - + + + + + + + + + + + - + + select Id, mid, des_mat, grp, unt, uprc, btpe, mtpe, stpe from mtd + - + - AND mid = #{mid} - AND des_mat like concat('%', #{desMat}, '%') - AND grp = #{grp} - AND unt = #{unt} + AND mid LIKE CONCAT('%', #{mid}, '%') + AND des_mat LIKE CONCAT('%', #{desMat}, '%') + AND grp LIKE CONCAT('%', #{grp}, '%') + AND unt LIKE CONCAT('%', #{unt}, '%') + AND uprc LIKE CONCAT('%', #{uprc}, '%') + AND btpe LIKE CONCAT('%', #{btpe}, '%') + AND mtpe LIKE CONCAT('%', #{mtpe}, '%') + AND stpe LIKE CONCAT('%', #{stpe}, '%') + + - - INSERT INTO mtd (mid, des_mat, grp, unt, uprc, btpe, mtpe, stpe) - VALUES (#{mid}, #{desMat}, #{grp}, #{unt}, #{uprc}, #{btpe}, #{mtpe}, #{stpe}) + + insert into mtd + + mid, + des_mat, + grp, + unt, + uprc, + btpe, + mtpe, + stpe, + + + #{mid}, + #{desMat}, + #{grp}, + #{unt}, + #{uprc}, + #{btpe}, + #{mtpe}, + #{stpe}, + - UPDATE mtd - SET mid = #{mid}, - des_mat = #{desMat}, - grp = #{grp}, - unt = #{unt}, - uprc = #{uprc}, - btpe = #{btpe}, - mtpe = #{mtpe}, - stpe = #{stpe} - WHERE id = #{id} + update mtd + + mid = #{mid}, + des_mat = #{desMat}, + grp = #{grp}, + unt = #{unt}, + uprc = #{uprc}, + btpe = #{btpe}, + mtpe = #{mtpe}, + stpe = #{stpe}, + + where Id = #{Id} - DELETE FROM mtd WHERE id = #{id} + delete from mtd where Id = #{Id} - - DELETE FROM mtd WHERE id IN - - #{id} + + delete from mtd where Id in + + #{Id} - - + \ No newline at end of file diff --git a/src/main/resources/mybatis/wisdom/GysJhMapper.xml b/src/main/resources/mybatis/wisdom/GysJhMapper.xml index 7c58aa9..0f35c8e 100644 --- a/src/main/resources/mybatis/wisdom/GysJhMapper.xml +++ b/src/main/resources/mybatis/wisdom/GysJhMapper.xml @@ -37,13 +37,31 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/src/main/resources/mybatis/wisdom/RkInfoMapper.xml b/src/main/resources/mybatis/wisdom/RkInfoMapper.xml index 41299f0..292c3b3 100644 --- a/src/main/resources/mybatis/wisdom/RkInfoMapper.xml +++ b/src/main/resources/mybatis/wisdom/RkInfoMapper.xml @@ -74,7 +74,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ri.ly_time, ri.borrow_time, ri.return_time, ri.xj, ri.xm_no, ri.xm_ms, ri.wl_no, ri.wl_ms,ri.xm_no_ck, ri.xm_ms_ck, - ri.gys_no, ri.gys_mc, ri.jh_amt, ri.ht_dj, ri.sap_no, ri.xh, + ri.gys_no, ri.gys_mc, ri.jh_amt, ri.ht_dj, ri.sap_no, ri.xh,ri.gys_jh_id, ri.jh_qty, ri.ht_qty, ri.dw, ri.real_qty, ri.pcode, ri.pcode_id, ri.tray_code, ri.entity_id, ri.create_by, ri.create_time, ri.update_by, ri.update_time, ri.is_delete, @@ -166,34 +166,42 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + update rk_info