rsf-admin/src/page/histories/taskLog/TaskItemLogList.jsx
@@ -31,13 +31,15 @@ ReferenceArrayInput, AutocompleteInput, DeleteButton, useRefresh, useGetRecordId, } from 'react-admin'; import { Box, Typography, Card, Stack } from '@mui/material'; import { Box, Typography, Card, Stack, LinearProgress } from '@mui/material'; import { styled } from '@mui/material/styles'; import MyExportButton from '../../components/MyExportButton'; import PageDrawer from "../../components/PageDrawer"; import { PAGE_DRAWER_WIDTH, OPERATE_MODE, DEFAULT_PAGE_SIZE } from '@/config/setting'; import request from '@/utils/request'; const StyledDatagrid = styled(DatagridConfigurable)(({ theme }) => ({ '& .css-1vooibu-MuiSvgIcon-root': { @@ -66,7 +68,6 @@ <NumberInput source="matnrId" label="table.field.taskItemLog.matnrId" />, <TextInput source="maktx" label="table.field.taskItemLog.maktx" />, <TextInput source="matnrCode" label="table.field.taskItemLog.matnrCode" />, <TextInput source="trackCode" label="table.field.taskItemLog.trackCode" />, <TextInput source="unit" label="table.field.taskItemLog.unit" />, <NumberInput source="anfme" label="table.field.taskItemLog.anfme" />, <TextInput source="batch" label="table.field.taskItemLog.batch" />, @@ -108,7 +109,7 @@ title={"menu.taskItemLog"} filters={filters} empty={false} filter={{logId: Number(recodeId) }} filter={{ logId: Number(recodeId) }} sort={{ field: "create_time", order: "desc" }} actions={( <TopToolbar> @@ -119,35 +120,7 @@ )} perPage={DEFAULT_PAGE_SIZE} > <StyledDatagrid preferenceKey='taskItemLog' bulkActionButtons={false} rowClick={(id, resource, record) => false} expandSingle={true} omit={['id', 'createTime', 'createBy', 'memo', 'taskId', 'orderId', 'orderItemId', 'matnrId']} > <NumberField source="id" /> <NumberField source="taskId" label="table.field.taskItemLog.taskId" /> <NumberField source="orderId" label="table.field.taskItemLog.orderId" /> <TextField source="orderType" label="table.field.taskItemLog.orderType" /> <NumberField source="orderItemId" label="table.field.taskItemLog.orderItemId" /> <NumberField source="source" label="table.field.taskItemLog.source" /> <NumberField source="matnrId" label="table.field.taskItemLog.matnrId" /> <TextField source="maktx" label="table.field.taskItemLog.maktx" /> <TextField source="matnrCode" label="table.field.taskItemLog.matnrCode" /> <TextField source="trackCode" label="table.field.taskItemLog.trackCode" /> <TextField source="unit" label="table.field.taskItemLog.unit" /> <NumberField source="anfme" label="table.field.taskItemLog.anfme" /> <TextField source="batch" label="table.field.taskItemLog.batch" /> <TextField source="spec" label="table.field.taskItemLog.spec" /> <TextField source="model" label="table.field.taskItemLog.model" /> <TextField source="updateBy$" label="common.field.updateBy" /> <TextField source="createBy$" label="common.field.createBy" /> <DateField source="updateTime" label="common.field.updateTime" showTime /> <DateField source="createTime" label="common.field.createTime" showTime /> <BooleanField source="statusBool" label="common.field.status" sortable={false} /> <TextField source="memo" label="common.field.memo" sortable={false} /> </StyledDatagrid> <DynamicFields /> </List> <PageDrawer title='TaskItemLog Detail' @@ -159,4 +132,77 @@ ) } const DynamicFields = (props) => { const translate = useTranslate(); const notify = useNotify(); const [columns, setColumns] = useState([]); const { isLoading } = useListContext(); const refresh = useRefresh(); useEffect(() => { getDynamicFields(); }, []); const getDynamicFields = async () => { const { data: { code, data, msg }, } = await request.get("/fields/enable/list"); if (code == 200) { const arr = [ <NumberField source="id" />, <NumberField source="taskId" label="table.field.taskItem.taskId" />, <NumberField source="orderId" label="table.field.taskItem.orderId" />, <TextField source="orderType" label="table.field.taskItemLog.orderType" />, <NumberField source="orderItemId" label="table.field.taskItemLog.orderItemId" />, <NumberField source="source" label="table.field.taskItemLog.source" />, <NumberField source="matnrId" label="table.field.taskItemLog.matnrId" />, <TextField source="maktx" label="table.field.taskItemLog.maktx" />, <TextField source="matnrCode" label="table.field.taskItemLog.matnrCode" />, <TextField source="unit" label="table.field.taskItemLog.unit" />, <NumberField source="anfme" label="table.field.taskItemLog.anfme" />, <TextField source="batch" label="table.field.taskItemLog.batch" />, <TextField source="spec" label="table.field.taskItemLog.spec" />, <TextField source="model" label="table.field.taskItemLog.model" />, <TextField source="memo" label="common.field.memo" sortable={false} /> ] const fields = data.map(el => <TextField key={el.fields} source={`extendFields.[${el.fields}]`} label={el.fieldsAlise} />) const lastArr = [ <TextField source="updateBy$" label="common.field.updateBy" />, <TextField source="createBy$" label="common.field.createBy" />, <DateField source="updateTime" label="common.field.updateTime" showTime />, <DateField source="createTime" label="common.field.createTime" showTime />, <BooleanField source="statusBool" label="common.field.status" sortable={false} />, ] setColumns([...arr, ...fields, ...lastArr]); } else { notify(msg); } } return ( <Box sx={{ position: 'relative', minHeight: "60vh", }}> {isLoading && ( <LinearProgress sx={{ height: "2px", position: 'absolute', top: 0, left: 0, right: 0, }} /> )} {columns.length > 0 && <StyledDatagrid preferenceKey='taskItemLog' bulkActionButtons={false} rowClick={false} // expand={() => <TaskItemPanel />} expandSingle={true} omit={['id', 'createTime', 'orderType', 'createBy', 'memo', 'taskId', 'orderId', 'orderItemId', 'matnrId', 'platWorkCode', 'projectCode', 'statusBool']} > {columns.map((column) => column)} </StyledDatagrid>} </Box> ) } export default TaskItemLogList; rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/TaskItemLogController.java
@@ -1,6 +1,7 @@ package com.vincent.rsf.server.manager.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.R; @@ -9,6 +10,8 @@ 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.common.utils.FieldsUtils; import com.vincent.rsf.server.manager.entity.TaskItem; import com.vincent.rsf.server.manager.entity.TaskItemLog; import com.vincent.rsf.server.manager.service.TaskItemLogService; import com.vincent.rsf.server.system.controller.BaseController; @@ -30,7 +33,16 @@ public R page(@RequestBody Map<String, Object> map) { BaseParam baseParam = buildParam(map, BaseParam.class); PageParam<TaskItemLog, BaseParam> pageParam = new PageParam<>(baseParam, TaskItemLog.class); return R.ok().add(taskItemLogService.page(pageParam, pageParam.buildWrapper(true))); IPage<TaskItemLog> page = taskItemLogService.page(pageParam, pageParam.buildWrapper(true)); List<TaskItemLog> records = page.getRecords(); for (TaskItemLog record : records) { if (!Objects.isNull(record.getFieldsIndex())) { Map<String, String> fields = FieldsUtils.getFields(record.getFieldsIndex()); record.setExtendFields(fields); } } page.setRecords(records); return R.ok().add(page); } @PreAuthorize("hasAuthority('manager:taskItemLog:list')") rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItemLog.java
@@ -1,6 +1,7 @@ package com.vincent.rsf.server.manager.entity; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.*; import java.text.SimpleDateFormat; import java.util.Date; @@ -10,10 +11,7 @@ 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; @@ -23,6 +21,7 @@ import com.vincent.rsf.server.system.entity.User; import java.io.Serializable; import java.util.Date; import java.util.Map; @Data @Accessors(chain = true) @@ -65,6 +64,10 @@ @ApiModelProperty(value= "物料名称") private String maktx; @ApiModelProperty("扩展字段") @TableField(exist = false) private Map<String, String> extendFields; @ApiModelProperty("行号") private String platItemId; rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -746,7 +746,7 @@ locWorking.setAnfme(taskItem.getAnfme()); } BeanUtils.copyProperties(locWorking, locItem); locItem.setWorkQty(0.0).setLocCode(loc.getCode()).setLocId(loc.getId()).setId(null).setUpdateBy(loginUserId).setUpdateTime(new Date()); locItem.setWorkQty(0.0).setQty(0.0).setLocCode(loc.getCode()).setLocId(loc.getId()).setId(null).setUpdateBy(loginUserId).setUpdateTime(new Date()); items.add(locItem); } @@ -1075,7 +1075,6 @@ TaskItem taskItem = taskItems.stream().findFirst().get(); taskItem.setMatnrId(working.getMatnrId()) .setMaktx(working.getMaktx()) .setMatnrId(working.getMatnrId()) .setMatnrCode(working.getMatnrCode()) .setSpec(working.getSpec()) .setAnfme(working.getAnfme()) @@ -1682,8 +1681,8 @@ LocItem locItem = locItemService.getOne(new LambdaQueryWrapper<LocItem>() .eq(LocItem::getMatnrId, taskItem.getMatnrId()) .eq(LocItem::getLocId, loc.getId()) .eq(StringUtils.isNoneBlank(taskItem.getBatch()), LocItem::getBatch, taskItem.getBatch()) .eq(StringUtils.isNoneBlank(taskItem.getFieldsIndex()), LocItem::getFieldsIndex, taskItem.getFieldsIndex())); .eq(StringUtils.isNotBlank(taskItem.getBatch()), LocItem::getBatch, taskItem.getBatch()) .eq(StringUtils.isNotBlank(taskItem.getFieldsIndex()), LocItem::getFieldsIndex, taskItem.getFieldsIndex())); if (Objects.isNull(locItem)) { BeanUtils.copyProperties(taskItem, item); item.setLocCode(loc.getCode()) @@ -1696,11 +1695,12 @@ throw new CoolException("库位明细更新失败!!"); } } else { locItem.setAnfme(Math.round((locItem.getAnfme() + taskItem.getAnfme()) * 1000000) / 1000000.0) .setUpdateTime(new Date()); if (!locItemService.saveOrUpdate(locItem)) { throw new CoolException("库位明细更新失败!!"); } throw new CoolException("当前票号已在库内,请检查后再操作!!"); // locItem.setAnfme(Math.round((locItem.getAnfme() + taskItem.getAnfme()) * 1000000) / 1000000.0) // .setUpdateTime(new Date()); // if (!locItemService.saveOrUpdate(locItem)) { // throw new CoolException("库位明细更新失败!!"); // } } }); rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java
@@ -281,7 +281,7 @@ public void generateOutTask(List<OrderOutItemDto> itemParams, Long loginUserId, Wave wave) throws Exception { Map<Long, List<OrderOutItemDto>> listMap = itemParams.stream().collect(Collectors.groupingBy(OrderOutItemDto::getLocId)); listMap.keySet().forEach(id -> { double sum = listMap.get(id).stream().mapToDouble(OrderOutItemDto::getAnfme).sum(); // double sum = listMap.get(id).stream().mapToDouble(OrderOutItemDto::getAnfme).sum(); List<LocItem> items = new ArrayList<>(); //生成明细 listMap.get(id).forEach(orderOutItemDto -> { @@ -290,7 +290,7 @@ //获取不为空站点 List<OrderOutItemDto> itemDtos = listMap.get(id).stream().filter(orderOutItemDto -> !Objects.isNull(orderOutItemDto.getSitesNo())).collect(Collectors.toList()); OrderOutItemDto itemDto = itemDtos.stream().findFirst().get(); itemDto.setAnfme(sum); // itemDto.setAnfme(sum); LocToTaskParams taskParams = new LocToTaskParams(); Loc loc = locService.getById(itemDto.getLocId()); taskParams.setItems(items)