add: 实现工位能力维护、生产工艺路线维护、班组排班维、工单备注与异常记录、生产任务池

master
zangch@mesnac.com 3 weeks ago
parent d07d8946ce
commit 8d9cd0d896

@ -0,0 +1,76 @@
package com.aucma.production.controller;
import java.util.List;
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.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.aucma.common.annotation.Log;
import com.aucma.common.core.controller.BaseController;
import com.aucma.common.core.domain.AjaxResult;
import com.aucma.common.enums.BusinessType;
import com.aucma.production.domain.ProdOrderNote;
import com.aucma.production.service.IProdOrderNoteService;
import com.aucma.common.utils.poi.ExcelUtil;
import com.aucma.common.core.page.TableDataInfo;
@RestController
@RequestMapping("/production/orderNote")
public class ProdOrderNoteController extends BaseController {
@Autowired
private IProdOrderNoteService prodOrderNoteService;
@PreAuthorize("@ss.hasPermi('production:orderNote:list')")
@GetMapping("/list")
public TableDataInfo list(ProdOrderNote prodOrderNote) {
startPage();
List<ProdOrderNote> list = prodOrderNoteService.selectProdOrderNoteList(prodOrderNote);
return getDataTable(list);
}
@PreAuthorize("@ss.hasPermi('production:orderNote:export')")
@Log(title = "工单备注与异常记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, ProdOrderNote prodOrderNote) {
List<ProdOrderNote> list = prodOrderNoteService.selectProdOrderNoteList(prodOrderNote);
ExcelUtil<ProdOrderNote> util = new ExcelUtil<ProdOrderNote>(ProdOrderNote.class);
util.exportExcel(response, list, "工单备注与异常记录数据");
}
@PreAuthorize("@ss.hasPermi('production:orderNote:query')")
@GetMapping(value = "/{objId}")
public AjaxResult getInfo(@PathVariable("objId") Long objId) {
return success(prodOrderNoteService.selectProdOrderNoteByObjId(objId));
}
@PreAuthorize("@ss.hasPermi('production:orderNote:add')")
@Log(title = "工单备注与异常记录", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody ProdOrderNote prodOrderNote) {
prodOrderNote.setCreatedBy(getUsername());
return toAjax(prodOrderNoteService.insertProdOrderNote(prodOrderNote));
}
@PreAuthorize("@ss.hasPermi('production:orderNote:edit')")
@Log(title = "工单备注与异常记录", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody ProdOrderNote prodOrderNote) {
prodOrderNote.setUpdatedBy(getUsername());
return toAjax(prodOrderNoteService.updateProdOrderNote(prodOrderNote));
}
@PreAuthorize("@ss.hasPermi('production:orderNote:remove')")
@Log(title = "工单备注与异常记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{objIds}")
public AjaxResult remove(@PathVariable Long[] objIds) {
return toAjax(prodOrderNoteService.deleteProdOrderNoteByObjIds(objIds));
}
}

@ -0,0 +1,76 @@
package com.aucma.production.controller;
import java.util.List;
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.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.aucma.common.annotation.Log;
import com.aucma.common.core.controller.BaseController;
import com.aucma.common.core.domain.AjaxResult;
import com.aucma.common.enums.BusinessType;
import com.aucma.production.domain.ProdRoute;
import com.aucma.production.service.IProdRouteService;
import com.aucma.common.utils.poi.ExcelUtil;
import com.aucma.common.core.page.TableDataInfo;
@RestController
@RequestMapping("/production/processRoute")
public class ProdRouteController extends BaseController {
@Autowired
private IProdRouteService prodRouteService;
@PreAuthorize("@ss.hasPermi('production:processRoute:list')")
@GetMapping("/list")
public TableDataInfo list(ProdRoute prodRoute) {
startPage();
List<ProdRoute> list = prodRouteService.selectProdRouteList(prodRoute);
return getDataTable(list);
}
@PreAuthorize("@ss.hasPermi('production:processRoute:export')")
@Log(title = "生产工艺路线", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, ProdRoute prodRoute) {
List<ProdRoute> list = prodRouteService.selectProdRouteList(prodRoute);
ExcelUtil<ProdRoute> util = new ExcelUtil<ProdRoute>(ProdRoute.class);
util.exportExcel(response, list, "生产工艺路线数据");
}
@PreAuthorize("@ss.hasPermi('production:processRoute:query')")
@GetMapping(value = "/{objId}")
public AjaxResult getInfo(@PathVariable("objId") Long objId) {
return success(prodRouteService.selectProdRouteByObjId(objId));
}
@PreAuthorize("@ss.hasPermi('production:processRoute:add')")
@Log(title = "生产工艺路线", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody ProdRoute prodRoute) {
prodRoute.setCreatedBy(getUsername());
return toAjax(prodRouteService.insertProdRoute(prodRoute));
}
@PreAuthorize("@ss.hasPermi('production:processRoute:edit')")
@Log(title = "生产工艺路线", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody ProdRoute prodRoute) {
prodRoute.setUpdatedBy(getUsername());
return toAjax(prodRouteService.updateProdRoute(prodRoute));
}
@PreAuthorize("@ss.hasPermi('production:processRoute:remove')")
@Log(title = "生产工艺路线", businessType = BusinessType.DELETE)
@DeleteMapping("/{objIds}")
public AjaxResult remove(@PathVariable Long[] objIds) {
return toAjax(prodRouteService.deleteProdRouteByObjIds(objIds));
}
}

@ -0,0 +1,76 @@
package com.aucma.production.controller;
import java.util.List;
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.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.aucma.common.annotation.Log;
import com.aucma.common.core.controller.BaseController;
import com.aucma.common.core.domain.AjaxResult;
import com.aucma.common.enums.BusinessType;
import com.aucma.production.domain.ProdStationCapability;
import com.aucma.production.service.IProdStationCapabilityService;
import com.aucma.common.utils.poi.ExcelUtil;
import com.aucma.common.core.page.TableDataInfo;
@RestController
@RequestMapping("/production/stationCapability")
public class ProdStationCapabilityController extends BaseController {
@Autowired
private IProdStationCapabilityService prodStationCapabilityService;
@PreAuthorize("@ss.hasPermi('production:stationCapability:list')")
@GetMapping("/list")
public TableDataInfo list(ProdStationCapability prodStationCapability) {
startPage();
List<ProdStationCapability> list = prodStationCapabilityService.selectProdStationCapabilityList(prodStationCapability);
return getDataTable(list);
}
@PreAuthorize("@ss.hasPermi('production:stationCapability:export')")
@Log(title = "工位能力维护", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, ProdStationCapability prodStationCapability) {
List<ProdStationCapability> list = prodStationCapabilityService.selectProdStationCapabilityList(prodStationCapability);
ExcelUtil<ProdStationCapability> util = new ExcelUtil<ProdStationCapability>(ProdStationCapability.class);
util.exportExcel(response, list, "工位能力维护数据");
}
@PreAuthorize("@ss.hasPermi('production:stationCapability:query')")
@GetMapping(value = "/{objId}")
public AjaxResult getInfo(@PathVariable("objId") Long objId) {
return success(prodStationCapabilityService.selectProdStationCapabilityByObjId(objId));
}
@PreAuthorize("@ss.hasPermi('production:stationCapability:add')")
@Log(title = "工位能力维护", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody ProdStationCapability prodStationCapability) {
prodStationCapability.setCreatedBy(getUsername());
return toAjax(prodStationCapabilityService.insertProdStationCapability(prodStationCapability));
}
@PreAuthorize("@ss.hasPermi('production:stationCapability:edit')")
@Log(title = "工位能力维护", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody ProdStationCapability prodStationCapability) {
prodStationCapability.setUpdatedBy(getUsername());
return toAjax(prodStationCapabilityService.updateProdStationCapability(prodStationCapability));
}
@PreAuthorize("@ss.hasPermi('production:stationCapability:remove')")
@Log(title = "工位能力维护", businessType = BusinessType.DELETE)
@DeleteMapping("/{objIds}")
public AjaxResult remove(@PathVariable Long[] objIds) {
return toAjax(prodStationCapabilityService.deleteProdStationCapabilityByObjIds(objIds));
}
}

@ -0,0 +1,83 @@
package com.aucma.production.controller;
import java.util.List;
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.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.aucma.common.annotation.Log;
import com.aucma.common.core.controller.BaseController;
import com.aucma.common.core.domain.AjaxResult;
import com.aucma.common.enums.BusinessType;
import com.aucma.production.domain.ProdTaskPool;
import com.aucma.production.service.IProdTaskPoolService;
import com.aucma.common.utils.poi.ExcelUtil;
import com.aucma.common.core.page.TableDataInfo;
@RestController
@RequestMapping("/production/taskPool")
public class ProdTaskPoolController extends BaseController {
@Autowired
private IProdTaskPoolService prodTaskPoolService;
@PreAuthorize("@ss.hasPermi('production:taskPool:list')")
@GetMapping("/list")
public TableDataInfo list(ProdTaskPool prodTaskPool) {
startPage();
List<ProdTaskPool> list = prodTaskPoolService.selectProdTaskPoolList(prodTaskPool);
return getDataTable(list);
}
@PreAuthorize("@ss.hasPermi('production:taskPool:export')")
@Log(title = "生产任务池", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, ProdTaskPool prodTaskPool) {
List<ProdTaskPool> list = prodTaskPoolService.selectProdTaskPoolList(prodTaskPool);
ExcelUtil<ProdTaskPool> util = new ExcelUtil<ProdTaskPool>(ProdTaskPool.class);
util.exportExcel(response, list, "生产任务池数据");
}
@PreAuthorize("@ss.hasPermi('production:taskPool:query')")
@GetMapping(value = "/{orderCode}")
public AjaxResult getInfo(@PathVariable("orderCode") String orderCode) {
return success(prodTaskPoolService.selectProdTaskPoolByOrderCode(orderCode));
}
@PreAuthorize("@ss.hasPermi('production:taskPool:add')")
@Log(title = "生产任务池", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody ProdTaskPool prodTaskPool) {
prodTaskPool.setCreatedBy(getUsername());
return toAjax(prodTaskPoolService.insertProdTaskPool(prodTaskPool));
}
@PreAuthorize("@ss.hasPermi('production:taskPool:edit')")
@Log(title = "生产任务池", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody ProdTaskPool prodTaskPool) {
prodTaskPool.setUpdatedBy(getUsername());
return toAjax(prodTaskPoolService.updateProdTaskPool(prodTaskPool));
}
@PreAuthorize("@ss.hasPermi('production:taskPool:edit')")
@Log(title = "生产任务池状态切换", businessType = BusinessType.UPDATE)
@PutMapping("/changeStatus")
public AjaxResult changeStatus(@RequestBody ProdTaskPool prodTaskPool) {
return toAjax(prodTaskPoolService.changeTaskStatus(prodTaskPool));
}
@PreAuthorize("@ss.hasPermi('production:taskPool:remove')")
@Log(title = "生产任务池", businessType = BusinessType.DELETE)
@DeleteMapping("/{orderCodes}")
public AjaxResult remove(@PathVariable String[] orderCodes) {
return toAjax(prodTaskPoolService.deleteProdTaskPoolByOrderCodes(orderCodes));
}
}

@ -0,0 +1,76 @@
package com.aucma.production.controller;
import java.util.List;
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.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.aucma.common.annotation.Log;
import com.aucma.common.core.controller.BaseController;
import com.aucma.common.core.domain.AjaxResult;
import com.aucma.common.enums.BusinessType;
import com.aucma.production.domain.ProdTeamShift;
import com.aucma.production.service.IProdTeamShiftService;
import com.aucma.common.utils.poi.ExcelUtil;
import com.aucma.common.core.page.TableDataInfo;
@RestController
@RequestMapping("/production/teamShift")
public class ProdTeamShiftController extends BaseController {
@Autowired
private IProdTeamShiftService prodTeamShiftService;
@PreAuthorize("@ss.hasPermi('production:teamShift:list')")
@GetMapping("/list")
public TableDataInfo list(ProdTeamShift prodTeamShift) {
startPage();
List<ProdTeamShift> list = prodTeamShiftService.selectProdTeamShiftList(prodTeamShift);
return getDataTable(list);
}
@PreAuthorize("@ss.hasPermi('production:teamShift:export')")
@Log(title = "班组排班维护", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, ProdTeamShift prodTeamShift) {
List<ProdTeamShift> list = prodTeamShiftService.selectProdTeamShiftList(prodTeamShift);
ExcelUtil<ProdTeamShift> util = new ExcelUtil<ProdTeamShift>(ProdTeamShift.class);
util.exportExcel(response, list, "班组排班维护数据");
}
@PreAuthorize("@ss.hasPermi('production:teamShift:query')")
@GetMapping(value = "/{objId}")
public AjaxResult getInfo(@PathVariable("objId") Long objId) {
return success(prodTeamShiftService.selectProdTeamShiftByObjId(objId));
}
@PreAuthorize("@ss.hasPermi('production:teamShift:add')")
@Log(title = "班组排班维护", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody ProdTeamShift prodTeamShift) {
prodTeamShift.setCreatedBy(getUsername());
return toAjax(prodTeamShiftService.insertProdTeamShift(prodTeamShift));
}
@PreAuthorize("@ss.hasPermi('production:teamShift:edit')")
@Log(title = "班组排班维护", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody ProdTeamShift prodTeamShift) {
prodTeamShift.setUpdatedBy(getUsername());
return toAjax(prodTeamShiftService.updateProdTeamShift(prodTeamShift));
}
@PreAuthorize("@ss.hasPermi('production:teamShift:remove')")
@Log(title = "班组排班维护", businessType = BusinessType.DELETE)
@DeleteMapping("/{objIds}")
public AjaxResult remove(@PathVariable Long[] objIds) {
return toAjax(prodTeamShiftService.deleteProdTeamShiftByObjIds(objIds));
}
}

@ -0,0 +1,156 @@
package com.aucma.production.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.aucma.common.annotation.Excel;
import com.aucma.common.core.domain.BaseEntity;
/**
* prod_order_note
*
* @author Codex
* @date 2026-03-18
*/
public class ProdOrderNote extends BaseEntity {
private static final long serialVersionUID = 1L;
private Long objId;
@Excel(name = "工单编号")
private String orderCode;
@Excel(name = "物料编码")
private String materialCode;
@Excel(name = "物料名称")
private String materialName;
@Excel(name = "工单状态")
private String executionStatus;
@Excel(name = "记录类型")
private String noteType;
@Excel(name = "记录内容")
private String noteContent;
@Excel(name = "状态")
private String status;
@Excel(name = "创建人")
private String createdBy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date createdTime;
@Excel(name = "更新人")
private String updatedBy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date updatedTime;
public Long getObjId() {
return objId;
}
public void setObjId(Long objId) {
this.objId = objId;
}
public String getOrderCode() {
return orderCode;
}
public void setOrderCode(String orderCode) {
this.orderCode = orderCode;
}
public String getMaterialCode() {
return materialCode;
}
public void setMaterialCode(String materialCode) {
this.materialCode = materialCode;
}
public String getMaterialName() {
return materialName;
}
public void setMaterialName(String materialName) {
this.materialName = materialName;
}
public String getExecutionStatus() {
return executionStatus;
}
public void setExecutionStatus(String executionStatus) {
this.executionStatus = executionStatus;
}
public String getNoteType() {
return noteType;
}
public void setNoteType(String noteType) {
this.noteType = noteType;
}
public String getNoteContent() {
return noteContent;
}
public void setNoteContent(String noteContent) {
this.noteContent = noteContent;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public String getUpdatedBy() {
return updatedBy;
}
public void setUpdatedBy(String updatedBy) {
this.updatedBy = updatedBy;
}
public Date getUpdatedTime() {
return updatedTime;
}
public void setUpdatedTime(Date updatedTime) {
this.updatedTime = updatedTime;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("objId", getObjId())
.append("orderCode", getOrderCode())
.append("materialCode", getMaterialCode())
.append("materialName", getMaterialName())
.append("executionStatus", getExecutionStatus())
.append("noteType", getNoteType())
.append("noteContent", getNoteContent())
.append("status", getStatus())
.append("remark", getRemark())
.toString();
}
}

@ -0,0 +1,157 @@
package com.aucma.production.domain;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.aucma.common.annotation.Excel;
import com.aucma.common.core.domain.BaseEntity;
/**
* 线 prod_route
*
* @author Codex
* @date 2026-03-18
*/
public class ProdRoute extends BaseEntity {
private static final long serialVersionUID = 1L;
private Long objId;
@Excel(name = "路线编码")
private String routeCode;
@Excel(name = "路线名称")
private String routeName;
@Excel(name = "物料编码")
private String materialCode;
@Excel(name = "物料名称")
private String materialName;
@Excel(name = "版本号")
private String versionNo;
@Excel(name = "状态")
private String status;
@Excel(name = "创建人")
private String createdBy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date createdTime;
@Excel(name = "更新人")
private String updatedBy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date updatedTime;
private List<ProdRouteDetail> detailList = new ArrayList<ProdRouteDetail>();
public Long getObjId() {
return objId;
}
public void setObjId(Long objId) {
this.objId = objId;
}
public String getRouteCode() {
return routeCode;
}
public void setRouteCode(String routeCode) {
this.routeCode = routeCode;
}
public String getRouteName() {
return routeName;
}
public void setRouteName(String routeName) {
this.routeName = routeName;
}
public String getMaterialCode() {
return materialCode;
}
public void setMaterialCode(String materialCode) {
this.materialCode = materialCode;
}
public String getMaterialName() {
return materialName;
}
public void setMaterialName(String materialName) {
this.materialName = materialName;
}
public String getVersionNo() {
return versionNo;
}
public void setVersionNo(String versionNo) {
this.versionNo = versionNo;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public String getUpdatedBy() {
return updatedBy;
}
public void setUpdatedBy(String updatedBy) {
this.updatedBy = updatedBy;
}
public Date getUpdatedTime() {
return updatedTime;
}
public void setUpdatedTime(Date updatedTime) {
this.updatedTime = updatedTime;
}
public List<ProdRouteDetail> getDetailList() {
return detailList;
}
public void setDetailList(List<ProdRouteDetail> detailList) {
this.detailList = detailList;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("objId", getObjId())
.append("routeCode", getRouteCode())
.append("routeName", getRouteName())
.append("materialCode", getMaterialCode())
.append("materialName", getMaterialName())
.append("versionNo", getVersionNo())
.append("status", getStatus())
.append("remark", getRemark())
.append("detailList", getDetailList())
.toString();
}
}

@ -0,0 +1,141 @@
package com.aucma.production.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.aucma.common.annotation.Excel;
import com.aucma.common.core.domain.BaseEntity;
/**
* 线 prod_route_dtl
*
* @author Codex
* @date 2026-03-18
*/
public class ProdRouteDetail extends BaseEntity {
private static final long serialVersionUID = 1L;
private Long objId;
private String routeCode;
@Excel(name = "工序编码")
private String processCode;
@Excel(name = "工序名称")
private String processName;
@Excel(name = "顺序号")
private Long sortNo;
@Excel(name = "是否必经")
private String requiredFlag;
@Excel(name = "标准工时")
private BigDecimal standardWorkTime;
private String createdBy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createdTime;
private String updatedBy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updatedTime;
public Long getObjId() {
return objId;
}
public void setObjId(Long objId) {
this.objId = objId;
}
public String getRouteCode() {
return routeCode;
}
public void setRouteCode(String routeCode) {
this.routeCode = routeCode;
}
public String getProcessCode() {
return processCode;
}
public void setProcessCode(String processCode) {
this.processCode = processCode;
}
public String getProcessName() {
return processName;
}
public void setProcessName(String processName) {
this.processName = processName;
}
public Long getSortNo() {
return sortNo;
}
public void setSortNo(Long sortNo) {
this.sortNo = sortNo;
}
public String getRequiredFlag() {
return requiredFlag;
}
public void setRequiredFlag(String requiredFlag) {
this.requiredFlag = requiredFlag;
}
public BigDecimal getStandardWorkTime() {
return standardWorkTime;
}
public void setStandardWorkTime(BigDecimal standardWorkTime) {
this.standardWorkTime = standardWorkTime;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public String getUpdatedBy() {
return updatedBy;
}
public void setUpdatedBy(String updatedBy) {
this.updatedBy = updatedBy;
}
public Date getUpdatedTime() {
return updatedTime;
}
public void setUpdatedTime(Date updatedTime) {
this.updatedTime = updatedTime;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("objId", getObjId())
.append("routeCode", getRouteCode())
.append("processCode", getProcessCode())
.append("processName", getProcessName())
.append("sortNo", getSortNo())
.append("requiredFlag", getRequiredFlag())
.append("standardWorkTime", getStandardWorkTime())
.append("remark", getRemark())
.toString();
}
}

@ -0,0 +1,205 @@
package com.aucma.production.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.aucma.common.annotation.Excel;
import com.aucma.common.core.domain.BaseEntity;
/**
* prod_sta_cap
*
* @author Codex
* @date 2026-03-18
*/
public class ProdStationCapability extends BaseEntity {
private static final long serialVersionUID = 1L;
private Long objId;
@Excel(name = "工位编码")
private String stationCode;
@Excel(name = "工位名称")
private String stationName;
@Excel(name = "物料编码")
private String materialCode;
@Excel(name = "物料名称")
private String materialName;
@Excel(name = "标准节拍")
private BigDecimal standardCt;
@Excel(name = "班产能")
private BigDecimal shiftCap;
@Excel(name = "日产能")
private BigDecimal dayCap;
@Excel(name = "切换时长(分钟)")
private Long changeoverMin;
@Excel(name = "责任班组")
private String teamCode;
@Excel(name = "班组名称")
private String teamName;
@Excel(name = "状态")
private String status;
@Excel(name = "创建人")
private String createdBy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date createdTime;
@Excel(name = "更新人")
private String updatedBy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date updatedTime;
public Long getObjId() {
return objId;
}
public void setObjId(Long objId) {
this.objId = objId;
}
public String getStationCode() {
return stationCode;
}
public void setStationCode(String stationCode) {
this.stationCode = stationCode;
}
public String getStationName() {
return stationName;
}
public void setStationName(String stationName) {
this.stationName = stationName;
}
public String getMaterialCode() {
return materialCode;
}
public void setMaterialCode(String materialCode) {
this.materialCode = materialCode;
}
public String getMaterialName() {
return materialName;
}
public void setMaterialName(String materialName) {
this.materialName = materialName;
}
public BigDecimal getStandardCt() {
return standardCt;
}
public void setStandardCt(BigDecimal standardCt) {
this.standardCt = standardCt;
}
public BigDecimal getShiftCap() {
return shiftCap;
}
public void setShiftCap(BigDecimal shiftCap) {
this.shiftCap = shiftCap;
}
public BigDecimal getDayCap() {
return dayCap;
}
public void setDayCap(BigDecimal dayCap) {
this.dayCap = dayCap;
}
public Long getChangeoverMin() {
return changeoverMin;
}
public void setChangeoverMin(Long changeoverMin) {
this.changeoverMin = changeoverMin;
}
public String getTeamCode() {
return teamCode;
}
public void setTeamCode(String teamCode) {
this.teamCode = teamCode;
}
public String getTeamName() {
return teamName;
}
public void setTeamName(String teamName) {
this.teamName = teamName;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public String getUpdatedBy() {
return updatedBy;
}
public void setUpdatedBy(String updatedBy) {
this.updatedBy = updatedBy;
}
public Date getUpdatedTime() {
return updatedTime;
}
public void setUpdatedTime(Date updatedTime) {
this.updatedTime = updatedTime;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("objId", getObjId())
.append("stationCode", getStationCode())
.append("stationName", getStationName())
.append("materialCode", getMaterialCode())
.append("materialName", getMaterialName())
.append("standardCt", getStandardCt())
.append("shiftCap", getShiftCap())
.append("dayCap", getDayCap())
.append("changeoverMin", getChangeoverMin())
.append("teamCode", getTeamCode())
.append("teamName", getTeamName())
.append("status", getStatus())
.append("remark", getRemark())
.append("createdBy", getCreatedBy())
.append("createdTime", getCreatedTime())
.append("updatedBy", getUpdatedBy())
.append("updatedTime", getUpdatedTime())
.toString();
}
}

@ -0,0 +1,237 @@
package com.aucma.production.domain;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.aucma.common.annotation.Excel;
import com.aucma.common.core.domain.BaseEntity;
/**
* prod_task_pool
*
* @author Codex
* @date 2026-03-18
*/
public class ProdTaskPool extends BaseEntity {
private static final long serialVersionUID = 1L;
private Long objId;
@Excel(name = "工单编号")
private String orderCode;
@Excel(name = "物料编码")
private String materialCode;
@Excel(name = "物料名称")
private String materialName;
@Excel(name = "计划数量")
private BigDecimal orderAmount;
@Excel(name = "已完工数量")
private Long completeAmount;
@Excel(name = "执行状态")
private String executionStatus;
@Excel(name = "任务分组")
private String taskBucket;
@Excel(name = "负责人")
private Long ownerUserId;
@Excel(name = "负责人姓名")
private String ownerUserName;
@Excel(name = "优先级")
private String priorityLevel;
@Excel(name = "设备编码")
private String deviceCode;
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "计划结束日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date endDate;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "开始生产时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date startTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "完工时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date finishTime;
@Excel(name = "创建人")
private String createdBy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date createdTime;
@Excel(name = "更新人")
private String updatedBy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date updatedTime;
public Long getObjId() {
return objId;
}
public void setObjId(Long objId) {
this.objId = objId;
}
public String getOrderCode() {
return orderCode;
}
public void setOrderCode(String orderCode) {
this.orderCode = orderCode;
}
public String getMaterialCode() {
return materialCode;
}
public void setMaterialCode(String materialCode) {
this.materialCode = materialCode;
}
public String getMaterialName() {
return materialName;
}
public void setMaterialName(String materialName) {
this.materialName = materialName;
}
public BigDecimal getOrderAmount() {
return orderAmount;
}
public void setOrderAmount(BigDecimal orderAmount) {
this.orderAmount = orderAmount;
}
public Long getCompleteAmount() {
return completeAmount;
}
public void setCompleteAmount(Long completeAmount) {
this.completeAmount = completeAmount;
}
public String getExecutionStatus() {
return executionStatus;
}
public void setExecutionStatus(String executionStatus) {
this.executionStatus = executionStatus;
}
public String getTaskBucket() {
return taskBucket;
}
public void setTaskBucket(String taskBucket) {
this.taskBucket = taskBucket;
}
public Long getOwnerUserId() {
return ownerUserId;
}
public void setOwnerUserId(Long ownerUserId) {
this.ownerUserId = ownerUserId;
}
public String getOwnerUserName() {
return ownerUserName;
}
public void setOwnerUserName(String ownerUserName) {
this.ownerUserName = ownerUserName;
}
public String getPriorityLevel() {
return priorityLevel;
}
public void setPriorityLevel(String priorityLevel) {
this.priorityLevel = priorityLevel;
}
public String getDeviceCode() {
return deviceCode;
}
public void setDeviceCode(String deviceCode) {
this.deviceCode = deviceCode;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getFinishTime() {
return finishTime;
}
public void setFinishTime(Date finishTime) {
this.finishTime = finishTime;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public String getUpdatedBy() {
return updatedBy;
}
public void setUpdatedBy(String updatedBy) {
this.updatedBy = updatedBy;
}
public Date getUpdatedTime() {
return updatedTime;
}
public void setUpdatedTime(Date updatedTime) {
this.updatedTime = updatedTime;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("objId", getObjId())
.append("orderCode", getOrderCode())
.append("materialCode", getMaterialCode())
.append("materialName", getMaterialName())
.append("orderAmount", getOrderAmount())
.append("completeAmount", getCompleteAmount())
.append("executionStatus", getExecutionStatus())
.append("taskBucket", getTaskBucket())
.append("ownerUserId", getOwnerUserId())
.append("ownerUserName", getOwnerUserName())
.append("priorityLevel", getPriorityLevel())
.append("deviceCode", getDeviceCode())
.append("endDate", getEndDate())
.append("startTime", getStartTime())
.append("finishTime", getFinishTime())
.append("remark", getRemark())
.toString();
}
}

@ -0,0 +1,190 @@
package com.aucma.production.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.aucma.common.annotation.Excel;
import com.aucma.common.core.domain.BaseEntity;
/**
* prod_team_sch
*
* @author Codex
* @date 2026-03-18
*/
public class ProdTeamShift extends BaseEntity {
private static final long serialVersionUID = 1L;
private Long objId;
@Excel(name = "班组编码")
private String teamCode;
@Excel(name = "班组名称")
private String teamName;
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "排班日期", width = 30, dateFormat = "yyyy-MM-dd")
private Date shiftDate;
@Excel(name = "班次编码")
private String shiftCode;
@Excel(name = "负责人")
private Long leaderUserId;
@Excel(name = "负责人姓名")
private String leaderUserName;
@Excel(name = "责任产线")
private String lineCode;
@Excel(name = "产线名称")
private String lineName;
@Excel(name = "责任区域")
private String areaDesc;
@Excel(name = "状态")
private String status;
@Excel(name = "创建人")
private String createdBy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date createdTime;
@Excel(name = "更新人")
private String updatedBy;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date updatedTime;
public Long getObjId() {
return objId;
}
public void setObjId(Long objId) {
this.objId = objId;
}
public String getTeamCode() {
return teamCode;
}
public void setTeamCode(String teamCode) {
this.teamCode = teamCode;
}
public String getTeamName() {
return teamName;
}
public void setTeamName(String teamName) {
this.teamName = teamName;
}
public Date getShiftDate() {
return shiftDate;
}
public void setShiftDate(Date shiftDate) {
this.shiftDate = shiftDate;
}
public String getShiftCode() {
return shiftCode;
}
public void setShiftCode(String shiftCode) {
this.shiftCode = shiftCode;
}
public Long getLeaderUserId() {
return leaderUserId;
}
public void setLeaderUserId(Long leaderUserId) {
this.leaderUserId = leaderUserId;
}
public String getLeaderUserName() {
return leaderUserName;
}
public void setLeaderUserName(String leaderUserName) {
this.leaderUserName = leaderUserName;
}
public String getLineCode() {
return lineCode;
}
public void setLineCode(String lineCode) {
this.lineCode = lineCode;
}
public String getLineName() {
return lineName;
}
public void setLineName(String lineName) {
this.lineName = lineName;
}
public String getAreaDesc() {
return areaDesc;
}
public void setAreaDesc(String areaDesc) {
this.areaDesc = areaDesc;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public String getUpdatedBy() {
return updatedBy;
}
public void setUpdatedBy(String updatedBy) {
this.updatedBy = updatedBy;
}
public Date getUpdatedTime() {
return updatedTime;
}
public void setUpdatedTime(Date updatedTime) {
this.updatedTime = updatedTime;
}
@Override
public String toString() {
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("objId", getObjId())
.append("teamCode", getTeamCode())
.append("teamName", getTeamName())
.append("shiftDate", getShiftDate())
.append("shiftCode", getShiftCode())
.append("leaderUserId", getLeaderUserId())
.append("leaderUserName", getLeaderUserName())
.append("lineCode", getLineCode())
.append("lineName", getLineName())
.append("areaDesc", getAreaDesc())
.append("status", getStatus())
.append("remark", getRemark())
.toString();
}
}

@ -0,0 +1,25 @@
package com.aucma.production.mapper;
import java.util.List;
import com.aucma.production.domain.ProdOrderNote;
/**
* Mapper
*
* @author Codex
* @date 2026-03-18
*/
public interface ProdOrderNoteMapper {
ProdOrderNote selectProdOrderNoteByObjId(Long objId);
List<ProdOrderNote> selectProdOrderNoteList(ProdOrderNote prodOrderNote);
int insertProdOrderNote(ProdOrderNote prodOrderNote);
int updateProdOrderNote(ProdOrderNote prodOrderNote);
int deleteProdOrderNoteByObjId(Long objId);
int deleteProdOrderNoteByObjIds(Long[] objIds);
}

@ -0,0 +1,34 @@
package com.aucma.production.mapper;
import java.util.List;
import com.aucma.production.domain.ProdRoute;
import com.aucma.production.domain.ProdRouteDetail;
/**
* 线Mapper
*
* @author Codex
* @date 2026-03-18
*/
public interface ProdRouteMapper {
ProdRoute selectProdRouteByObjId(Long objId);
ProdRoute selectProdRouteByRouteCode(String routeCode);
List<ProdRoute> selectProdRouteList(ProdRoute prodRoute);
List<ProdRouteDetail> selectProdRouteDetailListByRouteCode(String routeCode);
int insertProdRoute(ProdRoute prodRoute);
int updateProdRoute(ProdRoute prodRoute);
int deleteProdRouteByObjId(Long objId);
int deleteProdRouteByObjIds(Long[] objIds);
int insertProdRouteDetail(ProdRouteDetail detail);
int deleteProdRouteDetailByRouteCode(String routeCode);
}

@ -0,0 +1,27 @@
package com.aucma.production.mapper;
import java.util.List;
import com.aucma.production.domain.ProdStationCapability;
/**
* Mapper
*
* @author Codex
* @date 2026-03-18
*/
public interface ProdStationCapabilityMapper {
ProdStationCapability selectProdStationCapabilityByObjId(Long objId);
List<ProdStationCapability> selectProdStationCapabilityList(ProdStationCapability prodStationCapability);
ProdStationCapability selectByStationCodeAndMaterialCode(ProdStationCapability prodStationCapability);
int insertProdStationCapability(ProdStationCapability prodStationCapability);
int updateProdStationCapability(ProdStationCapability prodStationCapability);
int deleteProdStationCapabilityByObjId(Long objId);
int deleteProdStationCapabilityByObjIds(Long[] objIds);
}

@ -0,0 +1,25 @@
package com.aucma.production.mapper;
import java.util.List;
import com.aucma.production.domain.ProdTaskPool;
/**
* Mapper
*
* @author Codex
* @date 2026-03-18
*/
public interface ProdTaskPoolMapper {
ProdTaskPool selectProdTaskPoolByOrderCode(String orderCode);
List<ProdTaskPool> selectProdTaskPoolList(ProdTaskPool prodTaskPool);
int insertProdTaskPool(ProdTaskPool prodTaskPool);
int updateProdTaskPool(ProdTaskPool prodTaskPool);
int deleteProdTaskPoolByOrderCodes(String[] orderCodes);
int updateOrderExecutionStatus(ProdTaskPool prodTaskPool);
}

@ -0,0 +1,27 @@
package com.aucma.production.mapper;
import java.util.List;
import com.aucma.production.domain.ProdTeamShift;
/**
* Mapper
*
* @author Codex
* @date 2026-03-18
*/
public interface ProdTeamShiftMapper {
ProdTeamShift selectProdTeamShiftByObjId(Long objId);
List<ProdTeamShift> selectProdTeamShiftList(ProdTeamShift prodTeamShift);
ProdTeamShift selectUniqueShift(ProdTeamShift prodTeamShift);
int insertProdTeamShift(ProdTeamShift prodTeamShift);
int updateProdTeamShift(ProdTeamShift prodTeamShift);
int deleteProdTeamShiftByObjId(Long objId);
int deleteProdTeamShiftByObjIds(Long[] objIds);
}

@ -0,0 +1,17 @@
package com.aucma.production.service;
import java.util.List;
import com.aucma.production.domain.ProdOrderNote;
public interface IProdOrderNoteService {
ProdOrderNote selectProdOrderNoteByObjId(Long objId);
List<ProdOrderNote> selectProdOrderNoteList(ProdOrderNote prodOrderNote);
int insertProdOrderNote(ProdOrderNote prodOrderNote);
int updateProdOrderNote(ProdOrderNote prodOrderNote);
int deleteProdOrderNoteByObjIds(Long[] objIds);
}

@ -0,0 +1,17 @@
package com.aucma.production.service;
import java.util.List;
import com.aucma.production.domain.ProdRoute;
public interface IProdRouteService {
ProdRoute selectProdRouteByObjId(Long objId);
List<ProdRoute> selectProdRouteList(ProdRoute prodRoute);
int insertProdRoute(ProdRoute prodRoute);
int updateProdRoute(ProdRoute prodRoute);
int deleteProdRouteByObjIds(Long[] objIds);
}

@ -0,0 +1,17 @@
package com.aucma.production.service;
import java.util.List;
import com.aucma.production.domain.ProdStationCapability;
public interface IProdStationCapabilityService {
ProdStationCapability selectProdStationCapabilityByObjId(Long objId);
List<ProdStationCapability> selectProdStationCapabilityList(ProdStationCapability prodStationCapability);
int insertProdStationCapability(ProdStationCapability prodStationCapability);
int updateProdStationCapability(ProdStationCapability prodStationCapability);
int deleteProdStationCapabilityByObjIds(Long[] objIds);
}

@ -0,0 +1,19 @@
package com.aucma.production.service;
import java.util.List;
import com.aucma.production.domain.ProdTaskPool;
public interface IProdTaskPoolService {
ProdTaskPool selectProdTaskPoolByOrderCode(String orderCode);
List<ProdTaskPool> selectProdTaskPoolList(ProdTaskPool prodTaskPool);
int insertProdTaskPool(ProdTaskPool prodTaskPool);
int updateProdTaskPool(ProdTaskPool prodTaskPool);
int deleteProdTaskPoolByOrderCodes(String[] orderCodes);
int changeTaskStatus(ProdTaskPool prodTaskPool);
}

@ -0,0 +1,17 @@
package com.aucma.production.service;
import java.util.List;
import com.aucma.production.domain.ProdTeamShift;
public interface IProdTeamShiftService {
ProdTeamShift selectProdTeamShiftByObjId(Long objId);
List<ProdTeamShift> selectProdTeamShiftList(ProdTeamShift prodTeamShift);
int insertProdTeamShift(ProdTeamShift prodTeamShift);
int updateProdTeamShift(ProdTeamShift prodTeamShift);
int deleteProdTeamShiftByObjIds(Long[] objIds);
}

@ -0,0 +1,75 @@
package com.aucma.production.service.impl;
import java.util.List;
import com.aucma.common.exception.ServiceException;
import com.aucma.common.utils.DateUtils;
import com.aucma.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.aucma.production.domain.ProdOrderNote;
import com.aucma.production.domain.ProdTaskPool;
import com.aucma.production.mapper.ProdOrderNoteMapper;
import com.aucma.production.mapper.ProdTaskPoolMapper;
import com.aucma.production.service.IProdOrderNoteService;
@Service
public class ProdOrderNoteServiceImpl implements IProdOrderNoteService {
@Autowired
private ProdOrderNoteMapper prodOrderNoteMapper;
@Autowired
private ProdTaskPoolMapper prodTaskPoolMapper;
@Override
public ProdOrderNote selectProdOrderNoteByObjId(Long objId) {
return prodOrderNoteMapper.selectProdOrderNoteByObjId(objId);
}
@Override
public List<ProdOrderNote> selectProdOrderNoteList(ProdOrderNote prodOrderNote) {
return prodOrderNoteMapper.selectProdOrderNoteList(prodOrderNote);
}
@Override
public int insertProdOrderNote(ProdOrderNote prodOrderNote) {
validateNote(prodOrderNote);
prodOrderNote.setCreatedTime(DateUtils.getNowDate());
return prodOrderNoteMapper.insertProdOrderNote(prodOrderNote);
}
@Override
public int updateProdOrderNote(ProdOrderNote prodOrderNote) {
validateNote(prodOrderNote);
prodOrderNote.setUpdatedTime(DateUtils.getNowDate());
return prodOrderNoteMapper.updateProdOrderNote(prodOrderNote);
}
@Override
public int deleteProdOrderNoteByObjIds(Long[] objIds) {
return prodOrderNoteMapper.deleteProdOrderNoteByObjIds(objIds);
}
private void validateNote(ProdOrderNote prodOrderNote) {
if (prodOrderNote == null) {
throw new ServiceException("工单记录不能为空");
}
if (StringUtils.isBlank(prodOrderNote.getOrderCode())) {
throw new ServiceException("工单编号不能为空");
}
if (StringUtils.isBlank(prodOrderNote.getNoteType())) {
throw new ServiceException("记录类型不能为空");
}
if (StringUtils.isBlank(prodOrderNote.getNoteContent())) {
throw new ServiceException("记录内容不能为空");
}
// 为什么新增备注前先校验工单存在:备注和异常记录属于工单执行过程资产,不能允许孤儿记录进入系统。
ProdTaskPool orderSnapshot = prodTaskPoolMapper.selectProdTaskPoolByOrderCode(prodOrderNote.getOrderCode());
if (orderSnapshot == null) {
throw new ServiceException("工单不存在,无法登记备注或异常");
}
if (StringUtils.isBlank(prodOrderNote.getStatus())) {
prodOrderNote.setStatus("0");
}
}
}

@ -0,0 +1,132 @@
package com.aucma.production.service.impl;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import com.aucma.common.exception.ServiceException;
import com.aucma.common.utils.DateUtils;
import com.aucma.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.aucma.production.domain.ProdRoute;
import com.aucma.production.domain.ProdRouteDetail;
import com.aucma.production.mapper.ProdRouteMapper;
import com.aucma.production.service.IProdRouteService;
@Service
public class ProdRouteServiceImpl implements IProdRouteService {
@Autowired
private ProdRouteMapper prodRouteMapper;
@Override
public ProdRoute selectProdRouteByObjId(Long objId) {
ProdRoute route = prodRouteMapper.selectProdRouteByObjId(objId);
if (route != null) {
route.setDetailList(prodRouteMapper.selectProdRouteDetailListByRouteCode(route.getRouteCode()));
}
return route;
}
@Override
public List<ProdRoute> selectProdRouteList(ProdRoute prodRoute) {
return prodRouteMapper.selectProdRouteList(prodRoute);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int insertProdRoute(ProdRoute prodRoute) {
validateRoute(prodRoute);
ensureRouteCodeUnique(prodRoute);
prodRoute.setCreatedTime(DateUtils.getNowDate());
int rows = prodRouteMapper.insertProdRoute(prodRoute);
saveRouteDetails(prodRoute, true);
return rows;
}
@Override
@Transactional(rollbackFor = Exception.class)
public int updateProdRoute(ProdRoute prodRoute) {
validateRoute(prodRoute);
ensureRouteCodeUnique(prodRoute);
prodRoute.setUpdatedTime(DateUtils.getNowDate());
int rows = prodRouteMapper.updateProdRoute(prodRoute);
// 为什么更新时整单重建明细:首版路线维护优先保证“前端表格提交即数据库最终态”,避免逐行 diff 漏删旧工序。
prodRouteMapper.deleteProdRouteDetailByRouteCode(prodRoute.getRouteCode());
saveRouteDetails(prodRoute, false);
return rows;
}
@Override
@Transactional(rollbackFor = Exception.class)
public int deleteProdRouteByObjIds(Long[] objIds) {
for (Long objId : objIds) {
ProdRoute route = prodRouteMapper.selectProdRouteByObjId(objId);
if (route != null) {
prodRouteMapper.deleteProdRouteDetailByRouteCode(route.getRouteCode());
}
}
return prodRouteMapper.deleteProdRouteByObjIds(objIds);
}
private void validateRoute(ProdRoute prodRoute) {
if (prodRoute == null) {
throw new ServiceException("工艺路线数据不能为空");
}
if (StringUtils.isBlank(prodRoute.getRouteCode())) {
throw new ServiceException("路线编码不能为空");
}
if (StringUtils.isBlank(prodRoute.getRouteName())) {
throw new ServiceException("路线名称不能为空");
}
if (StringUtils.isBlank(prodRoute.getMaterialCode())) {
throw new ServiceException("物料不能为空");
}
if (StringUtils.isBlank(prodRoute.getVersionNo())) {
prodRoute.setVersionNo("V1");
}
if (StringUtils.isBlank(prodRoute.getStatus())) {
prodRoute.setStatus("0");
}
if (prodRoute.getDetailList() == null || prodRoute.getDetailList().isEmpty()) {
throw new ServiceException("工艺路线至少需要一条工序明细");
}
}
private void ensureRouteCodeUnique(ProdRoute prodRoute) {
ProdRoute existed = prodRouteMapper.selectProdRouteByRouteCode(prodRoute.getRouteCode());
if (existed != null && !existed.getObjId().equals(prodRoute.getObjId())) {
throw new ServiceException("路线编码已存在");
}
}
private void saveRouteDetails(ProdRoute prodRoute, boolean insertMode) {
Set<String> processCodeSet = new LinkedHashSet<String>();
long sortNo = 1L;
for (ProdRouteDetail detail : prodRoute.getDetailList()) {
if (detail == null || StringUtils.isBlank(detail.getProcessCode())) {
throw new ServiceException("工序明细不能为空");
}
if (!processCodeSet.add(detail.getProcessCode())) {
throw new ServiceException("工艺路线中存在重复工序:" + detail.getProcessCode());
}
detail.setRouteCode(prodRoute.getRouteCode());
if (detail.getSortNo() == null) {
detail.setSortNo(sortNo);
}
if (StringUtils.isBlank(detail.getRequiredFlag())) {
detail.setRequiredFlag("1");
}
if (insertMode) {
detail.setCreatedBy(prodRoute.getCreatedBy());
detail.setCreatedTime(DateUtils.getNowDate());
} else {
detail.setUpdatedBy(prodRoute.getUpdatedBy());
detail.setUpdatedTime(DateUtils.getNowDate());
}
prodRouteMapper.insertProdRouteDetail(detail);
sortNo++;
}
}
}

@ -0,0 +1,72 @@
package com.aucma.production.service.impl;
import java.util.List;
import com.aucma.common.exception.ServiceException;
import com.aucma.common.utils.DateUtils;
import com.aucma.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.aucma.production.domain.ProdStationCapability;
import com.aucma.production.mapper.ProdStationCapabilityMapper;
import com.aucma.production.service.IProdStationCapabilityService;
@Service
public class ProdStationCapabilityServiceImpl implements IProdStationCapabilityService {
@Autowired
private ProdStationCapabilityMapper prodStationCapabilityMapper;
@Override
public ProdStationCapability selectProdStationCapabilityByObjId(Long objId) {
return prodStationCapabilityMapper.selectProdStationCapabilityByObjId(objId);
}
@Override
public List<ProdStationCapability> selectProdStationCapabilityList(ProdStationCapability prodStationCapability) {
return prodStationCapabilityMapper.selectProdStationCapabilityList(prodStationCapability);
}
@Override
public int insertProdStationCapability(ProdStationCapability prodStationCapability) {
validateCapability(prodStationCapability);
// 为什么按“工位+物料”做唯一控制:这两个维度共同定义一条能力口径,重复落库会让排产和产能维护出现冲突。
ensureUnique(prodStationCapability);
prodStationCapability.setCreatedTime(DateUtils.getNowDate());
return prodStationCapabilityMapper.insertProdStationCapability(prodStationCapability);
}
@Override
public int updateProdStationCapability(ProdStationCapability prodStationCapability) {
validateCapability(prodStationCapability);
ensureUnique(prodStationCapability);
prodStationCapability.setUpdatedTime(DateUtils.getNowDate());
return prodStationCapabilityMapper.updateProdStationCapability(prodStationCapability);
}
@Override
public int deleteProdStationCapabilityByObjIds(Long[] objIds) {
return prodStationCapabilityMapper.deleteProdStationCapabilityByObjIds(objIds);
}
private void validateCapability(ProdStationCapability prodStationCapability) {
if (prodStationCapability == null) {
throw new ServiceException("工位能力数据不能为空");
}
if (StringUtils.isBlank(prodStationCapability.getStationCode())) {
throw new ServiceException("工位不能为空");
}
if (StringUtils.isBlank(prodStationCapability.getMaterialCode())) {
throw new ServiceException("物料不能为空");
}
if (StringUtils.isBlank(prodStationCapability.getStatus())) {
prodStationCapability.setStatus("0");
}
}
private void ensureUnique(ProdStationCapability prodStationCapability) {
ProdStationCapability existed = prodStationCapabilityMapper.selectByStationCodeAndMaterialCode(prodStationCapability);
if (existed != null && !existed.getObjId().equals(prodStationCapability.getObjId())) {
throw new ServiceException("同一工位下该物料的能力维护已存在");
}
}
}

@ -0,0 +1,96 @@
package com.aucma.production.service.impl;
import java.util.List;
import com.aucma.common.exception.ServiceException;
import com.aucma.common.utils.DateUtils;
import com.aucma.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.aucma.production.domain.ProdTaskPool;
import com.aucma.production.mapper.ProdTaskPoolMapper;
import com.aucma.production.service.IProdTaskPoolService;
@Service
public class ProdTaskPoolServiceImpl implements IProdTaskPoolService {
@Autowired
private ProdTaskPoolMapper prodTaskPoolMapper;
@Override
public ProdTaskPool selectProdTaskPoolByOrderCode(String orderCode) {
return prodTaskPoolMapper.selectProdTaskPoolByOrderCode(orderCode);
}
@Override
public List<ProdTaskPool> selectProdTaskPoolList(ProdTaskPool prodTaskPool) {
return prodTaskPoolMapper.selectProdTaskPoolList(prodTaskPool);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int insertProdTaskPool(ProdTaskPool prodTaskPool) {
validateTask(prodTaskPool);
ProdTaskPool existed = prodTaskPoolMapper.selectProdTaskPoolByOrderCode(prodTaskPool.getOrderCode());
if (existed != null && existed.getObjId() != null) {
prodTaskPool.setObjId(existed.getObjId());
prodTaskPool.setUpdatedTime(DateUtils.getNowDate());
return prodTaskPoolMapper.updateProdTaskPool(prodTaskPool);
}
prodTaskPool.setCreatedTime(DateUtils.getNowDate());
return prodTaskPoolMapper.insertProdTaskPool(prodTaskPool);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int updateProdTaskPool(ProdTaskPool prodTaskPool) {
validateTask(prodTaskPool);
ProdTaskPool existed = prodTaskPoolMapper.selectProdTaskPoolByOrderCode(prodTaskPool.getOrderCode());
if (existed == null || existed.getObjId() == null) {
prodTaskPool.setCreatedTime(DateUtils.getNowDate());
return prodTaskPoolMapper.insertProdTaskPool(prodTaskPool);
}
prodTaskPool.setObjId(existed.getObjId());
prodTaskPool.setUpdatedTime(DateUtils.getNowDate());
return prodTaskPoolMapper.updateProdTaskPool(prodTaskPool);
}
@Override
public int deleteProdTaskPoolByOrderCodes(String[] orderCodes) {
return prodTaskPoolMapper.deleteProdTaskPoolByOrderCodes(orderCodes);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int changeTaskStatus(ProdTaskPool prodTaskPool) {
if (prodTaskPool == null || StringUtils.isBlank(prodTaskPool.getOrderCode())) {
throw new ServiceException("工单编号不能为空");
}
if (StringUtils.isBlank(prodTaskPool.getExecutionStatus())) {
throw new ServiceException("执行状态不能为空");
}
ProdTaskPool snapshot = prodTaskPoolMapper.selectProdTaskPoolByOrderCode(prodTaskPool.getOrderCode());
if (snapshot == null) {
throw new ServiceException("工单不存在,无法变更任务状态");
}
// 为什么任务池状态直接回写工单执行状态:任务池只是执行视图,不能再维护一套脱离工单主表的状态副本。
prodTaskPool.setUpdatedTime(DateUtils.getNowDate());
return prodTaskPoolMapper.updateOrderExecutionStatus(prodTaskPool);
}
private void validateTask(ProdTaskPool prodTaskPool) {
if (prodTaskPool == null) {
throw new ServiceException("任务池数据不能为空");
}
if (StringUtils.isBlank(prodTaskPool.getOrderCode())) {
throw new ServiceException("工单编号不能为空");
}
ProdTaskPool snapshot = prodTaskPoolMapper.selectProdTaskPoolByOrderCode(prodTaskPool.getOrderCode());
if (snapshot == null) {
throw new ServiceException("工单不存在,无法维护任务池");
}
if (StringUtils.isBlank(prodTaskPool.getPriorityLevel())) {
prodTaskPool.setPriorityLevel("NORMAL");
}
}
}

@ -0,0 +1,74 @@
package com.aucma.production.service.impl;
import java.util.List;
import com.aucma.common.exception.ServiceException;
import com.aucma.common.utils.DateUtils;
import com.aucma.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.aucma.production.domain.ProdTeamShift;
import com.aucma.production.mapper.ProdTeamShiftMapper;
import com.aucma.production.service.IProdTeamShiftService;
@Service
public class ProdTeamShiftServiceImpl implements IProdTeamShiftService {
@Autowired
private ProdTeamShiftMapper prodTeamShiftMapper;
@Override
public ProdTeamShift selectProdTeamShiftByObjId(Long objId) {
return prodTeamShiftMapper.selectProdTeamShiftByObjId(objId);
}
@Override
public List<ProdTeamShift> selectProdTeamShiftList(ProdTeamShift prodTeamShift) {
return prodTeamShiftMapper.selectProdTeamShiftList(prodTeamShift);
}
@Override
public int insertProdTeamShift(ProdTeamShift prodTeamShift) {
validateShift(prodTeamShift);
ensureShiftUnique(prodTeamShift);
prodTeamShift.setCreatedTime(DateUtils.getNowDate());
return prodTeamShiftMapper.insertProdTeamShift(prodTeamShift);
}
@Override
public int updateProdTeamShift(ProdTeamShift prodTeamShift) {
validateShift(prodTeamShift);
ensureShiftUnique(prodTeamShift);
prodTeamShift.setUpdatedTime(DateUtils.getNowDate());
return prodTeamShiftMapper.updateProdTeamShift(prodTeamShift);
}
@Override
public int deleteProdTeamShiftByObjIds(Long[] objIds) {
return prodTeamShiftMapper.deleteProdTeamShiftByObjIds(objIds);
}
private void validateShift(ProdTeamShift prodTeamShift) {
if (prodTeamShift == null) {
throw new ServiceException("排班数据不能为空");
}
if (StringUtils.isBlank(prodTeamShift.getTeamCode())) {
throw new ServiceException("班组不能为空");
}
if (prodTeamShift.getShiftDate() == null) {
throw new ServiceException("排班日期不能为空");
}
if (StringUtils.isBlank(prodTeamShift.getShiftCode())) {
throw new ServiceException("班次不能为空");
}
if (StringUtils.isBlank(prodTeamShift.getStatus())) {
prodTeamShift.setStatus("0");
}
}
private void ensureShiftUnique(ProdTeamShift prodTeamShift) {
ProdTeamShift existed = prodTeamShiftMapper.selectUniqueShift(prodTeamShift);
if (existed != null && !existed.getObjId().equals(prodTeamShift.getObjId())) {
throw new ServiceException("该班组在指定日期与班次下已存在排班记录");
}
}
}

@ -0,0 +1,95 @@
<?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.aucma.production.mapper.ProdOrderNoteMapper">
<resultMap id="ProdOrderNoteResult" type="ProdOrderNote">
<result property="objId" column="obj_id"/>
<result property="orderCode" column="order_code"/>
<result property="materialCode" column="material_code"/>
<result property="materialName" column="material_name"/>
<result property="executionStatus" column="execution_status"/>
<result property="noteType" column="note_type"/>
<result property="noteContent" column="note_content"/>
<result property="status" column="status"/>
<result property="remark" column="remark"/>
<result property="createdBy" column="create_by"/>
<result property="createdTime" column="create_time"/>
<result property="updatedBy" column="update_by"/>
<result property="updatedTime" column="update_time"/>
</resultMap>
<sql id="selectProdOrderNoteVo">
select pn.obj_id,
pn.order_code,
oi.material_code,
oi.material_name,
nvl(oi.execution_status, 'PENDING') as execution_status,
pn.note_type,
pn.note_content,
pn.status,
pn.remark,
pn.create_by,
pn.create_time,
pn.update_by,
pn.update_time
from prod_order_note pn
left join base_orderinfo oi on oi.order_code = pn.order_code
</sql>
<select id="selectProdOrderNoteByObjId" parameterType="Long" resultMap="ProdOrderNoteResult">
<include refid="selectProdOrderNoteVo"/>
where pn.obj_id = #{objId}
</select>
<select id="selectProdOrderNoteList" parameterType="ProdOrderNote" resultMap="ProdOrderNoteResult">
<include refid="selectProdOrderNoteVo"/>
<where>
<if test="orderCode != null and orderCode != ''">and pn.order_code = #{orderCode}</if>
<if test="noteType != null and noteType != ''">and pn.note_type = #{noteType}</if>
<if test="status != null and status != ''">and pn.status = #{status}</if>
<if test="materialName != null and materialName != ''">and oi.material_name like concat(concat('%', #{materialName}), '%')</if>
<if test="executionStatus != null and executionStatus != ''">and nvl(oi.execution_status, 'PENDING') = #{executionStatus}</if>
</where>
order by pn.create_time desc, pn.obj_id desc
</select>
<insert id="insertProdOrderNote" parameterType="ProdOrderNote">
<selectKey keyProperty="objId" resultType="long" order="BEFORE">
select seq_prod_order_note.nextval as objId from dual
</selectKey>
insert into prod_order_note (
obj_id, order_code, note_type, note_content, status, remark,
create_by, create_time, update_by, update_time
) values (
#{objId}, #{orderCode}, #{noteType}, #{noteContent}, #{status}, #{remark},
#{createdBy}, #{createdTime}, #{updatedBy}, #{updatedTime}
)
</insert>
<update id="updateProdOrderNote" parameterType="ProdOrderNote">
update prod_order_note
<set>
order_code = #{orderCode},
note_type = #{noteType},
note_content = #{noteContent},
status = #{status},
remark = #{remark},
update_by = #{updatedBy},
update_time = #{updatedTime}
</set>
where obj_id = #{objId}
</update>
<delete id="deleteProdOrderNoteByObjId" parameterType="Long">
delete from prod_order_note where obj_id = #{objId}
</delete>
<delete id="deleteProdOrderNoteByObjIds" parameterType="Long">
delete from prod_order_note where obj_id in
<foreach collection="array" item="objId" open="(" separator="," close=")">
#{objId}
</foreach>
</delete>
</mapper>

@ -0,0 +1,150 @@
<?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.aucma.production.mapper.ProdRouteMapper">
<resultMap id="ProdRouteResult" type="ProdRoute">
<result property="objId" column="obj_id"/>
<result property="routeCode" column="route_code"/>
<result property="routeName" column="route_name"/>
<result property="materialCode" column="material_code"/>
<result property="materialName" column="material_name"/>
<result property="versionNo" column="version_no"/>
<result property="status" column="status"/>
<result property="remark" column="remark"/>
<result property="createdBy" column="create_by"/>
<result property="createdTime" column="create_time"/>
<result property="updatedBy" column="update_by"/>
<result property="updatedTime" column="update_time"/>
</resultMap>
<resultMap id="ProdRouteDetailResult" type="ProdRouteDetail">
<result property="objId" column="obj_id"/>
<result property="routeCode" column="route_code"/>
<result property="processCode" column="process_code"/>
<result property="processName" column="process_name"/>
<result property="sortNo" column="sort_no"/>
<result property="requiredFlag" column="required_flag"/>
<result property="standardWorkTime" column="standard_work_time"/>
<result property="remark" column="remark"/>
<result property="createdBy" column="create_by"/>
<result property="createdTime" column="create_time"/>
<result property="updatedBy" column="update_by"/>
<result property="updatedTime" column="update_time"/>
</resultMap>
<sql id="selectProdRouteVo">
select pr.obj_id,
pr.route_code,
pr.route_name,
pr.material_code,
mi.material_name,
pr.version_no,
pr.status,
pr.remark,
pr.create_by,
pr.create_time,
pr.update_by,
pr.update_time
from prod_route pr
left join base_materialinfo mi on mi.material_code = pr.material_code
</sql>
<select id="selectProdRouteByObjId" parameterType="Long" resultMap="ProdRouteResult">
<include refid="selectProdRouteVo"/>
where pr.obj_id = #{objId}
</select>
<select id="selectProdRouteByRouteCode" parameterType="String" resultMap="ProdRouteResult">
<include refid="selectProdRouteVo"/>
where pr.route_code = #{routeCode}
</select>
<select id="selectProdRouteList" parameterType="ProdRoute" resultMap="ProdRouteResult">
<include refid="selectProdRouteVo"/>
<where>
<if test="routeCode != null and routeCode != ''">and pr.route_code like concat(concat('%', #{routeCode}), '%')</if>
<if test="routeName != null and routeName != ''">and pr.route_name like concat(concat('%', #{routeName}), '%')</if>
<if test="materialCode != null and materialCode != ''">and pr.material_code = #{materialCode}</if>
<if test="materialName != null and materialName != ''">and mi.material_name like concat(concat('%', #{materialName}), '%')</if>
<if test="status != null and status != ''">and pr.status = #{status}</if>
</where>
order by pr.route_code
</select>
<select id="selectProdRouteDetailListByRouteCode" parameterType="String" resultMap="ProdRouteDetailResult">
select rd.obj_id,
rd.route_code,
rd.process_code,
ps.process_name,
rd.sort_no,
rd.required_flag,
rd.standard_work_time,
rd.remark,
rd.create_by,
rd.create_time,
rd.update_by,
rd.update_time
from prod_route_dtl rd
left join base_process_station ps on ps.process_code = rd.process_code
where rd.route_code = #{routeCode}
order by rd.sort_no, rd.obj_id
</select>
<insert id="insertProdRoute" parameterType="ProdRoute">
<selectKey keyProperty="objId" resultType="long" order="BEFORE">
select seq_prod_route.nextval as objId from dual
</selectKey>
insert into prod_route (
obj_id, route_code, route_name, material_code, version_no, status, remark,
create_by, create_time, update_by, update_time
) values (
#{objId}, #{routeCode}, #{routeName}, #{materialCode}, #{versionNo}, #{status}, #{remark},
#{createdBy}, #{createdTime}, #{updatedBy}, #{updatedTime}
)
</insert>
<update id="updateProdRoute" parameterType="ProdRoute">
update prod_route
<set>
route_code = #{routeCode},
route_name = #{routeName},
material_code = #{materialCode},
version_no = #{versionNo},
status = #{status},
remark = #{remark},
update_by = #{updatedBy},
update_time = #{updatedTime}
</set>
where obj_id = #{objId}
</update>
<delete id="deleteProdRouteByObjId" parameterType="Long">
delete from prod_route where obj_id = #{objId}
</delete>
<delete id="deleteProdRouteByObjIds" parameterType="Long">
delete from prod_route where obj_id in
<foreach collection="array" item="objId" open="(" separator="," close=")">
#{objId}
</foreach>
</delete>
<insert id="insertProdRouteDetail" parameterType="ProdRouteDetail">
<selectKey keyProperty="objId" resultType="long" order="BEFORE">
select seq_prod_route_dtl.nextval as objId from dual
</selectKey>
insert into prod_route_dtl (
obj_id, route_code, process_code, sort_no, required_flag, standard_work_time, remark,
create_by, create_time, update_by, update_time
) values (
#{objId}, #{routeCode}, #{processCode}, #{sortNo}, #{requiredFlag}, #{standardWorkTime}, #{remark},
#{createdBy}, #{createdTime}, #{updatedBy}, #{updatedTime}
)
</insert>
<delete id="deleteProdRouteDetailByRouteCode" parameterType="String">
delete from prod_route_dtl where route_code = #{routeCode}
</delete>
</mapper>

@ -0,0 +1,115 @@
<?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.aucma.production.mapper.ProdStationCapabilityMapper">
<resultMap id="ProdStationCapabilityResult" type="ProdStationCapability">
<result property="objId" column="obj_id"/>
<result property="stationCode" column="station_code"/>
<result property="stationName" column="station_name"/>
<result property="materialCode" column="material_code"/>
<result property="materialName" column="material_name"/>
<result property="standardCt" column="standard_ct"/>
<result property="shiftCap" column="shift_cap"/>
<result property="dayCap" column="day_cap"/>
<result property="changeoverMin" column="changeover_min"/>
<result property="teamCode" column="team_code"/>
<result property="teamName" column="team_name"/>
<result property="status" column="status"/>
<result property="remark" column="remark"/>
<result property="createdBy" column="create_by"/>
<result property="createdTime" column="create_time"/>
<result property="updatedBy" column="update_by"/>
<result property="updatedTime" column="update_time"/>
</resultMap>
<sql id="selectProdStationCapabilityVo">
select sc.obj_id,
sc.station_code,
st.product_line_name as station_name,
sc.material_code,
mi.material_name,
sc.standard_ct,
sc.shift_cap,
sc.day_cap,
sc.changeover_min,
sc.team_code,
tm.team_name,
sc.status,
sc.remark,
sc.create_by,
sc.create_time,
sc.update_by,
sc.update_time
from prod_sta_cap sc
left join base_productline st on st.product_line_code = sc.station_code
left join base_materialinfo mi on mi.material_code = sc.material_code
left join base_teammembers tm on tm.team_code = sc.team_code
</sql>
<select id="selectProdStationCapabilityByObjId" parameterType="Long" resultMap="ProdStationCapabilityResult">
<include refid="selectProdStationCapabilityVo"/>
where sc.obj_id = #{objId}
</select>
<select id="selectProdStationCapabilityList" parameterType="ProdStationCapability" resultMap="ProdStationCapabilityResult">
<include refid="selectProdStationCapabilityVo"/>
<where>
<if test="stationCode != null and stationCode != ''">and sc.station_code = #{stationCode}</if>
<if test="materialCode != null and materialCode != ''">and sc.material_code = #{materialCode}</if>
<if test="materialName != null and materialName != ''">and mi.material_name like concat(concat('%', #{materialName}), '%')</if>
<if test="teamCode != null and teamCode != ''">and sc.team_code = #{teamCode}</if>
<if test="status != null and status != ''">and sc.status = #{status}</if>
</where>
order by sc.station_code, sc.material_code
</select>
<select id="selectByStationCodeAndMaterialCode" parameterType="ProdStationCapability" resultMap="ProdStationCapabilityResult">
<include refid="selectProdStationCapabilityVo"/>
where sc.station_code = #{stationCode}
and sc.material_code = #{materialCode}
</select>
<insert id="insertProdStationCapability" parameterType="ProdStationCapability">
<selectKey keyProperty="objId" resultType="long" order="BEFORE">
select seq_prod_sta_cap.nextval as objId from dual
</selectKey>
insert into prod_sta_cap (
obj_id, station_code, material_code, standard_ct, shift_cap, day_cap, changeover_min,
team_code, status, remark, create_by, create_time, update_by, update_time
) values (
#{objId}, #{stationCode}, #{materialCode}, #{standardCt}, #{shiftCap}, #{dayCap}, #{changeoverMin},
#{teamCode}, #{status}, #{remark}, #{createdBy}, #{createdTime}, #{updatedBy}, #{updatedTime}
)
</insert>
<update id="updateProdStationCapability" parameterType="ProdStationCapability">
update prod_sta_cap
<set>
station_code = #{stationCode},
material_code = #{materialCode},
standard_ct = #{standardCt},
shift_cap = #{shiftCap},
day_cap = #{dayCap},
changeover_min = #{changeoverMin},
team_code = #{teamCode},
status = #{status},
remark = #{remark},
update_by = #{updatedBy},
update_time = #{updatedTime}
</set>
where obj_id = #{objId}
</update>
<delete id="deleteProdStationCapabilityByObjId" parameterType="Long">
delete from prod_sta_cap where obj_id = #{objId}
</delete>
<delete id="deleteProdStationCapabilityByObjIds" parameterType="Long">
delete from prod_sta_cap where obj_id in
<foreach collection="array" item="objId" open="(" separator="," close=")">
#{objId}
</foreach>
</delete>
</mapper>

@ -0,0 +1,152 @@
<?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.aucma.production.mapper.ProdTaskPoolMapper">
<resultMap id="ProdTaskPoolResult" type="ProdTaskPool">
<result property="objId" column="obj_id"/>
<result property="orderCode" column="order_code"/>
<result property="materialCode" column="material_code"/>
<result property="materialName" column="material_name"/>
<result property="orderAmount" column="order_amount"/>
<result property="completeAmount" column="complete_amount"/>
<result property="executionStatus" column="execution_status"/>
<result property="taskBucket" column="task_bucket"/>
<result property="ownerUserId" column="owner_user_id"/>
<result property="ownerUserName" column="owner_user_name"/>
<result property="priorityLevel" column="priority_level"/>
<result property="deviceCode" column="device_code"/>
<result property="endDate" column="end_date"/>
<result property="startTime" column="start_time"/>
<result property="finishTime" column="finish_time"/>
<result property="remark" column="task_remark"/>
<result property="createdBy" column="create_by"/>
<result property="createdTime" column="create_time"/>
<result property="updatedBy" column="update_by"/>
<result property="updatedTime" column="update_time"/>
</resultMap>
<sql id="selectProdTaskPoolVo">
select tp.obj_id,
oi.order_code,
oi.material_code,
oi.material_name,
oi.order_amount,
oi.complete_amount,
nvl(oi.execution_status, 'PENDING') as execution_status,
case
when exists (
select 1
from prod_order_note pn
where pn.order_code = oi.order_code
and pn.status = '0'
and pn.note_type in ('ABNORMAL', 'LACK_MATERIAL', 'DELAY', 'LINE_CHANGE', 'CLOSE_REASON')
) then 'ABNORMAL'
when nvl(oi.execution_status, 'PENDING') = 'COMPLETED' then 'COMPLETED'
when nvl(oi.execution_status, 'PENDING') = 'RUNNING' then 'RUNNING'
when oi.end_date is not null and oi.end_date < trunc(sysdate) and nvl(oi.execution_status, 'PENDING') <> 'COMPLETED' then 'OVERTIME'
else 'PENDING'
end as task_bucket,
tp.owner_user_id,
su.nick_name as owner_user_name,
nvl(tp.priority_level, 'NORMAL') as priority_level,
oi.device_code,
oi.end_date,
oi.start_time,
oi.end_time as finish_time,
tp.task_remark,
tp.create_by,
tp.create_time,
tp.update_by,
tp.update_time
from base_orderinfo oi
left join prod_task_pool tp on tp.order_code = oi.order_code
left join z_sys_user su on su.user_id = tp.owner_user_id
</sql>
<select id="selectProdTaskPoolByOrderCode" parameterType="String" resultMap="ProdTaskPoolResult">
<include refid="selectProdTaskPoolVo"/>
where oi.order_code = #{orderCode}
</select>
<select id="selectProdTaskPoolList" parameterType="ProdTaskPool" resultMap="ProdTaskPoolResult">
<include refid="selectProdTaskPoolVo"/>
<where>
<if test="orderCode != null and orderCode != ''">and oi.order_code = #{orderCode}</if>
<if test="materialCode != null and materialCode != ''">and oi.material_code = #{materialCode}</if>
<if test="materialName != null and materialName != ''">and oi.material_name like concat(concat('%', #{materialName}), '%')</if>
<if test="executionStatus != null and executionStatus != ''">and nvl(oi.execution_status, 'PENDING') = #{executionStatus}</if>
<if test="ownerUserId != null">and tp.owner_user_id = #{ownerUserId}</if>
<if test="priorityLevel != null and priorityLevel != ''">and nvl(tp.priority_level, 'NORMAL') = #{priorityLevel}</if>
<if test="taskBucket != null and taskBucket != ''">
and (
case
when exists (
select 1
from prod_order_note pn
where pn.order_code = oi.order_code
and pn.status = '0'
and pn.note_type in ('ABNORMAL', 'LACK_MATERIAL', 'DELAY', 'LINE_CHANGE', 'CLOSE_REASON')
) then 'ABNORMAL'
when nvl(oi.execution_status, 'PENDING') = 'COMPLETED' then 'COMPLETED'
when nvl(oi.execution_status, 'PENDING') = 'RUNNING' then 'RUNNING'
when oi.end_date is not null and oi.end_date &lt; trunc(sysdate) and nvl(oi.execution_status, 'PENDING') &lt;&gt; 'COMPLETED' then 'OVERTIME'
else 'PENDING'
end
) = #{taskBucket}
</if>
</where>
order by
case nvl(tp.priority_level, 'NORMAL')
when 'URGENT' then 1
when 'HIGH' then 2
when 'NORMAL' then 3
else 4
end,
oi.end_date,
oi.order_code
</select>
<insert id="insertProdTaskPool" parameterType="ProdTaskPool">
<selectKey keyProperty="objId" resultType="long" order="BEFORE">
select seq_prod_task_pool.nextval as objId from dual
</selectKey>
insert into prod_task_pool (
obj_id, order_code, owner_user_id, priority_level, task_remark,
create_by, create_time, update_by, update_time
) values (
#{objId}, #{orderCode}, #{ownerUserId}, #{priorityLevel}, #{remark},
#{createdBy}, #{createdTime}, #{updatedBy}, #{updatedTime}
)
</insert>
<update id="updateProdTaskPool" parameterType="ProdTaskPool">
update prod_task_pool
<set>
owner_user_id = #{ownerUserId},
priority_level = #{priorityLevel},
task_remark = #{remark},
update_by = #{updatedBy},
update_time = #{updatedTime}
</set>
where order_code = #{orderCode}
</update>
<delete id="deleteProdTaskPoolByOrderCodes" parameterType="String">
delete from prod_task_pool where order_code in
<foreach collection="array" item="orderCode" open="(" separator="," close=")">
#{orderCode}
</foreach>
</delete>
<update id="updateOrderExecutionStatus" parameterType="ProdTaskPool">
update base_orderinfo
set execution_status = #{executionStatus},
start_time = case when #{executionStatus} = 'RUNNING' and start_time is null then sysdate else start_time end,
end_time = case when #{executionStatus} = 'COMPLETED' then sysdate else end_time end,
complete_date = case when #{executionStatus} = 'COMPLETED' then trunc(sysdate) else complete_date end,
updated_time = #{updatedTime}
where order_code = #{orderCode}
</update>
</mapper>

@ -0,0 +1,116 @@
<?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.aucma.production.mapper.ProdTeamShiftMapper">
<resultMap id="ProdTeamShiftResult" type="ProdTeamShift">
<result property="objId" column="obj_id"/>
<result property="teamCode" column="team_code"/>
<result property="teamName" column="team_name"/>
<result property="shiftDate" column="shift_date"/>
<result property="shiftCode" column="shift_code"/>
<result property="leaderUserId" column="leader_user_id"/>
<result property="leaderUserName" column="leader_user_name"/>
<result property="lineCode" column="line_code"/>
<result property="lineName" column="line_name"/>
<result property="areaDesc" column="area_desc"/>
<result property="status" column="status"/>
<result property="remark" column="remark"/>
<result property="createdBy" column="create_by"/>
<result property="createdTime" column="create_time"/>
<result property="updatedBy" column="update_by"/>
<result property="updatedTime" column="update_time"/>
</resultMap>
<sql id="selectProdTeamShiftVo">
select ts.obj_id,
ts.team_code,
tm.team_name,
ts.shift_date,
ts.shift_code,
ts.leader_user_id,
su.nick_name as leader_user_name,
ts.line_code,
pl.product_line_name as line_name,
ts.area_desc,
ts.status,
ts.remark,
ts.create_by,
ts.create_time,
ts.update_by,
ts.update_time
from prod_team_sch ts
left join base_teammembers tm on tm.team_code = ts.team_code
left join z_sys_user su on su.user_id = ts.leader_user_id
left join base_productline pl on pl.product_line_code = ts.line_code
</sql>
<select id="selectProdTeamShiftByObjId" parameterType="Long" resultMap="ProdTeamShiftResult">
<include refid="selectProdTeamShiftVo"/>
where ts.obj_id = #{objId}
</select>
<select id="selectProdTeamShiftList" parameterType="ProdTeamShift" resultMap="ProdTeamShiftResult">
<include refid="selectProdTeamShiftVo"/>
<where>
<if test="teamCode != null and teamCode != ''">and ts.team_code = #{teamCode}</if>
<if test="shiftCode != null and shiftCode != ''">and ts.shift_code = #{shiftCode}</if>
<if test="leaderUserId != null">and ts.leader_user_id = #{leaderUserId}</if>
<if test="lineCode != null and lineCode != ''">and ts.line_code = #{lineCode}</if>
<if test="status != null and status != ''">and ts.status = #{status}</if>
<if test="params.beginShiftDate != null and params.endShiftDate != null">
and ts.shift_date between to_date(#{params.beginShiftDate}, 'yyyy-mm-dd') and to_date(#{params.endShiftDate}, 'yyyy-mm-dd')
</if>
</where>
order by ts.shift_date desc, ts.team_code
</select>
<select id="selectUniqueShift" parameterType="ProdTeamShift" resultMap="ProdTeamShiftResult">
<include refid="selectProdTeamShiftVo"/>
where ts.team_code = #{teamCode}
and ts.shift_date = #{shiftDate}
and ts.shift_code = #{shiftCode}
</select>
<insert id="insertProdTeamShift" parameterType="ProdTeamShift">
<selectKey keyProperty="objId" resultType="long" order="BEFORE">
select seq_prod_team_sch.nextval as objId from dual
</selectKey>
insert into prod_team_sch (
obj_id, team_code, shift_date, shift_code, leader_user_id, line_code, area_desc, status,
remark, create_by, create_time, update_by, update_time
) values (
#{objId}, #{teamCode}, #{shiftDate}, #{shiftCode}, #{leaderUserId}, #{lineCode}, #{areaDesc}, #{status},
#{remark}, #{createdBy}, #{createdTime}, #{updatedBy}, #{updatedTime}
)
</insert>
<update id="updateProdTeamShift" parameterType="ProdTeamShift">
update prod_team_sch
<set>
team_code = #{teamCode},
shift_date = #{shiftDate},
shift_code = #{shiftCode},
leader_user_id = #{leaderUserId},
line_code = #{lineCode},
area_desc = #{areaDesc},
status = #{status},
remark = #{remark},
update_by = #{updatedBy},
update_time = #{updatedTime}
</set>
where obj_id = #{objId}
</update>
<delete id="deleteProdTeamShiftByObjId" parameterType="Long">
delete from prod_team_sch where obj_id = #{objId}
</delete>
<delete id="deleteProdTeamShiftByObjIds" parameterType="Long">
delete from prod_team_sch where obj_id in
<foreach collection="array" item="objId" open="(" separator="," close=")">
#{objId}
</foreach>
</delete>
</mapper>

@ -0,0 +1,110 @@
-- =============================================
-- 质量追溯测试数据Board4看板
-- 表REPORT_QUALITY_INSPECTION
-- 说明使用真实澳柯玛产品型号合格率90%以上
-- Oracle 11 兼容版本
-- =============================================
-- =============================================
-- 步骤1创建序列如果不存在
-- =============================================
BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_REPORT_QUALITY_INSPECTION'; EXCEPTION WHEN OTHERS THEN NULL; END;
/
CREATE SEQUENCE SEQ_REPORT_QUALITY_INSPECTION
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;
-- =============================================
-- 步骤2清理现有测试数据可选
-- =============================================
-- DELETE FROM REPORT_QUALITY_INSPECTION WHERE MATERIAL_NAME IN ('BD-150NF', 'BC/BD-150HY(N)', 'BC/BD-150HY', 'BD-150AF', 'AF-150KF', 'BD-150HA', 'BC/BD-150HE', 'BD(C)-410T', 'BC/BD-252PDHNY', 'BC/BD-252PDHN');
-- COMMIT;
-- =============================================
-- 步骤3插入质量追溯测试数据
-- 产品合格率设计全部90%以上):
-- 1. BD-150NF - 100% (10/10)
-- 2. BC/BD-150HY(N) - 100% (10/10)
-- 3. BC/BD-150HY - 100% (10/10)
-- 4. BD-150AF - 100% (10/10)
-- 5. AF-150KF - 100% (10/10)
-- 6. BD-150HA - 100% (10/10)
-- 7. BC/BD-150HE - 100% (10/10)
-- 8. BD(C)-410T - 100% (10/10)
-- 9. BC/BD-252PDHNY - 100% (10/10)
-- 10. BC/BD-252PDHN - 90% (9/10)
-- =============================================
-- 产品1: BD-150NF - 100%合格 (10条全部合格)
INSERT INTO REPORT_QUALITY_INSPECTION (OBJ_ID, BAR_CODE, MATERIAL_NAME, PROCESS_CODE, TEST_ITEM_CODE, TREATMENT_MEASURE, INSPECTOR_TIME, IS_FLAG)
SELECT SEQ_REPORT_QUALITY_INSPECTION.NEXTVAL, 'BC' || LPAD(LEVEL, 4, '0'), 'BD-150NF', 'P001', 'T001', '3', SYSDATE - DBMS_RANDOM.VALUE(0, 30), 1 FROM DUAL CONNECT BY LEVEL <= 10;
-- 产品2: BC/BD-150HY(N) - 100%合格 (10条全部合格)
INSERT INTO REPORT_QUALITY_INSPECTION (OBJ_ID, BAR_CODE, MATERIAL_NAME, PROCESS_CODE, TEST_ITEM_CODE, TREATMENT_MEASURE, INSPECTOR_TIME, IS_FLAG)
SELECT SEQ_REPORT_QUALITY_INSPECTION.NEXTVAL, 'BC' || LPAD(LEVEL, 4, '0'), 'BC/BD-150HY(N)', 'P002', 'T002', '3', SYSDATE - DBMS_RANDOM.VALUE(0, 30), 1 FROM DUAL CONNECT BY LEVEL <= 10;
-- 产品3: BC/BD-150HY - 100%合格 (10条全部合格)
INSERT INTO REPORT_QUALITY_INSPECTION (OBJ_ID, BAR_CODE, MATERIAL_NAME, PROCESS_CODE, TEST_ITEM_CODE, TREATMENT_MEASURE, INSPECTOR_TIME, IS_FLAG)
SELECT SEQ_REPORT_QUALITY_INSPECTION.NEXTVAL, 'BC' || LPAD(LEVEL, 4, '0'), 'BC/BD-150HY', 'P003', 'T003', '3', SYSDATE - DBMS_RANDOM.VALUE(0, 30), 1 FROM DUAL CONNECT BY LEVEL <= 10;
-- 产品4: BD-150AF - 100%合格 (10条全部合格)
INSERT INTO REPORT_QUALITY_INSPECTION (OBJ_ID, BAR_CODE, MATERIAL_NAME, PROCESS_CODE, TEST_ITEM_CODE, TREATMENT_MEASURE, INSPECTOR_TIME, IS_FLAG)
SELECT SEQ_REPORT_QUALITY_INSPECTION.NEXTVAL, 'BC' || LPAD(LEVEL, 4, '0'), 'BD-150AF', 'P004', 'T004', '3', SYSDATE - DBMS_RANDOM.VALUE(0, 30), 1 FROM DUAL CONNECT BY LEVEL <= 10;
-- 产品5: AF-150KF - 100%合格 (10条全部合格)
INSERT INTO REPORT_QUALITY_INSPECTION (OBJ_ID, BAR_CODE, MATERIAL_NAME, PROCESS_CODE, TEST_ITEM_CODE, TREATMENT_MEASURE, INSPECTOR_TIME, IS_FLAG)
SELECT SEQ_REPORT_QUALITY_INSPECTION.NEXTVAL, 'BC' || LPAD(LEVEL, 4, '0'), 'AF-150KF', 'P005', 'T005', '3', SYSDATE - DBMS_RANDOM.VALUE(0, 30), 1 FROM DUAL CONNECT BY LEVEL <= 10;
-- 产品6: BD-150HA - 100%合格 (10条全部合格)
INSERT INTO REPORT_QUALITY_INSPECTION (OBJ_ID, BAR_CODE, MATERIAL_NAME, PROCESS_CODE, TEST_ITEM_CODE, TREATMENT_MEASURE, INSPECTOR_TIME, IS_FLAG)
SELECT SEQ_REPORT_QUALITY_INSPECTION.NEXTVAL, 'BC' || LPAD(LEVEL, 4, '0'), 'BD-150HA', 'P006', 'T006', '3', SYSDATE - DBMS_RANDOM.VALUE(0, 30), 1 FROM DUAL CONNECT BY LEVEL <= 10;
-- 产品7: BC/BD-150HE - 100%合格 (10条全部合格)
INSERT INTO REPORT_QUALITY_INSPECTION (OBJ_ID, BAR_CODE, MATERIAL_NAME, PROCESS_CODE, TEST_ITEM_CODE, TREATMENT_MEASURE, INSPECTOR_TIME, IS_FLAG)
SELECT SEQ_REPORT_QUALITY_INSPECTION.NEXTVAL, 'BC' || LPAD(LEVEL, 4, '0'), 'BC/BD-150HE', 'P007', 'T007', '3', SYSDATE - DBMS_RANDOM.VALUE(0, 30), 1 FROM DUAL CONNECT BY LEVEL <= 10;
-- 产品8: BD(C)-410T - 100%合格 (10条全部合格)
INSERT INTO REPORT_QUALITY_INSPECTION (OBJ_ID, BAR_CODE, MATERIAL_NAME, PROCESS_CODE, TEST_ITEM_CODE, TREATMENT_MEASURE, INSPECTOR_TIME, IS_FLAG)
SELECT SEQ_REPORT_QUALITY_INSPECTION.NEXTVAL, 'BC' || LPAD(LEVEL, 4, '0'), 'BD(C)-410T', 'P008', 'T008', '3', SYSDATE - DBMS_RANDOM.VALUE(0, 30), 1 FROM DUAL CONNECT BY LEVEL <= 10;
-- 产品9: BC/BD-252PDHNY - 100%合格 (10条全部合格)
INSERT INTO REPORT_QUALITY_INSPECTION (OBJ_ID, BAR_CODE, MATERIAL_NAME, PROCESS_CODE, TEST_ITEM_CODE, TREATMENT_MEASURE, INSPECTOR_TIME, IS_FLAG)
SELECT SEQ_REPORT_QUALITY_INSPECTION.NEXTVAL, 'BC' || LPAD(LEVEL, 4, '0'), 'BC/BD-252PDHNY', 'P009', 'T009', '3', SYSDATE - DBMS_RANDOM.VALUE(0, 30), 1 FROM DUAL CONNECT BY LEVEL <= 10;
-- 产品10: BC/BD-252PDHN - 90%合格 (9条合格 + 1条返修)
INSERT INTO REPORT_QUALITY_INSPECTION (OBJ_ID, BAR_CODE, MATERIAL_NAME, PROCESS_CODE, TEST_ITEM_CODE, TREATMENT_MEASURE, INSPECTOR_TIME, IS_FLAG)
SELECT SEQ_REPORT_QUALITY_INSPECTION.NEXTVAL, 'BC' || LPAD(LEVEL, 4, '0'), 'BC/BD-252PDHN', 'P010', 'T010', '3', SYSDATE - DBMS_RANDOM.VALUE(0, 30), 1 FROM DUAL CONNECT BY LEVEL <= 9;
INSERT INTO REPORT_QUALITY_INSPECTION (OBJ_ID, BAR_CODE, MATERIAL_NAME, PROCESS_CODE, TEST_ITEM_CODE, TREATMENT_MEASURE, INSPECTOR_TIME, IS_FLAG)
VALUES (SEQ_REPORT_QUALITY_INSPECTION.NEXTVAL, 'BC0010', 'BC/BD-252PDHN', 'P010', 'T010', '1', SYSDATE - DBMS_RANDOM.VALUE(0, 30), 1);
COMMIT;
-- =============================================
-- 步骤4验证数据
-- =============================================
-- 查看各产品的质检统计
SELECT MATERIAL_NAME AS ,
COUNT(*) AS ,
SUM(CASE WHEN TREATMENT_MEASURE = '3' THEN 1 ELSE 0 END) AS ,
SUM(CASE WHEN TREATMENT_MEASURE = '1' THEN 1 ELSE 0 END) AS ,
ROUND(SUM(CASE WHEN TREATMENT_MEASURE = '3' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 0) AS
FROM REPORT_QUALITY_INSPECTION
WHERE MATERIAL_NAME IN ('BD-150NF', 'BC/BD-150HY(N)', 'BC/BD-150HY', 'BD-150AF', 'AF-150KF',
'BD-150HA', 'BC/BD-150HE', 'BD(C)-410T', 'BC/BD-252PDHNY', 'BC/BD-252PDHN')
GROUP BY MATERIAL_NAME
ORDER BY DESC;
-- 查看插入的总记录数
SELECT COUNT(*) AS FROM REPORT_QUALITY_INSPECTION;
-- =============================================
-- 清理测试数据(如需删除,执行以下语句)
-- =============================================
-- DELETE FROM REPORT_QUALITY_INSPECTION
-- WHERE MATERIAL_NAME IN ('BD-150NF', 'BC/BD-150HY(N)', 'BC/BD-150HY', 'BD-150AF', 'AF-150KF',
-- 'BD-150HA', 'BC/BD-150HE', 'BD(C)-410T', 'BC/BD-252PDHNY', 'BC/BD-252PDHN');
-- COMMIT;
Loading…
Cancel
Save