Browse Source

标签类型

master
han\hanst 2 days ago
parent
commit
2a8ed782e5
  1. 48
      src/main/java/com/gaotao/modules/base/service/Impl/BaseServiceImpl.java
  2. 42
      src/main/java/com/gaotao/modules/base/service/Impl/ReportLabelListServiceImpl.java
  3. 19
      src/main/resources/mapper/base/BaseMapper.xml

48
src/main/java/com/gaotao/modules/base/service/Impl/BaseServiceImpl.java

@ -402,49 +402,35 @@ public class BaseServiceImpl implements BaseService {
@Override
@Transactional
public void insertUserLabelPrinter(UserLabelPrinterData inData) {
//公共参数
String site = inData.getSite();
String userId = inData.getUserId();
String labelNo = inData.getLabelNo();
//调用存储过程 判断是否可以新增
Map<String, Object> checkMap = this.checkInsertUserLabelPrinter(site, userId, labelNo);
//判断是否检验成功
String resultCode = String.valueOf(checkMap.get("resultCode"));
if (!"200".equalsIgnoreCase(resultCode)) {
String msg = String.valueOf(checkMap.get("resultMsg"));
String objectId = String.valueOf(checkMap.get("objectId"));
throw new XJException(msg, Integer.parseInt(resultCode), objectId);
String userId = trimUpper(inData.getUserId());
String labelType = trimToEmpty(inData.getLabelType());
// 打印机配置已改为 UserID + ReportFamily 主键插入时必须显式携带标签类型
if (isBlank(userId)) {
throw new XJException(sysMsgService.getLanguageMsg(SysMsgConstant.OBJECT_ID_200078));
}
if (isBlank(labelType)) {
throw new XJException("标签类型不能为空!");
}
inData.setUserId(userId);
inData.setLabelType(labelType);
inData.setLabelNo(trimUpper(inData.getLabelNo()));
baseMapper.insertUserLabelPrinter(inData);
}
/**
* @description: 调用存储过程 检查是否可以插入当前用户的标签打印机参数
* @author LR
* @date 2023/1/6 13:36
* @version 1.0
*/
public Map<String, Object> checkInsertUserLabelPrinter(String site, String userId, String labelNo) {
List<Object> params = new ArrayList<>();
params.add(site);
params.add(userId);
params.add(labelNo);
//存储过程 调用存储过程 创建分卷
List<Map<String, Object>> resultList = procedureMapper.getProcedureData("checkInsertUserLabelPrinter", params);
//返回结果
return resultList.get(0);
}
@Override
public void updateUserLabelPrinter(UserLabelPrinterData inData) {
//修改目前不需要做校验
inData.setUserId(trimUpper(inData.getUserId()));
inData.setLabelType(trimToEmpty(inData.getLabelType()));
// 修改按 UserID + ReportFamily 定位避免误更新其他标签类型
baseMapper.updateUserLabelPrinter(inData);
}
@Override
public void deleteUserLabelPrinter(UserLabelPrinterData inData) {
//目前不需要做校验
inData.setUserId(trimUpper(inData.getUserId()));
inData.setLabelType(trimToEmpty(inData.getLabelType()));
// 删除按 UserID + ReportFamily 定位避免误删其他标签类型
baseMapper.deleteUserLabelPrinter(inData);
}

42
src/main/java/com/gaotao/modules/base/service/Impl/ReportLabelListServiceImpl.java

@ -235,18 +235,12 @@ public class ReportLabelListServiceImpl extends ServiceImpl<ReportLabelListMappe
log.info("生成了 {} 个ZPL代码,准备打印", zplCodeList.size());
// 3. 获取用户的打印机配置
UserLabelPrinterData printerQuery = new UserLabelPrinterData();
printerQuery.setUserId(printRequest.getUserId());
printerQuery.setLabelNo(defaultLabelSettingData.getLabelNo());
List<UserLabelPrinterData> printers = baseService.getUserLabelPrinters(printerQuery);
if (printers.isEmpty()) {
throw new RuntimeException("未找到指定的打印机配置");
}
UserLabelPrinterData printer = printers.getFirst();
String printerLabelType = StringUtils.defaultIfBlank(
defaultLabelSettingData.getLabelType(),
printRequest.getLabelType()
);
UserLabelPrinterData printer = getRequiredLabelPrinter(printRequest.getUserId(), printerLabelType);
String printerIP = printer.getIpAddress();
if (printerIP == null || printerIP.trim().isEmpty()) {
throw new RuntimeException("打印机IP地址未配置");
}
// 4. 处理打印份数
int requestedCopies = printRequest.getCopies() != null && printRequest.getCopies() > 0 ? printRequest.getCopies() : 1;
@ -723,7 +717,7 @@ public class ReportLabelListServiceImpl extends ServiceImpl<ReportLabelListMappe
// 则系统会替换customFields里的qty字段到ZPL代码里对应的位置
Map<String, Object> customFields = printRequest.getCustomFields();
// 2. 获取外箱标签打印机配置
UserLabelPrinterData outerPrinter = getRequiredLabelPrinter(printRequest.getUserId(), outerLabelSetting.getLabelNo());
UserLabelPrinterData outerPrinter = getRequiredLabelPrinter(printRequest.getUserId(), outerLabelSetting.getLabelType());
// 3. 生成外箱打印任务
List<Long> taskIds = new ArrayList<>();
@ -820,17 +814,22 @@ public class ReportLabelListServiceImpl extends ServiceImpl<ReportLabelListMappe
/**
* 获取用户对应标签的打印机配置
*/
private UserLabelPrinterData getRequiredLabelPrinter(String userId, String labelNo) {
private UserLabelPrinterData getRequiredLabelPrinter(String userId, String labelType) {
String normalizedLabelType = StringUtils.trimToEmpty(labelType);
if (StringUtils.isBlank(normalizedLabelType)) {
throw new RuntimeException("未找到指定的打印机配置: labelType为空");
}
UserLabelPrinterData printerQuery = new UserLabelPrinterData();
printerQuery.setUserId(userId);
printerQuery.setLabelNo(labelNo);
// 打印机配置改为按标签类型匹配避免依赖具体标签编号导致取不到IP
printerQuery.setLabelType(normalizedLabelType);
List<UserLabelPrinterData> printers = baseService.getUserLabelPrinters(printerQuery);
if (printers == null || printers.isEmpty()) {
throw new RuntimeException("未找到指定的打印机配置: labelNo=" + labelNo);
throw new RuntimeException("未找到指定的打印机配置: labelType=" + normalizedLabelType);
}
UserLabelPrinterData printer = printers.getFirst();
if (StringUtils.isBlank(printer.getIpAddress())) {
throw new RuntimeException("打印机IP地址未配置: labelNo=" + labelNo);
throw new RuntimeException("打印机IP地址未配置: labelType=" + normalizedLabelType);
}
return printer;
}
@ -880,7 +879,7 @@ public class ReportLabelListServiceImpl extends ServiceImpl<ReportLabelListMappe
}
LabelSettingData innerLabelSetting = getRequiredLabelSetting(innerLabelNo, null);
UserLabelPrinterData innerPrinter = resolveInnerPrinter(printRequest.getUserId(), innerLabelNo, outerPrinter);
UserLabelPrinterData innerPrinter = resolveInnerPrinter(printRequest.getUserId(), innerLabelSetting, outerPrinter);
// 复用同一个queryParams确保IFS缓存可跨外箱/内箱复用避免重复调用getIfsDataFromApi
Map<String, Object> innerQueryParams = baseQueryParams;
@ -921,11 +920,14 @@ public class ReportLabelListServiceImpl extends ServiceImpl<ReportLabelListMappe
/**
* 解析内箱标签打印机优先取内箱标签专属打印机未配置则沿用外箱打印机
*/
private UserLabelPrinterData resolveInnerPrinter(String userId, String innerLabelNo, UserLabelPrinterData outerPrinter) {
private UserLabelPrinterData resolveInnerPrinter(String userId, LabelSettingData innerLabelSetting, UserLabelPrinterData outerPrinter) {
String innerLabelNo = innerLabelSetting == null ? "" : innerLabelSetting.getLabelNo();
String innerLabelType = innerLabelSetting == null ? "" : innerLabelSetting.getLabelType();
try {
return getRequiredLabelPrinter(userId, innerLabelNo);
return getRequiredLabelPrinter(userId, innerLabelType);
} catch (Exception ex) {
log.warn("内箱标签未配置独立打印机,沿用外箱打印机。innerLabelNo={}, reason={}", innerLabelNo, ex.getMessage());
log.warn("内箱标签未配置独立打印机,沿用外箱打印机。innerLabelNo={}, innerLabelType={}, reason={}",
innerLabelNo, innerLabelType, ex.getMessage());
return outerPrinter;
}
}

19
src/main/resources/mapper/base/BaseMapper.xml

@ -251,20 +251,21 @@
<!--查询标签的客制化配置信息-->
<select id="getUserLabelPrinters" parameterType="UserLabelPrinterData" resultType="UserLabelPrinterData">
SELECT rfp.UserID userId, ssu.user_display userDisplay, rfp.ReportID labelNo, rfl.Reportfile labelName,
rfl.ReportType labelClass,
SELECT rfp.UserID userId, ssu.user_display userDisplay, rfp.ReportID labelNo, rfp.ReportFamily labelType,
'' labelName, '' labelClass,
rfp.NewPrinterName printerName, rfp.IPAddress ipAddress
FROM ReportFileList_UserPrinter rfp
LEFT JOIN sys_user ssu ON ssu.username = rfp.UserID
LEFT JOIN ReportFileList rfl ON rfl.ReportID = rfp.ReportID
<where>
AND rfl.ReportID = rfp.ReportID
<if test="userId != null and userId != ''">
and rfp.UserID LIKE CONCAT('%', #{userId}, '%')
</if>
<if test="labelNo != null and labelNo != ''">
and rfp.ReportID LIKE CONCAT('%', #{labelNo}, '%')
</if>
<if test="labelType != null and labelType != ''">
and rfp.ReportFamily = #{labelType}
</if>
<if test="labelName != null and labelName != ''">
and rfp.IPAddress LIKE CONCAT('%', #{labelName}, '%')
</if>
@ -272,7 +273,7 @@
and rfp.NewPrinterName LIKE #{printerName}
</if>
</where>
ORDER BY rfp.ReportID ASC
ORDER BY rfp.ReportFamily ASC
</select>
<!--按照userId 查询用户的信息-->
@ -286,8 +287,8 @@
<!--插入用户的标签打印机参数-->
<insert id="insertUserLabelPrinter" parameterType="UserLabelPrinterData">
INSERT INTO ReportFileList_UserPrinter(ReportID, UserID, PrinterName, IPAddress, NewPrinterName)
VALUES (#{labelNo}, #{userId}, '', #{ipAddress}, #{printerName})
INSERT INTO ReportFileList_UserPrinter(ReportFamily, ReportID, UserID, PrinterName, IPAddress, NewPrinterName)
VALUES (#{labelType}, ISNULL(#{labelNo}, ''), #{userId}, '', #{ipAddress}, #{printerName})
</insert>
@ -295,7 +296,7 @@
<update id="updateUserLabelPrinter" parameterType="UserLabelPrinterData">
UPDATE ReportFileList_UserPrinter SET IPAddress = #{ipAddress}, NewPrinterName = #{printerName}
<where>
AND ReportID = #{labelNo} AND UserID = #{userId}
AND ReportFamily = #{labelType} AND UserID = #{userId}
</where>
</update>
@ -303,7 +304,7 @@
<delete id="deleteUserLabelPrinter" parameterType="UserLabelPrinterData">
DELETE FROM ReportFileList_UserPrinter
<where>
AND ReportID = #{labelNo} AND UserID = #{userId}
AND ReportFamily = #{labelType} AND UserID = #{userId}
</where>
</delete>

Loading…
Cancel
Save