新增原料入场记录功能,包含免密接口和数据同步,更新相关控制器、实体和服务,支持条码/批次号生成及管理,优化用户体验和系统实时数据处理能力。
This commit is contained in:
@@ -14,10 +14,12 @@ import org.jeecg.common.system.query.QueryGenerator;
|
||||
import org.jeecg.common.util.oConvertUtils;
|
||||
import org.jeecg.modules.xslmes.constant.MesXslCustomerBizStatus;
|
||||
import org.jeecg.modules.xslmes.entity.MesXslCustomer;
|
||||
import org.jeecg.modules.xslmes.entity.MesXslRawMaterialEntry;
|
||||
import org.jeecg.modules.xslmes.entity.MesXslSupplier;
|
||||
import org.jeecg.modules.xslmes.entity.MesXslVehicle;
|
||||
import org.jeecg.modules.xslmes.entity.MesXslWeightRecord;
|
||||
import org.jeecg.modules.xslmes.service.IMesXslCustomerService;
|
||||
import org.jeecg.modules.xslmes.service.IMesXslRawMaterialEntryService;
|
||||
import org.jeecg.modules.xslmes.service.IMesXslSupplierService;
|
||||
import org.jeecg.modules.xslmes.service.IMesXslVehicleService;
|
||||
import org.jeecg.modules.xslmes.service.IMesXslWeightRecordService;
|
||||
@@ -26,6 +28,7 @@ import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Objects;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
/**
|
||||
* 桌面端免密接口 — 统一入口
|
||||
@@ -45,6 +48,7 @@ public class MesXslDesktopAnonController {
|
||||
private final IMesXslCustomerService customerService;
|
||||
private final IMesXslSupplierService supplierService;
|
||||
private final IMesXslWeightRecordService weightRecordService;
|
||||
private final IMesXslRawMaterialEntryService rawMaterialEntryService;
|
||||
private final MesXslStompNotifyService stompNotify;
|
||||
|
||||
// ═══════════════════════════ 车辆管理 ═══════════════════════════
|
||||
@@ -422,6 +426,82 @@ public class MesXslDesktopAnonController {
|
||||
return Result.OK("批量删除成功!");
|
||||
}
|
||||
|
||||
// ═══════════════════════════ 原料入场记录 ═══════════════════════════
|
||||
|
||||
@Operation(summary = "原料入场记录-免密分页列表查询")
|
||||
@GetMapping("/xslmes/mesXslRawMaterialEntry/anon/list")
|
||||
public Result<IPage<MesXslRawMaterialEntry>> rawMaterialEntryAnonList(
|
||||
MesXslRawMaterialEntry entity,
|
||||
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
|
||||
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
|
||||
HttpServletRequest req) {
|
||||
QueryWrapper<MesXslRawMaterialEntry> qw = QueryGenerator.initQueryWrapper(entity, req.getParameterMap());
|
||||
qw.orderByDesc("create_time");
|
||||
IPage<MesXslRawMaterialEntry> page = rawMaterialEntryService.page(new Page<>(pageNo, pageSize), qw);
|
||||
return Result.OK(page);
|
||||
}
|
||||
|
||||
@Operation(summary = "原料入场记录-免密通过id查询")
|
||||
@GetMapping("/xslmes/mesXslRawMaterialEntry/anon/queryById")
|
||||
public Result<MesXslRawMaterialEntry> rawMaterialEntryAnonQueryById(@RequestParam(name = "id") String id) {
|
||||
MesXslRawMaterialEntry entity = rawMaterialEntryService.getById(id);
|
||||
return entity != null ? Result.OK(entity) : Result.error("未找到对应数据");
|
||||
}
|
||||
|
||||
@Operation(summary = "原料入场记录-免密生成条码/批次号")
|
||||
@GetMapping("/xslmes/mesXslRawMaterialEntry/anon/generateBarcode")
|
||||
public Result<String> rawMaterialEntryAnonGenerateBarcode(
|
||||
@RequestParam(name = "materialCode", defaultValue = "") String materialCode) {
|
||||
return Result.OK(rawMaterialEntryService.generateBarcode(materialCode));
|
||||
}
|
||||
|
||||
@Operation(summary = "原料入场记录-免密添加")
|
||||
@PostMapping("/xslmes/mesXslRawMaterialEntry/anon/add")
|
||||
public Result<String> rawMaterialEntryAnonAdd(@RequestBody MesXslRawMaterialEntry entity) {
|
||||
// 条码/批次号为空时服务端自动生成
|
||||
if (StringUtils.isBlank(entity.getBarcode())) {
|
||||
String code = rawMaterialEntryService.generateBarcode(
|
||||
StringUtils.defaultString(entity.getMaterialCode(), ""));
|
||||
entity.setBarcode(code);
|
||||
}
|
||||
if (StringUtils.isBlank(entity.getBatchNo())) {
|
||||
entity.setBatchNo(entity.getBarcode());
|
||||
}
|
||||
rawMaterialEntryService.save(entity);
|
||||
stompNotify.publishRawMaterialEntryChanged("add", entity.getId());
|
||||
return Result.OK("添加成功!");
|
||||
}
|
||||
|
||||
@Operation(summary = "原料入场记录-免密编辑")
|
||||
@RequestMapping(value = "/xslmes/mesXslRawMaterialEntry/anon/edit", method = {RequestMethod.PUT, RequestMethod.POST})
|
||||
public Result<String> rawMaterialEntryAnonEdit(@RequestBody MesXslRawMaterialEntry entity) {
|
||||
if (oConvertUtils.isEmpty(entity.getId())) {
|
||||
return Result.error("主键不能为空");
|
||||
}
|
||||
boolean ok = rawMaterialEntryService.updateById(entity);
|
||||
if (!ok) {
|
||||
return Result.error("数据已被他人修改,请刷新后重试");
|
||||
}
|
||||
stompNotify.publishRawMaterialEntryChanged("edit", entity.getId());
|
||||
return Result.OK("编辑成功!");
|
||||
}
|
||||
|
||||
@Operation(summary = "原料入场记录-免密删除")
|
||||
@DeleteMapping("/xslmes/mesXslRawMaterialEntry/anon/delete")
|
||||
public Result<String> rawMaterialEntryAnonDelete(@RequestParam(name = "id") String id) {
|
||||
rawMaterialEntryService.removeById(id);
|
||||
stompNotify.publishRawMaterialEntryChanged("delete", id);
|
||||
return Result.OK("删除成功!");
|
||||
}
|
||||
|
||||
@Operation(summary = "原料入场记录-免密批量删除")
|
||||
@DeleteMapping("/xslmes/mesXslRawMaterialEntry/anon/deleteBatch")
|
||||
public Result<String> rawMaterialEntryAnonDeleteBatch(@RequestParam(name = "ids") String ids) {
|
||||
rawMaterialEntryService.removeByIds(Arrays.asList(ids.split(",")));
|
||||
stompNotify.publishRawMaterialEntryChanged("batchDelete", ids);
|
||||
return Result.OK("批量删除成功!");
|
||||
}
|
||||
|
||||
// ─────────────────────────── 车辆私有辅助 ────────────────────────────
|
||||
|
||||
private void applyWeightBillType(MesXslWeightRecord record) {
|
||||
|
||||
@@ -7,6 +7,7 @@ import org.jeecg.common.api.vo.Result;
|
||||
import org.jeecg.common.system.query.QueryGenerator;
|
||||
import org.jeecg.modules.xslmes.entity.MesXslRawMaterialEntry;
|
||||
import org.jeecg.modules.xslmes.service.IMesXslRawMaterialEntryService;
|
||||
import org.jeecg.modules.xslmes.service.MesXslStompNotifyService;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
@@ -36,6 +37,8 @@ public class MesXslRawMaterialEntryController extends JeecgController<MesXslRawM
|
||||
|
||||
@Autowired
|
||||
private IMesXslRawMaterialEntryService mesXslRawMaterialEntryService;
|
||||
@Autowired
|
||||
private MesXslStompNotifyService stompNotify;
|
||||
|
||||
@Operation(summary = "原料入场记录-分页列表查询")
|
||||
@GetMapping(value = "/list")
|
||||
@@ -55,6 +58,7 @@ public class MesXslRawMaterialEntryController extends JeecgController<MesXslRawM
|
||||
@PostMapping(value = "/add")
|
||||
public Result<String> add(@RequestBody MesXslRawMaterialEntry mesXslRawMaterialEntry) {
|
||||
mesXslRawMaterialEntryService.save(mesXslRawMaterialEntry);
|
||||
stompNotify.publishRawMaterialEntryChanged("add", mesXslRawMaterialEntry.getId());
|
||||
return Result.OK("添加成功!");
|
||||
}
|
||||
|
||||
@@ -64,6 +68,7 @@ public class MesXslRawMaterialEntryController extends JeecgController<MesXslRawM
|
||||
@RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
|
||||
public Result<String> edit(@RequestBody MesXslRawMaterialEntry mesXslRawMaterialEntry) {
|
||||
mesXslRawMaterialEntryService.updateById(mesXslRawMaterialEntry);
|
||||
stompNotify.publishRawMaterialEntryChanged("edit", mesXslRawMaterialEntry.getId());
|
||||
return Result.OK("编辑成功!");
|
||||
}
|
||||
|
||||
@@ -73,6 +78,7 @@ public class MesXslRawMaterialEntryController extends JeecgController<MesXslRawM
|
||||
@DeleteMapping(value = "/delete")
|
||||
public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
|
||||
mesXslRawMaterialEntryService.removeById(id);
|
||||
stompNotify.publishRawMaterialEntryChanged("delete", id);
|
||||
return Result.OK("删除成功!");
|
||||
}
|
||||
|
||||
@@ -82,6 +88,7 @@ public class MesXslRawMaterialEntryController extends JeecgController<MesXslRawM
|
||||
@DeleteMapping(value = "/deleteBatch")
|
||||
public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
|
||||
this.mesXslRawMaterialEntryService.removeByIds(Arrays.asList(ids.split(",")));
|
||||
stompNotify.publishRawMaterialEntryChanged("batchDelete", ids);
|
||||
return Result.OK("批量删除成功!");
|
||||
}
|
||||
|
||||
|
||||
@@ -57,6 +57,10 @@ public class MesXslRawMaterialEntry implements Serializable {
|
||||
@Schema(description = "物料ID")
|
||||
private String materialId;
|
||||
|
||||
@Excel(name = "物料编码", width = 20)
|
||||
@Schema(description = "物料编码(用于生成条码/批次号)")
|
||||
private String materialCode;
|
||||
|
||||
@Excel(name = "物料名称", width = 20)
|
||||
@Schema(description = "物料名称")
|
||||
private String materialName;
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package org.jeecg.modules.xslmes.rule;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jeecg.common.handler.IFillRuleHandler;
|
||||
import org.jeecg.common.util.SpringContextUtils;
|
||||
import org.jeecg.modules.xslmes.service.IMesXslRawMaterialEntryService;
|
||||
|
||||
/**
|
||||
* 填值规则:原料入场记录 条码/批次号生成
|
||||
* 格式:QH + 物料编码 + 日期(yyMMdd) + 当日序号(001起)
|
||||
* rule_code: mes_raw_material_barcode_rule
|
||||
*/
|
||||
@Slf4j
|
||||
public class RawMaterialBarcodeRule implements IFillRuleHandler {
|
||||
|
||||
@Override
|
||||
public Object execute(JSONObject params, JSONObject formData) {
|
||||
String materialCode = "";
|
||||
if (formData != null && StringUtils.isNotBlank(formData.getString("materialCode"))) {
|
||||
materialCode = formData.getString("materialCode").trim();
|
||||
} else if (params != null && StringUtils.isNotBlank(params.getString("materialCode"))) {
|
||||
materialCode = params.getString("materialCode").trim();
|
||||
}
|
||||
log.info("原料入场条码生成规则 materialCode={}", materialCode);
|
||||
IMesXslRawMaterialEntryService service =
|
||||
SpringContextUtils.getBean(IMesXslRawMaterialEntryService.class);
|
||||
return service.generateBarcode(materialCode);
|
||||
}
|
||||
}
|
||||
@@ -10,4 +10,13 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
* @Version: V1.0
|
||||
*/
|
||||
public interface IMesXslRawMaterialEntryService extends IService<MesXslRawMaterialEntry> {
|
||||
|
||||
/**
|
||||
* 生成条码/批次号
|
||||
* 格式:QH + 物料编码 + 日期(yyMMdd) + 当日序号(001起)
|
||||
*
|
||||
* @param materialCode 物料编码
|
||||
* @return 生成的条码字符串
|
||||
*/
|
||||
String generateBarcode(String materialCode);
|
||||
}
|
||||
|
||||
@@ -40,6 +40,11 @@ public class MesXslStompNotifyService {
|
||||
publish("/topic/sync/mes-weight-records", "MES_WEIGHT_RECORD_CHANGED", "weightRecordId", weightRecordId, action);
|
||||
}
|
||||
|
||||
/** 广播原料入场记录变更事件到 /topic/sync/mes-raw-material-entries */
|
||||
public void publishRawMaterialEntryChanged(String action, String entryId) {
|
||||
publish("/topic/sync/mes-raw-material-entries", "MES_RAW_MATERIAL_ENTRY_CHANGED", "entryId", entryId, action);
|
||||
}
|
||||
|
||||
/** 广播密炼物料数据变更事件到 /topic/sync/mes-mixer-materials */
|
||||
public void publishMixerMaterialChanged(String action, String mixerMaterialId) {
|
||||
publish("/topic/sync/mes-mixer-materials", "MIXER_MATERIAL_CHANGED", "mixerMaterialId", mixerMaterialId, action);
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package org.jeecg.modules.xslmes.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.jeecg.modules.xslmes.entity.MesXslRawMaterialEntry;
|
||||
import org.jeecg.modules.xslmes.mapper.MesXslRawMaterialEntryMapper;
|
||||
import org.jeecg.modules.xslmes.service.IMesXslRawMaterialEntryService;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Description: 原料入场记录
|
||||
@@ -13,5 +17,20 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
* @Version: V1.0
|
||||
*/
|
||||
@Service
|
||||
public class MesXslRawMaterialEntryServiceImpl extends ServiceImpl<MesXslRawMaterialEntryMapper, MesXslRawMaterialEntry> implements IMesXslRawMaterialEntryService {
|
||||
public class MesXslRawMaterialEntryServiceImpl
|
||||
extends ServiceImpl<MesXslRawMaterialEntryMapper, MesXslRawMaterialEntry>
|
||||
implements IMesXslRawMaterialEntryService {
|
||||
|
||||
@Override
|
||||
public String generateBarcode(String materialCode) {
|
||||
if (materialCode == null) materialCode = "";
|
||||
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
|
||||
String prefix = "QH" + materialCode.trim() + dateStr;
|
||||
|
||||
LambdaQueryWrapper<MesXslRawMaterialEntry> qw = new LambdaQueryWrapper<>();
|
||||
qw.likeRight(MesXslRawMaterialEntry::getBarcode, prefix);
|
||||
long count = this.count(qw);
|
||||
|
||||
return prefix + String.format("%03d", count + 1);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user