rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
@@ -163,7 +163,16 @@ return R.error("跟踪码不能为空!!"); } return R.ok(mobileService.unBind(param)); } @ApiOperation("报检") @GetMapping("/asnOrder/inspect/{code}") @PreAuthorize("hasAuthority('manager:waitPakin:list')") public R getAsnOdrers(@PathVariable String code) { if (Objects.isNull(code)) { throw new CoolException("参数不能为空!!"); } return mobileService.inspect(code, getLoginUserId()); } } rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/InspectDetlDto.java
New file @@ -0,0 +1,26 @@ package com.vincent.rsf.server.api.entity.dto; import com.vincent.rsf.server.manager.entity.IsptHistories; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; import java.util.List; @Data @Accessors(chain = true) @ApiModel(value = "InspectDetlDto", description = "上报明细") public class InspectDetlDto { @ApiModelProperty("单号") private String code; @ApiModelProperty("PO单号") private String poCode; @ApiModelProperty("明细") private List<InspectItemDto> items; @ApiModelProperty("上报历史") private List<IsptHistories> histories; } rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/InspectItemDto.java
New file @@ -0,0 +1,31 @@ package com.vincent.rsf.server.api.entity.dto; import io.swagger.annotations.Api; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; @Data @Accessors(chain = true) @ApiModel(value = "InspectItemDto", description = "PDA报检明细") public class InspectItemDto { @ApiModelProperty("物料名称") private String maktx; @ApiModelProperty("分组编码") private String groupCode; @ApiModelProperty("分组名称") private String group; @ApiModelProperty("物料编码") private String matnrCode; @ApiModelProperty("采购单位") private String purUnit; @ApiModelProperty("采购数量") private Double purQty; @ApiModelProperty("供应商名称") private String suplierName; @ApiModelProperty("供应商编码") private String suplierCode; } rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/ReceiptDetlsDto.java
@@ -46,6 +46,9 @@ @ApiModelProperty("最大库存") private Double maxQty; @ApiModelProperty("已收货数量") private Double qty; @ApiModelProperty("平台行号") private String platformId; rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
@@ -40,4 +40,6 @@ WaitPakin mergeItems(WaitPakinParam waitPakin); WaitPakin unBind(WaitPakinParam param); R inspect(String code, Long loginUserId); } rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -6,6 +6,8 @@ import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.controller.params.OtherReceiptParams; import com.vincent.rsf.server.api.controller.params.ReceiptParams; import com.vincent.rsf.server.api.entity.dto.InspectDetlDto; import com.vincent.rsf.server.api.entity.dto.InspectItemDto; import com.vincent.rsf.server.api.entity.dto.ReceiptDetlsDto; import com.vincent.rsf.server.api.entity.enums.OrderWorkType; import com.vincent.rsf.server.api.service.MobileService; @@ -82,6 +84,8 @@ private PurchaseItemMapper purchaseItemMapper; @Resource private FieldsMapper fieldsMapper; @Autowired private IsptHistoriesMapper isptHistoriesMapper; @Autowired private AsnOrderLogService asnOrderLogService; @@ -421,6 +425,47 @@ } /** * 报检功能 * @param code * @param loginUserId * @return */ @Override public R inspect(String code, Long loginUserId) { AsnOrder asnOrders = asnOrderMapper.selectOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, code)); if (Objects.isNull(asnOrders)) { throw new CoolException("单据不存在!!"); } InspectDetlDto detlDto = new InspectDetlDto(); detlDto.setCode(asnOrders.getCode()).setPoCode(asnOrders.getPoCode()); List<AsnOrderItem> orderItems = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnCode, code)); if (orderItems.isEmpty()) { detlDto.setItems(new ArrayList<>()); } else { List<InspectItemDto> itemDtos = new ArrayList<>(); orderItems.forEach(dto -> { InspectItemDto itemDto = new InspectItemDto(); if (!Objects.isNull(dto.getMatnrCode())) { Matnr matnr = matnrMapper.selectOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getCode, dto.getMatnrCode())); itemDto.setGroup(matnr.getGroupCode()); } itemDto.setMaktx(dto.getMaktx()) .setMatnrCode(dto.getMatnrCode()) .setPurUnit(dto.getPurUnit()) .setSuplierCode(dto.getSplrCode()) .setSuplierName(dto.getSplrName()) .setPurQty(dto.getPurQty()); itemDtos.add(itemDto); }); detlDto.setItems(itemDtos); } List<IsptHistories> histories = isptHistoriesMapper.selectList(new LambdaQueryWrapper<IsptHistories>().eq(IsptHistories::getAsnId, asnOrders.getId())); detlDto.setHistories(histories); return R.ok(detlDto); } /** * 获取ReceiptDetlsDtos */ private R getAsnOrderItem(List<AsnOrderItem> items) { @@ -431,6 +476,7 @@ detlsDto.setAsnCode(asnOrderItem.getAsnCode()) .setMaktx(asnOrderItem.getMaktx()) .setBarcode(asnOrderItem.getTrackCode()) .setQty(asnOrderItem.getQty()) .setPoCode(asnOrderItem.getPoCode()) .setAnfme(asnOrderItem.getAnfme()) .setPurQty(asnOrderItem.getPurQty()) rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/IsptHistoriesController.java
New file @@ -0,0 +1,110 @@ package com.vincent.rsf.server.manager.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.server.common.utils.ExcelUtil; import com.vincent.rsf.server.common.annotation.OperationLog; import com.vincent.rsf.server.common.domain.BaseParam; import com.vincent.rsf.server.common.domain.KeyValVo; import com.vincent.rsf.server.common.domain.PageParam; import com.vincent.rsf.server.manager.entity.IsptHistories; import com.vincent.rsf.server.manager.service.IsptHistoriesService; import com.vincent.rsf.server.system.controller.BaseController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.*; @RestController public class IsptHistoriesController extends BaseController { @Autowired private IsptHistoriesService isptHistoriesService; @PreAuthorize("hasAuthority('manager:isptHistories:list')") @PostMapping("/isptHistories/page") public R page(@RequestBody Map<String, Object> map) { BaseParam baseParam = buildParam(map, BaseParam.class); PageParam<IsptHistories, BaseParam> pageParam = new PageParam<>(baseParam, IsptHistories.class); return R.ok().add(isptHistoriesService.page(pageParam, pageParam.buildWrapper(true))); } @PreAuthorize("hasAuthority('manager:isptHistories:list')") @PostMapping("/isptHistories/list") public R list(@RequestBody Map<String, Object> map) { return R.ok().add(isptHistoriesService.list()); } @PreAuthorize("hasAuthority('manager:isptHistories:list')") @PostMapping({"/isptHistories/many/{ids}", "/isptHistoriess/many/{ids}"}) public R many(@PathVariable Long[] ids) { return R.ok().add(isptHistoriesService.listByIds(Arrays.asList(ids))); } @PreAuthorize("hasAuthority('manager:isptHistories:list')") @GetMapping("/isptHistories/{id}") public R get(@PathVariable("id") Long id) { return R.ok().add(isptHistoriesService.getById(id)); } @PreAuthorize("hasAuthority('manager:isptHistories:save')") @OperationLog("Create 任务工作档") @PostMapping("/isptHistories/save") public R save(@RequestBody IsptHistories isptHistories) { isptHistories.setCreateBy(getLoginUserId()); isptHistories.setCreateTime(new Date()); isptHistories.setUpdateBy(getLoginUserId()); isptHistories.setUpdateTime(new Date()); if (!isptHistoriesService.save(isptHistories)) { return R.error("Save Fail"); } return R.ok("Save Success").add(isptHistories); } @PreAuthorize("hasAuthority('manager:isptHistories:update')") @OperationLog("Update 任务工作档") @PostMapping("/isptHistories/update") public R update(@RequestBody IsptHistories isptHistories) { isptHistories.setUpdateBy(getLoginUserId()); isptHistories.setUpdateTime(new Date()); if (!isptHistoriesService.updateById(isptHistories)) { return R.error("Update Fail"); } return R.ok("Update Success").add(isptHistories); } @PreAuthorize("hasAuthority('manager:isptHistories:remove')") @OperationLog("Delete 任务工作档") @PostMapping("/isptHistories/remove/{ids}") public R remove(@PathVariable Long[] ids) { if (!isptHistoriesService.removeByIds(Arrays.asList(ids))) { return R.error("Delete Fail"); } return R.ok("Delete Success").add(ids); } @PreAuthorize("hasAuthority('manager:isptHistories:list')") @PostMapping("/isptHistories/query") public R query(@RequestParam(required = false) String condition) { List<KeyValVo> vos = new ArrayList<>(); LambdaQueryWrapper<IsptHistories> wrapper = new LambdaQueryWrapper<>(); if (!Cools.isEmpty(condition)) { wrapper.like(IsptHistories::getName, condition); } isptHistoriesService.page(new Page<>(1, 30), wrapper).getRecords().forEach( item -> vos.add(new KeyValVo(item.getId(), item.getName())) ); return R.ok().add(vos); } @PreAuthorize("hasAuthority('manager:isptHistories:list')") @PostMapping("/isptHistories/export") public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception { ExcelUtil.build(ExcelUtil.create(isptHistoriesService.list(), IsptHistories.class), response); } } rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/QlyInspectController.java
@@ -126,6 +126,13 @@ @OperationLog("Delete 质检信息") @PostMapping("/qlyInspect/remove/{ids}") public R remove(@PathVariable Long[] ids) { if (Objects.isNull(ids) || ids.length < 1) { return R.error("能数不能为空!!"); } List<QlyInspect> qlyInspects = qlyInspectService.list(new LambdaQueryWrapper<QlyInspect>().in(QlyInspect::getId, ids)); if (!qlyInspects.isEmpty()) { return R.error("有明细列表存在!!"); } if (!qlyInspectService.removeByIds(Arrays.asList(ids))) { return R.error("Delete Fail"); } rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskController.java
@@ -91,11 +91,12 @@ if (Objects.isNull(ids) || ids.length < 1) { return R.error("参数不能为空!!"); } List<TaskItem> list = taskItemService.list(new LambdaQueryWrapper<TaskItem>().in(TaskItem::getTaskId, ids)); if (!list.isEmpty()) { return R.error("有明细列表存在 !!"); } if (!taskService.removeByIds(Arrays.asList(ids))) { return R.error("Delete Fail"); } if (!taskItemService.remove(new LambdaQueryWrapper<TaskItem>().in(TaskItem::getTaskId, ids))) { return R.error("删除失败!!"); } return R.ok("Delete Success").add(ids); } rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinController.java
@@ -12,7 +12,9 @@ import com.vincent.rsf.server.common.domain.PageParam; import com.vincent.rsf.server.manager.controller.params.WaitPakinParam; import com.vincent.rsf.server.manager.entity.WaitPakin; import com.vincent.rsf.server.manager.entity.WaitPakinItem; import com.vincent.rsf.server.manager.service.TaskService; import com.vincent.rsf.server.manager.service.WaitPakinItemService; import com.vincent.rsf.server.manager.service.WaitPakinService; import com.vincent.rsf.server.system.controller.BaseController; import io.swagger.annotations.Api; @@ -31,6 +33,9 @@ @Autowired private WaitPakinService waitPakinService; @Autowired private WaitPakinItemService waitPakinItemService; @Autowired private TaskService taskService; @@ -96,6 +101,11 @@ @OperationLog("Delete 组拖档") @PostMapping("/waitPakin/remove/{ids}") public R remove(@PathVariable Long[] ids) { List<WaitPakinItem> pakinItems = waitPakinItemService.list(new LambdaQueryWrapper<WaitPakinItem>() .in(WaitPakinItem::getPakinId, ids)); if (!pakinItems.isEmpty()) { return R.error("组拖档有明细任务"); } if (!waitPakinService.removeByIds(Arrays.asList(ids))) { return R.error("Delete Fail"); } @@ -130,7 +140,7 @@ if (Objects.isNull(waitPakin) || waitPakin.isEmpty()) { throw new CoolException("参数不能为空!!"); } return taskService.generateTasks(waitPakin); return taskService.generateTasks(waitPakin, getLoginUserId()); } } rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/IsptHistories.java
New file @@ -0,0 +1,202 @@ package com.vincent.rsf.server.manager.entity; import com.baomidou.mybatisplus.annotation.TableLogic; import java.text.SimpleDateFormat; import java.util.Date; import org.springframework.format.annotation.DateTimeFormat; import java.text.SimpleDateFormat; import java.util.Date; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.SpringUtils; import com.vincent.rsf.server.system.service.UserService; import com.vincent.rsf.server.system.entity.User; import java.io.Serializable; import java.util.Date; @Data @TableName("man_ispt_histories") public class IsptHistories implements Serializable { private static final long serialVersionUID = 1L; /** * ID */ @ApiModelProperty(value= "ID") @TableId(value = "id", type = IdType.AUTO) private Long id; /** * 单号 */ @ApiModelProperty(value= "单号") private String code; /** * 上报人员 */ @ApiModelProperty(value= "上报人员") private String operator; /** * 单据ID */ @ApiModelProperty(value= "单据ID") private Long asnId; /** * 名称 */ @ApiModelProperty(value= "名称") private String name; /** * 状态 1: 正常 0: 冻结 */ @ApiModelProperty(value= "状态 1: 正常 0: 冻结 ") private Integer status; /** * 是否删除 1: 是 0: 否 */ @ApiModelProperty(value= "是否删除 1: 是 0: 否 ") @TableLogic private Integer deleted; /** * 租户 */ @ApiModelProperty(value= "租户") private Integer tenantId; /** * 添加人员 */ @ApiModelProperty(value= "添加人员") private Long createBy; /** * 添加时间 */ @ApiModelProperty(value= "添加时间") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date createTime; /** * 修改人员 */ @ApiModelProperty(value= "修改人员") private Long updateBy; /** * 修改时间 */ @ApiModelProperty(value= "修改时间") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date updateTime; /** * 备注 */ @ApiModelProperty(value= "备注") private String memo; public IsptHistories() {} public IsptHistories(String code,String operator,Long asnId,String name,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) { this.code = code; this.operator = operator; this.asnId = asnId; this.name = name; this.status = status; this.deleted = deleted; this.tenantId = tenantId; this.createBy = createBy; this.createTime = createTime; this.updateBy = updateBy; this.updateTime = updateTime; this.memo = memo; } // IsptHistories isptHistories = new IsptHistories( // null, // 单号 // null, // 上报人员 // null, // 单据ID // null, // 名称 // null, // 状态[非空] // null, // 是否删除[非空] // null, // 租户 // null, // 添加人员 // null, // 添加时间[非空] // null, // 修改人员 // null, // 修改时间[非空] // null // 备注 // ); public String getStatus$(){ if (null == this.status){ return null; } switch (this.status){ case 1: return "正常"; case 0: return "冻结"; default: return String.valueOf(this.status); } } public String getCreateBy$(){ UserService service = SpringUtils.getBean(UserService.class); User user = service.getById(this.createBy); if (!Cools.isEmpty(user)){ return String.valueOf(user.getNickname()); } return null; } public String getCreateTime$(){ if (Cools.isEmpty(this.createTime)){ return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); } public String getUpdateBy$(){ UserService service = SpringUtils.getBean(UserService.class); User user = service.getById(this.updateBy); if (!Cools.isEmpty(user)){ return String.valueOf(user.getNickname()); } return null; } public String getUpdateTime$(){ if (Cools.isEmpty(this.updateTime)){ return ""; } return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime); } public Boolean getStatusBool(){ if (null == this.status){ return null; } switch (this.status){ case 1: return true; case 0: return false; default: return null; } } } rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java
@@ -55,9 +55,8 @@ @ApiModelProperty(value= "物料名称") private String maktx; @ApiModelProperty("源编码") private String sourceCode; private Long source; @ApiModelProperty("单据ID") private Long orderId; @@ -119,7 +118,6 @@ * 是否删除 1: 是 0: 否 */ @ApiModelProperty(value= "是否删除 1: 是 0: 否 ") @TableLogic private Integer deleted; /** rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/IsptHistoriesMapper.java
New file @@ -0,0 +1,12 @@ package com.vincent.rsf.server.manager.mapper; import com.vincent.rsf.server.manager.entity.IsptHistories; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; @Mapper @Repository public interface IsptHistoriesMapper extends BaseMapper<IsptHistories> { } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/IsptHistoriesService.java
New file @@ -0,0 +1,8 @@ package com.vincent.rsf.server.manager.service; import com.baomidou.mybatisplus.extension.service.IService; import com.vincent.rsf.server.manager.entity.IsptHistories; public interface IsptHistoriesService extends IService<IsptHistories> { } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java
@@ -9,5 +9,5 @@ public interface TaskService extends IService<Task> { R generateTasks(List<WaitPakin> waitPakin); R generateTasks(List<WaitPakin> waitPakin, Long loginUserId); } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/IsptHistoriesServiceImpl.java
New file @@ -0,0 +1,12 @@ package com.vincent.rsf.server.manager.service.impl; import com.vincent.rsf.server.manager.mapper.IsptHistoriesMapper; import com.vincent.rsf.server.manager.entity.IsptHistories; import com.vincent.rsf.server.manager.service.IsptHistoriesService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @Service("isptHistoriesService") public class IsptHistoriesServiceImpl extends ServiceImpl<IsptHistoriesMapper, IsptHistories> implements IsptHistoriesService { } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -1,7 +1,6 @@ package com.vincent.rsf.server.manager.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.common.SpringUtils; import com.vincent.rsf.server.api.entity.enums.OrderType; import com.vincent.rsf.server.api.entity.enums.TaskStsType; import com.vincent.rsf.framework.common.R; @@ -13,7 +12,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.vincent.rsf.server.manager.utils.LocManageUtil; import com.vincent.rsf.server.system.constant.SerialRuleCode; import com.vincent.rsf.server.system.enums.LocStsType; import com.vincent.rsf.server.system.utils.SerialRuleUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; @@ -30,22 +28,23 @@ @Autowired private WaitPakinService waitPakinService; @Autowired private TaskItemService taskItemService; @Autowired private WaitPakinItemService waitPakinItemService; /** * @param * @param loginUserId * @return * @author Ryan * @description 生成任务列表 * @param * @return * @time 2025/3/29 15:59 */ @Override public R generateTasks(List<WaitPakin> waitPakin) { public R generateTasks(List<WaitPakin> waitPakin, Long loginUserId) { if (Objects.isNull(waitPakin) || waitPakin.isEmpty()) { throw new CoolException("参数不能为空!!"); } @@ -67,6 +66,8 @@ .setTaskType(TaskType.TASK_TYPE_IN.type.shortValue()) .setTargLoc(LocManageUtil.getTargetLoc()) .setBarcode(pakin.getBarcode()) .setCreateBy(loginUserId) .setUpdateBy(loginUserId) .setTargSite(LocManageUtil.getTargetSite()); if (!this.save(task)) { @@ -82,7 +83,9 @@ BeanUtils.copyProperties(item, taskItem); taskItem.setTaskId(task.getId()) .setOrderType(OrderType.ORDER_RECEIPT.type) .setSourceCode(item.getAsnCode()) .setSource(item.getId()) .setCreateBy(loginUserId) .setUpdateBy(loginUserId) .setOrderId(item.getAsnId()) .setOrderItemId(item.getAsnItemId()); taskItems.add(taskItem); @@ -90,6 +93,9 @@ if (!taskItemService.saveBatch(taskItems)) { throw new CoolException("任务明细保存失败!!"); } }); //TODO 任务生成完成需修改任务ASN订单状态为执行中,组拖删除需判断是否有子任务在执行 rsf-server/src/main/resources/mapper/manager/IsptHistoriesMapper.xml
File was renamed from rsf-server/src/main/resources/mapper/test/LocAreaMatMapper.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.vincent.rsf.server.test.mapper.LocAreaMatMapper"> <mapper namespace="com.vincent.rsf.server.manager.mapper.IsptHistoriesMapper"> </mapper> rsf-server/src/main/resources/mapper/test/LocAreaMatRelaMapper.xml
File was deleted rsf-server/src/main/resources/mapper/test/LocMapper.xml
File was deleted rsf-server/src/main/resources/mapper/test/QlyInspectMapper.xml
File was deleted