rsf-admin/.env
@@ -1,3 +1,3 @@ VITE_BASE_IP=192.168.4.24 VITE_BASE_IP=192.168.4.13 # VITE_BASE_IP=47.76.147.249 VITE_BASE_PORT=8080 rsf-admin/src/i18n/zh.js
@@ -679,8 +679,8 @@ }, task: { taskCode: "任务号", taskStatus: "任务状态", taskType: "任务类型", taskStatus: "状态", taskType: "类型", orgLoc: "源库位", orgSite: "源站点", targLoc: "目标库位", rsf-admin/src/page/task/TaskList.jsx
@@ -78,7 +78,6 @@ <TextInput source="expCode" label="table.field.task.expCode" />, <DateInput source="startTime" label="table.field.task.startTime" />, <DateInput source="endTime" label="table.field.task.endTime" />, <TextInput label="common.field.memo" source="memo" />, <SelectInput label="common.field.status" @@ -132,8 +131,8 @@ > <NumberField source="id" /> <TextField source="taskCode" label="table.field.task.taskCode" /> <NumberField source="taskStatus" label="table.field.task.taskStatus" /> <NumberField source="taskType" label="table.field.task.taskType" /> <NumberField source="taskStatus$" label="table.field.task.taskStatus" /> <NumberField source="taskType$" label="table.field.task.taskType" /> <TextField source="orgLoc" label="table.field.task.orgLoc" /> <TextField source="orgSite" label="table.field.task.orgSite" /> <TextField source="targLoc" label="table.field.task.targLoc" /> @@ -144,9 +143,6 @@ <TextField source="expDesc" label="table.field.task.expDesc" /> <NumberField source="sort" label="table.field.task.sort" /> <TextField source="expCode" label="table.field.task.expCode" /> <DateField source="startTime" label="table.field.task.startTime" showTime /> <DateField source="endTime" label="table.field.task.endTime" showTime /> <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> <TextField source="nickname" /> </ReferenceField> rsf-admin/src/page/taskItem/TaskItemCreate.jsx
@@ -110,13 +110,6 @@ /> </Grid> <Grid item xs={6} display="flex" gap={1}> <TextInput label="table.field.taskItem.sourceCode" source="sourceCode" parse={v => v} /> </Grid> <Grid item xs={6} display="flex" gap={1}> <NumberInput label="table.field.taskItem.matnrId" source="matnrId" @@ -170,13 +163,7 @@ parse={v => v} /> </Grid> <Grid item xs={6} display="flex" gap={1}> <TextInput label="table.field.taskItem.fieldsIndex" source="fieldsIndex" parse={v => v} /> </Grid> <Grid item xs={6} display="flex" gap={1}> <StatusSelectInput /> rsf-admin/src/page/taskItem/TaskItemEdit.jsx
@@ -89,13 +89,6 @@ /> </Stack> <Stack direction='row' gap={2}> <TextInput label="table.field.taskItem.sourceCode" source="sourceCode" parse={v => v} /> </Stack> <Stack direction='row' gap={2}> <NumberInput label="table.field.taskItem.matnrId" source="matnrId" @@ -146,13 +139,6 @@ <TextInput label="table.field.taskItem.model" source="model" parse={v => v} /> </Stack> <Stack direction='row' gap={2}> <TextInput label="table.field.taskItem.fieldsIndex" source="fieldsIndex" parse={v => v} /> </Stack> rsf-admin/src/page/taskItem/TaskItemList.jsx
@@ -62,12 +62,10 @@ <SearchInput source="condition" alwaysOn />, <DateInput label='common.time.after' source="timeStart" alwaysOn />, <DateInput label='common.time.before' source="timeEnd" alwaysOn />, <NumberInput source="taskId" label="table.field.taskItem.taskId" />, <NumberInput source="orderId" label="table.field.taskItem.orderId" />, <NumberInput source="orderType" label="table.field.taskItem.orderType" />, <NumberInput source="orderItemId" label="table.field.taskItem.orderItemId" />, <TextInput source="sourceCode" label="table.field.taskItem.sourceCode" />, <NumberInput source="matnrId" label="table.field.taskItem.matnrId" />, <TextInput source="maktx" label="table.field.taskItem.maktx" />, <TextInput source="matnrCode" label="table.field.taskItem.matnrCode" />, @@ -76,8 +74,6 @@ <TextInput source="batch" label="table.field.taskItem.batch" />, <TextInput source="spec" label="table.field.taskItem.spec" />, <TextInput source="model" label="table.field.taskItem.model" />, <TextInput source="fieldsIndex" label="table.field.taskItem.fieldsIndex" />, <TextInput label="common.field.memo" source="memo" />, <SelectInput label="common.field.status" @@ -134,7 +130,6 @@ <NumberField source="orderId" label="table.field.taskItem.orderId" /> <NumberField source="orderType" label="table.field.taskItem.orderType" /> <NumberField source="orderItemId" label="table.field.taskItem.orderItemId" /> <TextField source="sourceCode" label="table.field.taskItem.sourceCode" /> <NumberField source="matnrId" label="table.field.taskItem.matnrId" /> <TextField source="maktx" label="table.field.taskItem.maktx" /> <TextField source="matnrCode" label="table.field.taskItem.matnrCode" /> @@ -143,7 +138,6 @@ <TextField source="batch" label="table.field.taskItem.batch" /> <TextField source="spec" label="table.field.taskItem.spec" /> <TextField source="model" label="table.field.taskItem.model" /> <TextField source="fieldsIndex" label="table.field.taskItem.fieldsIndex" /> <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> <TextField source="nickname" /> rsf-admin/src/page/taskItem/TaskItemPanel.jsx
@@ -66,12 +66,6 @@ </Grid> <Grid item xs={6}> <PanelTypography title="table.field.taskItem.sourceCode" property={record.sourceCode} /> </Grid> <Grid item xs={6}> <PanelTypography title="table.field.taskItem.matnrId" property={record.matnrId} /> @@ -116,12 +110,6 @@ <PanelTypography title="table.field.taskItem.model" property={record.model} /> </Grid> <Grid item xs={6}> <PanelTypography title="table.field.taskItem.fieldsIndex" property={record.fieldsIndex} /> </Grid> rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
@@ -3,11 +3,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.controller.params.CheckObjParams; import com.vincent.rsf.server.api.controller.params.OtherReceiptParams; import com.vincent.rsf.server.api.controller.params.ReceiptParams; import com.vincent.rsf.server.api.service.MobileService; import com.vincent.rsf.server.manager.controller.params.WaitPakinParam; import com.vincent.rsf.server.manager.entity.AsnOrderItem; import com.vincent.rsf.server.manager.entity.QlyIsptItem; import com.vincent.rsf.server.system.controller.BaseController; import com.vincent.rsf.server.system.controller.param.LoginParam; import io.swagger.annotations.Api; @@ -132,7 +134,6 @@ return mobileService.getDeltByCode(code); } @PreAuthorize("hasAuthority('manager:waitPakin:update')") @ApiOperation("组拖") @PostMapping("/waitPakin/merge") @@ -163,7 +164,44 @@ 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()); } @ApiOperation("提交报检") @GetMapping("/inspect/confirm/{id}") @PreAuthorize("hasAuthority('manager:waitPakin:list')") public R confirmInspect(@PathVariable String id) { if (Objects.isNull(id)) { throw new CoolException("参数不能为空!"); } return mobileService.confirmIspt(id); } @PreAuthorize("hasAuthority('manager:qlyInspect:list')") @PostMapping("/inspect/query") public R checkObjs(@RequestBody CheckObjParams params) { if (Objects.isNull(params)) { return R.error("参数不能为空!!"); } return mobileService.checkObjs(params); } @PreAuthorize("hasAuthority('manager:qlyInspect:update')") @PostMapping("/inspect/check/update") public R checkUpdate(@RequestBody QlyIsptItem params) { if (Objects.isNull(params)) { throw new CoolException("参数不能为空!!"); } return mobileService.checkUpdate(params); } } rsf-server/src/main/java/com/vincent/rsf/server/api/controller/params/CheckObjParams.java
New file @@ -0,0 +1,23 @@ package com.vincent.rsf.server.api.controller.params; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; import java.io.Serializable; @Data @Accessors(chain = true) @ApiModel(value = "CheckObjParams", description = "获取质检信息") public class CheckObjParams implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty("质检单") private String isptCode; @ApiModelProperty("物料编码") private String matnrCode; } rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/CheckObjDto.java
New file @@ -0,0 +1,39 @@ package com.vincent.rsf.server.api.entity.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.experimental.Accessors; import java.io.Serializable; @Data @Accessors(chain = true) @ApiModel(value = "CheckObjDto", description = "PDA质检信息") public class CheckObjDto implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty("质检单") private String isptCode; @ApiModelProperty("物料编码") private String matnrCode; @ApiModelProperty("物料名称") private String maktx; @ApiModelProperty("单号") private String asnCode; @ApiModelProperty("供应商名称") private String splrName; @ApiModelProperty("供应商批次") private String splrBatch; @ApiModelProperty("收货数量") private Double rcptQty; @ApiModelProperty("合格数量") private Double safeQty; @ApiModelProperty("不合格数量") private Double disQty; @ApiModelProperty("图片路径") private String picPath; @ApiModelProperty("备注") private String memo; } rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/InspectDetlDto.java
New file @@ -0,0 +1,28 @@ 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("单号ID") private Long id; @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
@@ -1,10 +1,12 @@ package com.vincent.rsf.server.api.service; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.server.api.controller.params.CheckObjParams; import com.vincent.rsf.server.api.controller.params.OtherReceiptParams; import com.vincent.rsf.server.api.controller.params.ReceiptParams; import com.vincent.rsf.server.manager.controller.params.WaitPakinParam; import com.vincent.rsf.server.manager.entity.AsnOrder; import com.vincent.rsf.server.manager.entity.QlyIsptItem; import com.vincent.rsf.server.manager.entity.WaitPakin; import com.vincent.rsf.server.system.controller.param.LoginParam; import com.vincent.rsf.server.system.entity.Fields; @@ -40,4 +42,12 @@ WaitPakin mergeItems(WaitPakinParam waitPakin); WaitPakin unBind(WaitPakinParam param); R inspect(String code, Long loginUserId); R confirmIspt(String id); R checkObjs(CheckObjParams params); R checkUpdate(QlyIsptItem params); } rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -4,8 +4,12 @@ import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.controller.params.CheckObjParams; 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.CheckObjDto; 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; @@ -14,6 +18,7 @@ import com.vincent.rsf.server.common.security.JwtSubject; import com.vincent.rsf.server.common.utils.CommonUtil; import com.vincent.rsf.server.common.utils.JwtUtil; import com.vincent.rsf.server.manager.controller.params.IsptItemsParams; import com.vincent.rsf.server.manager.controller.params.WaitPakinParam; import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.mapper.*; @@ -70,18 +75,22 @@ private WarehouseAreasService warehouseAreasService; @Resource private AsnOrderItemMapper asnOrderItemMapper; @Resource private AsnOrderMapper asnOrderMapper; @Autowired private AsnOrderService asnOrderMapper; @Resource private MatnrMapper matnrMapper; @Resource private QlyInspectMapper qlyInspectMapper; @Autowired private QlyIsptItemService qlyIsptItemService; @Resource private StockItemMapper stockItemMapper; @Resource private PurchaseItemMapper purchaseItemMapper; @Resource private FieldsMapper fieldsMapper; @Autowired private IsptHistoriesMapper isptHistoriesMapper; @Autowired private AsnOrderLogService asnOrderLogService; @@ -188,14 +197,14 @@ String asnCode = receipts.stream().findFirst().get().getAsnCode(); AsnOrder asnOrder = asnOrderMapper.selectOne(new LambdaQueryWrapper<AsnOrder>() AsnOrder asnOrder = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>() .eq(AsnOrder::getCode, asnCode)); if (Objects.isNull(asnOrder)) { throw new CoolException("数据错误:主单不存在!!"); } asnOrder.setQty(receiptQty); if (asnOrderMapper.updateById(asnOrder) < 1) { if (!asnOrderMapper.updateById(asnOrder)) { throw new CoolException("已收货数量修改失败!!"); } @@ -308,7 +317,7 @@ * @time 2025/3/19 19:53 */ private void operateOrderLogs(AsnOrder asnOrder) { if (asnOrderMapper.deleteById(asnOrder.getId()) < 1) { if (!asnOrderMapper.removeById(asnOrder.getId())) { throw new CoolException("原单据删除失败!!"); } @@ -370,7 +379,7 @@ */ @Override public List<AsnOrder> getAllAsnOrders() { List<AsnOrder> asnOrders = asnOrderMapper.selectList(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getWkType, OrderWorkType.ORDER_PURCHASE_IN.type)); List<AsnOrder> asnOrders = asnOrderMapper.list(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getWkType, OrderWorkType.ORDER_PURCHASE_IN.type)); return asnOrders; } @@ -421,6 +430,132 @@ } /** * 报检功能 * @param code * @param loginUserId * @return */ @Override public R inspect(String code, Long loginUserId) { AsnOrder asnOrders = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, code)); if (Objects.isNull(asnOrders)) { throw new CoolException("单据不存在!!"); } InspectDetlDto detlDto = new InspectDetlDto(); detlDto.setCode(asnOrders.getCode()).setId(asnOrders.getId()).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); } /** * @author Ryan * @description 提交报检 * @param * @return * @time 2025/4/1 16:47 */ @Override public R confirmIspt(String id) { if (org.apache.commons.lang3.StringUtils.isBlank(id)) { throw new CoolException("参数不能为空!!"); } AsnOrder asnOrder = asnOrderMapper.getById(id); if (Objects.isNull(asnOrder)) { throw new CoolException("单据不存在!!"); } List<AsnOrder> orders = new ArrayList<>(); orders.add(asnOrder); if (asnOrderMapper.notifyInspect(orders)) { return R.ok("上报成功!!"); }else { return R.error("上报失败!!"); } } /** * 通过物料,质检单获取需要质检单据 * @param params * @return */ @Override public R checkObjs(CheckObjParams params) { if (Objects.isNull(params.getIsptCode())) { throw new CoolException("质检单不能为空"); } if (Objects.isNull(params.getMatnrCode())) { throw new CoolException("物料编码不能为空!"); } QlyInspect inspect = qlyInspectMapper.selectOne(new LambdaQueryWrapper<QlyInspect>().eq(QlyInspect::getCode, params.getIsptCode())); if (Objects.isNull(inspect)) { throw new CoolException("质检单据不存在!!"); } QlyIsptItem isptItem = qlyIsptItemService.getOne(new LambdaQueryWrapper<QlyIsptItem>() .eq(QlyIsptItem::getMatnrCode, params.getMatnrCode()) .eq(QlyIsptItem::getIspectId, inspect.getId())); if (Objects.isNull(isptItem)) { throw new CoolException("质检单明细不存在!!"); } CheckObjDto objDto = new CheckObjDto(); objDto.setIsptCode(inspect.getCode()) .setAsnCode(inspect.getAsnCode()) .setMatnrCode(isptItem.getMatnrCode()) .setMaktx(isptItem.getMaktx()) .setDisQty(isptItem.getDisQty()) .setRcptQty(isptItem.getRcptQty()) .setSplrBatch(isptItem.getSplrBatch()) .setSplrName(isptItem.getSplrName()) .setPicPath(isptItem.getPicPath()) .setMemo(isptItem.getMemo()) .setSafeQty(isptItem.getSafeQty()); return R.ok(objDto); } /** * 快速质检 * @param params * @return */ @Override public R checkUpdate(QlyIsptItem params) { if (Objects.isNull(params.getId()) || Objects.isNull(params.getIspectId())) { throw new CoolException("参数不能为空!!"); } IsptItemsParams itemsParams = new IsptItemsParams(); List<QlyIsptItem> items = new ArrayList<>(); items.add(params); itemsParams.setIsptItem(items).setType("0"); if (qlyIsptItemService.batchUpdate(itemsParams)) { return R.ok(); } else { return R.error("保存失败!!"); } } /** * 获取ReceiptDetlsDtos */ private R getAsnOrderItem(List<AsnOrderItem> items) { @@ -431,6 +566,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/common/CodeBuilder.java
New file @@ -0,0 +1,49 @@ package com.vincent.rsf.server.common; import com.vincent.rsf.framework.generators.ReactGenerator; import com.vincent.rsf.framework.generators.constant.SqlOsType; /** * Created by vincent on 2019-06-04 */ public class CodeBuilder { public static void main(String[] args) throws Exception { ReactGenerator generator = new ReactGenerator(); generator.backendPrefixPath = "rsf-server/"; generator.frontendPrefixPath = "rsf-admin/"; generator.sqlOsType = SqlOsType.MYSQL; generator.url="192.168.4.24:3306/rsf"; generator.username="root"; generator.password="34821015"; // generator.url="47.97.1.152:51433;databasename=jkasrs"; // generator.username="sa"; // generator.password="Zoneyung@zy56$"; generator.table="man_ispt_histories"; generator.tableDesc="任务工作档"; generator.packagePath="com.vincent.rsf.server.manager"; generator.build(); } /* CREATE TABLE `man_tablename` ( `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID', `code` VARCHAR(255) DEFAULT NULL COMMENT '编号', `name` VARCHAR(255) DEFAULT NULL COMMENT '名称(*)', `status` INT(1) NOT NULL DEFAULT '1' COMMENT '状态{1:正常,0:冻结}', `deleted` INT(1) NOT NULL DEFAULT '0' COMMENT '是否删除{1:是,0:否}', `tenant_id` INT(11) DEFAULT NULL COMMENT '租户[sys_tenant]', `create_by` BIGINT(20) DEFAULT NULL COMMENT '添加人员[sys_user]', `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间', `update_by` BIGINT(20) DEFAULT NULL COMMENT '修改人员[sys_user]', `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', `memo` VARCHAR(255) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8; */ } 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/QlyIsptItemController.java
@@ -114,7 +114,7 @@ } @PreAuthorize("hasAuthority('manager:qlyIsptItem:update')") @ApiOperation("批量修改") @ApiOperation("快速质检") @PostMapping("/qlyIsptItem/batch/update") public R batchUpdate(@RequestBody IsptItemsParams params) { if (Objects.isNull(params)) { 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/AsnOrderServiceImpl.java
@@ -59,6 +59,9 @@ throw new CoolException("ASN单据不能为空!!"); } List<PoItemsDto> items = purchaseMapper.poList(asnIds); if (items.isEmpty()) { throw new CoolException("物料所属采购单据不存在!!"); } if (reportMsgService.reportInspectNotify(items)) { return true; } else { @@ -74,7 +77,6 @@ List<AsnOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>() .like(!Objects.isNull(params.get("maktx")), AsnOrderItem::getMaktx, params.get("maktx")) .eq(!Objects.isNull(params.get("matnrCode")), AsnOrderItem::getMatnrCode, params.get("matnrCode"))); if (orderItems.isEmpty()) { return new ArrayList<>(); } 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