feat(order/shutdown): 添加批量操作功能

- 修改工单控制器接口名称从 /running 到 /getRunningOrders
- 新增批量开始生产接口 /batchStart 用于启动多个工单
- 新增批量更新完工数量接口 /batchUpdateQty 处理完成和不良数量
- 新增批量完工提报接口 /batchComplete 完成多个工单
- 实现工单解析工具方法 parseObjIds 和 parseLong
- 添加工单批量开始生产数据库操作 batchStartProduction
- 添加工单批量更新完工数量数据库操作 batchUpdateQuantity
- 添加工单批量完工提报数据库操作 batchCompleteProduction
- 在服务层实现对应的批量业务逻辑并添加事务管理
- 为停机记录模块添加批量更新停机原因功能
- 优化停机记录查询条件和排序方式
master
zangch@mesnac.com 2 days ago
parent b9ab8b1aa3
commit 2ae6bb79fe

@ -1,8 +1,11 @@
package com.aucma.base.controller;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import com.aucma.common.annotation.Log;
import com.aucma.common.enums.BusinessType;
import com.aucma.common.utils.DateUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
@ -150,9 +153,106 @@ public class BaseOrderInfoController extends BaseController {
*
*/
@PreAuthorize("@ss.hasPermi('base:orderInfo:list')")
@GetMapping("/running")
@GetMapping("/getRunningOrders")
public AjaxResult getRunningOrders() {
return success(baseOrderInfoService.getRunningOrders());
List<BaseOrderInfo> orders = baseOrderInfoService.getRunningOrders();
return AjaxResult.success(orders);
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('base:orderInfo:edit')")
@Log(title = "工单信息", businessType = BusinessType.UPDATE)
@PutMapping("/batchStart")
public AjaxResult batchStartProduction(@RequestBody Map<String, Object> params) {
Long[] objIds = parseObjIds(params.get("objIds"));
String operator = (String) params.get("operator");
if (objIds == null || objIds.length == 0) {
return AjaxResult.error("请选择要操作的工单");
}
if (operator == null || operator.isEmpty()) {
return AjaxResult.error("请输入操作员");
}
return toAjax(baseOrderInfoService.batchStartProduction(objIds, operator));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('base:orderInfo:edit')")
@Log(title = "工单信息", businessType = BusinessType.UPDATE)
@PutMapping("/batchUpdateQty")
public AjaxResult batchUpdateQuantity(@RequestBody Map<String, Object> params) {
Long[] objIds = parseObjIds(params.get("objIds"));
Long completeQty = parseLong(params.get("completeQty"));
Long defectQty = parseLong(params.get("defectQty"));
if (objIds == null || objIds.length == 0) {
return AjaxResult.error("请选择要操作的工单");
}
return toAjax(baseOrderInfoService.batchUpdateQuantity(objIds, completeQty, defectQty));
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('base:orderInfo:edit')")
@Log(title = "工单信息", businessType = BusinessType.UPDATE)
@PutMapping("/batchComplete")
public AjaxResult batchCompleteProduction(@RequestBody Map<String, Object> params) {
Long[] objIds = parseObjIds(params.get("objIds"));
Long completeQty = parseLong(params.get("completeQty"));
Long defectQty = parseLong(params.get("defectQty"));
if (objIds == null || objIds.length == 0) {
return AjaxResult.error("请选择要操作的工单");
}
return toAjax(baseOrderInfoService.batchCompleteProduction(objIds, completeQty, defectQty));
}
/**
* objIds
*/
private Long[] parseObjIds(Object obj) {
if (obj == null) {
return null;
}
if (obj instanceof List) {
List<?> list = (List<?>) obj;
Long[] result = new Long[list.size()];
for (int i = 0; i < list.size(); i++) {
Object item = list.get(i);
if (item instanceof Number) {
result[i] = ((Number) item).longValue();
} else {
result[i] = Long.parseLong(item.toString());
}
}
return result;
}
return null;
}
/**
* Long
*/
private Long parseLong(Object obj) {
if (obj == null) {
return 0L;
}
if (obj instanceof Number) {
return ((Number) obj).longValue();
}
try {
return Long.parseLong(obj.toString());
} catch (NumberFormatException e) {
return 0L;
}
}
/**

@ -66,4 +66,36 @@ public interface BaseOrderInfoMapper {
* @return
*/
public int deleteBaseOrderInfoByObjIds(Long[] objIds);
/**
*
*
* @param objIds ID
* @param operator
* @param startTime
* @return
*/
public int batchStartProduction(Long[] objIds, String operator, java.util.Date startTime);
/**
*
*
* @param objIds ID
* @param completeQty
* @param defectQty
* @param updateTime
* @return
*/
public int batchUpdateQuantity(Long[] objIds, Long completeQty, Long defectQty, java.util.Date updateTime);
/**
*
*
* @param objIds ID
* @param completeQty
* @param defectQty
* @param finishTime
* @return
*/
public int batchCompleteProduction(Long[] objIds, Long completeQty, Long defectQty, java.util.Date finishTime);
}

@ -118,4 +118,33 @@ public interface IBaseOrderInfoService {
* @return
*/
public BaseOrderInfo getRunningOrderByDevice(String deviceCode);
/**
*
*
* @param objIds ID
* @param operator
* @return
*/
public int batchStartProduction(Long[] objIds, String operator);
/**
*
*
* @param objIds ID
* @param completeQty
* @param defectQty
* @return
*/
public int batchUpdateQuantity(Long[] objIds, Long completeQty, Long defectQty);
/**
*
*
* @param objIds ID
* @param completeQty
* @param defectQty
* @return
*/
public int batchCompleteProduction(Long[] objIds, Long completeQty, Long defectQty);
}

@ -6,6 +6,7 @@ import java.util.List;
import com.aucma.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.aucma.base.mapper.BaseOrderInfoMapper;
import com.aucma.base.domain.BaseOrderInfo;
import com.aucma.base.service.IBaseOrderInfoService;
@ -182,7 +183,75 @@ public class BaseOrderInfoServiceImpl implements IBaseOrderInfoService {
BaseOrderInfo query = new BaseOrderInfo();
query.setDeviceCode(deviceCode);
query.setExecutionStatus("RUNNING");
List<BaseOrderInfo> list = baseOrderInfoMapper.selectAllOrderInfoList(query);
List<BaseOrderInfo> list = baseOrderInfoMapper.selectBaseOrderInfoList(query);
return list != null && !list.isEmpty() ? list.get(0) : null;
}
/**
*
*
* @param objIds ID
* @param operator
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public int batchStartProduction(Long[] objIds, String operator) {
if (objIds == null || objIds.length == 0) {
return 0;
}
if (operator == null || operator.isEmpty()) {
throw new RuntimeException("操作员不能为空");
}
Date now = DateUtils.getNowDate();
return baseOrderInfoMapper.batchStartProduction(objIds, operator, now);
}
/**
*
*
* @param objIds ID
* @param completeQty
* @param defectQty
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public int batchUpdateQuantity(Long[] objIds, Long completeQty, Long defectQty) {
if (objIds == null || objIds.length == 0) {
return 0;
}
if (completeQty == null) {
completeQty = 0L;
}
if (defectQty == null) {
defectQty = 0L;
}
Date now = DateUtils.getNowDate();
return baseOrderInfoMapper.batchUpdateQuantity(objIds, completeQty, defectQty, now);
}
/**
*
*
* @param objIds ID
* @param completeQty
* @param defectQty
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public int batchCompleteProduction(Long[] objIds, Long completeQty, Long defectQty) {
if (objIds == null || objIds.length == 0) {
return 0;
}
if (completeQty == null) {
completeQty = 0L;
}
if (defectQty == null) {
defectQty = 0L;
}
Date now = DateUtils.getNowDate();
return baseOrderInfoMapper.batchCompleteProduction(objIds, completeQty, defectQty, now);
}
}

@ -250,4 +250,42 @@
#{objId}
</foreach>
</delete>
<update id="batchStartProduction">
update base_orderinfo
set execution_status = 'RUNNING',
start_time = #{startTime},
execution_operator = #{operator},
updated_time = #{startTime}
where obj_id in
<foreach collection="objIds" item="objId" open="(" separator="," close=")">
#{objId}
</foreach>
and (execution_status is null or execution_status = 'PENDING')
</update>
<update id="batchUpdateQuantity">
update base_orderinfo
set actual_complete_qty = #{completeQty},
actual_defect_qty = #{defectQty},
updated_time = #{updateTime}
where obj_id in
<foreach collection="objIds" item="objId" open="(" separator="," close=")">
#{objId}
</foreach>
</update>
<update id="batchCompleteProduction">
update base_orderinfo
set execution_status = 'COMPLETED',
actual_complete_qty = #{completeQty},
actual_defect_qty = #{defectQty},
finish_time = #{finishTime},
updated_time = #{finishTime}
where obj_id in
<foreach collection="objIds" item="objId" open="(" separator="," close=")">
#{objId}
</foreach>
and execution_status = 'RUNNING'
</update>
</mapper>

@ -1,8 +1,10 @@
package com.aucma.dms.controller;
import com.aucma.common.annotation.Log;
import com.aucma.common.core.controller.BaseController;
import com.aucma.common.core.domain.AjaxResult;
import com.aucma.common.core.page.TableDataInfo;
import com.aucma.common.enums.BusinessType;
import com.aucma.common.utils.poi.ExcelUtil;
import com.aucma.dms.domain.DmsRecordShutDown;
import com.aucma.dms.service.IDmsRecordShutDownService;
@ -106,4 +108,34 @@ public class DmsRecordShutDownController extends BaseController
{
return toAjax(dmsRecordShutDownService.deleteDmsRecordShutDownByRecordShutDownIds(recordShutDownIds));
}
/**
* PDA
*/
@PreAuthorize("@ss.hasPermi('dms:shutDown:query')")
@GetMapping("/pda/list")
public AjaxResult pdaList()
{
List<DmsRecordShutDown> list = dmsRecordShutDownService.selectPdaShutDownList();
return AjaxResult.success(list);
}
/**
*
*/
@PreAuthorize("@ss.hasPermi('dms:shutDown:edit')")
@Log(title = "停机记录", businessType = BusinessType.UPDATE)
@PutMapping("/batchUpdateReason")
public AjaxResult batchUpdateReason(@RequestBody DmsRecordShutDown dmsRecordShutDown)
{
if (dmsRecordShutDown.getRecordShutDownIds() == null || dmsRecordShutDown.getRecordShutDownIds().length == 0)
{
return AjaxResult.error("请选择要维护的停机记录");
}
if (dmsRecordShutDown.getShutReasonId() == null)
{
return AjaxResult.error("请选择停机原因");
}
return toAjax(dmsRecordShutDownService.batchUpdateShutReason(dmsRecordShutDown.getRecordShutDownIds(), dmsRecordShutDown.getShutReasonId()));
}
}

@ -65,6 +65,17 @@ public class DmsRecordShutDown extends DmsBaseEntity
/** 设备名称(查询用,非持久化字段) */
private String deviceName;
/** 批量操作ID数组非持久化字段 */
private Long[] recordShutDownIds;
public Long[] getRecordShutDownIds() {
return recordShutDownIds;
}
public void setRecordShutDownIds(Long[] recordShutDownIds) {
this.recordShutDownIds = recordShutDownIds;
}
public String getDeviceCode() {
return deviceCode;
}

@ -66,4 +66,15 @@ public interface DmsRecordShutDownMapper
* @return
*/
public List<DmsRecordShutDown> selectPdaShutDownList();
/**
*
*
* @param recordShutDownIds ID
* @param shutReasonId ID
* @param updateBy
* @param updateTime
* @return
*/
public int batchUpdateShutReason(Long[] recordShutDownIds, Long shutReasonId, Long updateBy, java.util.Date updateTime);
}

@ -66,4 +66,13 @@ public interface IDmsRecordShutDownService
* @return
*/
public List<DmsRecordShutDown> selectPdaShutDownList();
/**
*
*
* @param recordShutDownIds ID
* @param shutReasonId ID
* @return
*/
public int batchUpdateShutReason(Long[] recordShutDownIds, Long shutReasonId);
}

@ -9,6 +9,7 @@ import com.aucma.dms.mapper.DmsRecordShutDownMapper;
import com.aucma.dms.service.IDmsRecordShutDownService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@ -110,4 +111,28 @@ public class DmsRecordShutDownServiceImpl implements IDmsRecordShutDownService{
{
return dmsRecordShutDownMapper.selectPdaShutDownList();
}
/**
*
*
* @param recordShutDownIds ID
* @param shutReasonId ID
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public int batchUpdateShutReason(Long[] recordShutDownIds, Long shutReasonId)
{
if (recordShutDownIds == null || recordShutDownIds.length == 0)
{
return 0;
}
if (shutReasonId == null)
{
throw new RuntimeException("停机原因不能为空");
}
Long updateBy = SecurityUtils.getLoginUser() == null ? SecurityUtils.getUserId() : SecurityUtils.getLoginUser().getUser().getUserId();
return dmsRecordShutDownMapper.batchUpdateShutReason(recordShutDownIds, shutReasonId, updateBy, DateUtils.getNowDate());
}
}

@ -133,11 +133,21 @@
<select id="selectPdaShutDownList" resultMap="DmsRecordShutDownResult">
<include refid="selectDmsRecordShutDownVo"/>
where r.active_flag = '1'
and (r.shut_end_time is null or r.shut_reason_id = 1)
order by r.create_time desc
where (shut_end_time is null or shut_reason_id = 1)
order by shut_begin_time desc
</select>
<update id="batchUpdateShutReason">
update dms_record_shut_down
set shut_reason_id = #{shutReasonId},
update_by = #{updateBy},
update_time = #{updateTime}
where record_shut_down_id in
<foreach collection="recordShutDownIds" item="recordShutDownId" open="(" separator="," close=")">
#{recordShutDownId}
</foreach>
</update>
<delete id="deleteDmsRecordShutDownByRecordShutDownId" parameterType="Long">
delete
from dms_record_shut_down

Loading…
Cancel
Save