opt: 部分逻辑

This commit is contained in:
2025-09-11 10:05:05 +08:00
parent 55e721cd3e
commit c17e8e7e10
20 changed files with 422 additions and 263 deletions

View File

@@ -44,6 +44,13 @@
<version>3.0.13</version> <version>3.0.13</version>
<type>pom</type> <type>pom</type>
</dependency> </dependency>
<!-- <dependency>-->
<!-- <groupId>org.nl</groupId>-->
<!-- <artifactId>nl-verify-check-sdk</artifactId>-->
<!-- <version>1.0-SNAPSHOT</version>-->
<!-- <scope>system</scope>-->
<!-- <systemPath>${project.basedir}/lib/nl-verify-check-sdk-1.0-SNAPSHOT.jar</systemPath>-->
<!-- </dependency>-->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>

View File

@@ -648,7 +648,7 @@ public class PdaJBServiceImpl implements PdaJBService {
public PdaResponse jbGetLtInfo(JSONObject param) { public PdaResponse jbGetLtInfo(JSONObject param) {
String vehicleCode = param.getString("vehicle_code"); String vehicleCode = param.getString("vehicle_code");
String struct_code = param.getString("struct_code"); String struct_code = param.getString("struct_code");
List<GroupInfoPdaVo> groups = pdaJBMapper.getGroupInfoByVehicle(vehicleCode, "01"); List<GroupInfoPdaVo> groups = pdaJBMapper.getGroupInfoByVehicle(vehicleCode, "02");
if (groups.size() > 1) { if (groups.size() > 1) {
throw new BadRequestException("组盘信息错误!"); throw new BadRequestException("组盘信息错误!");
} }
@@ -833,9 +833,7 @@ public class PdaJBServiceImpl implements PdaJBService {
} }
// 类型转换 // 类型转换
ArrayList<LinkedHashMap> tables = new ArrayList<>(); ArrayList<LinkedHashMap> tables = new ArrayList<>();
ioStorInvDis.forEach(item -> { ioStorInvDis.forEach(item -> tables.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class)));
tables.add(JSONObject.parseObject(JSONObject.toJSONString(item), LinkedHashMap.class));
});
divObj.put("tableMater", tables); divObj.put("tableMater", tables);
return divObj; return divObj;
} }

View File

@@ -35,7 +35,8 @@
mg.*, mg.*,
ss.struct_code, ss.struct_code,
mm.material_code, mm.material_code,
mm.material_name mm.material_name,
mm.material_spec
FROM FROM
`md_pb_groupplate` mg `md_pb_groupplate` mg
LEFT JOIN st_ivt_structattr ss ON ss.storagevehicle_code = mg.storagevehicle_code LEFT JOIN st_ivt_structattr ss ON ss.storagevehicle_code = mg.storagevehicle_code

View File

@@ -124,6 +124,7 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
pointType, String pointCode, String vehicleIsNull, boolean isFourPoint); pointType, String pointCode, String vehicleIsNull, boolean isFourPoint);
SchBasePoint getNotTaskByRegionAndType(String regionCode, String s); SchBasePoint getNotTaskByRegionAndType(String regionCode, String s);
SchBasePoint getNotTaskByDeviceAndType(String regionCode, String s);
/** /**
* 获取可用的没任务的点位 * 获取可用的没任务的点位

View File

@@ -48,4 +48,6 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
SchBasePoint getNotTaskByRegionAndType(String regionCode, String type); SchBasePoint getNotTaskByRegionAndType(String regionCode, String type);
List<SchBasePoint> getCanUseCFGJs(SchBasePoint parentPoint, String pointStatus); List<SchBasePoint> getCanUseCFGJs(SchBasePoint parentPoint, String pointStatus);
SchBasePoint getNotTaskByDeviceAndType(String device, String type);
} }

View File

@@ -72,21 +72,14 @@
ORDER BY p.region_code, p.point_code, p.point_type ORDER BY p.region_code, p.point_code, p.point_type
</select> </select>
<select id="getNotTaskByRegionAndType" resultType="org.nl.wms.sch_manage.service.dao.SchBasePoint"> <select id="getNotTaskByRegionAndType" resultType="org.nl.wms.sch_manage.service.dao.SchBasePoint">
SELECT SELECT *
* FROM `sch_base_point` p
FROM WHERE p.point_type = #{type}
`sch_base_point` p
WHERE
p.point_type = #{type}
AND p.region_code = #{regionCode} AND p.region_code = #{regionCode}
AND p.is_used = true AND p.is_used = true
AND 0 = ( AND 0 = (SELECT COUNT(*)
SELECT FROM sch_base_task t
COUNT(*) WHERE t.is_delete = '0'
FROM
sch_base_task t
WHERE
t.is_delete = '0'
AND t.task_status <![CDATA[ < ]]> '5' AND t.task_status <![CDATA[ < ]]> '5'
AND ( AND (
t.point_code1 = p.point_code t.point_code1 = p.point_code
@@ -119,4 +112,21 @@
OR t.point_code4 = p.point_code OR t.point_code4 = p.point_code
)) ))
</select> </select>
<select id="getNotTaskByDeviceAndType" resultType="org.nl.wms.sch_manage.service.dao.SchBasePoint">
SELECT *
FROM `sch_base_point` p
WHERE p.point_type = #{type}
AND p.parent_point_code = #{device}
AND p.is_used = true
AND 0 = (SELECT COUNT(*)
FROM sch_base_task t
WHERE t.is_delete = '0'
AND t.task_status <![CDATA[ < ]]> '5'
AND (
t.point_code1 = p.point_code
AND t.point_code2 = p.point_code
AND t.point_code3 = p.point_code
AND t.point_code4 = p.point_code
))
</select>
</mapper> </mapper>

View File

@@ -320,6 +320,10 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
public SchBasePoint getNotTaskByRegionAndType(String regionCode, String type) { public SchBasePoint getNotTaskByRegionAndType(String regionCode, String type) {
return this.baseMapper.getNotTaskByRegionAndType(regionCode, type); return this.baseMapper.getNotTaskByRegionAndType(regionCode, type);
} }
@Override
public SchBasePoint getNotTaskByDeviceAndType(String device, String type) {
return this.baseMapper.getNotTaskByDeviceAndType(device, type);
}
@Override @Override
public List<SchBasePoint> getCanUseCFGJs(SchBasePoint parentPoint, String pointStatus) { public List<SchBasePoint> getCanUseCFGJs(SchBasePoint parentPoint, String pointStatus) {

View File

@@ -89,7 +89,7 @@ public abstract class AbstractTask {
(existing, replacement) -> existing (existing, replacement) -> existing
)) ))
.values()); .values());
if (distinctRunningTasks.size() < 2) { if (distinctRunningTasks.size() >= 2) {
return; return;
} }
// 获取一组下发 // 获取一组下发

View File

@@ -74,6 +74,8 @@ public class JbBackAgvTask extends AbstractTask {
task.setGroup_id(json.getString("group_id")); task.setGroup_id(json.getString("group_id"));
task.setRequest_param(json.toString()); task.setRequest_param(json.toString());
task.setPriority(priority); task.setPriority(priority);
task.setTask_group_id(json.getString("task_group_id"));
task.setTask_group_seq(json.getBigDecimal("task_group_seq"));
task.setCreate_id(SecurityUtils.getCurrentUserId()); task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentNickName()); task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now()); task.setCreate_time(DateUtil.now());

View File

@@ -196,19 +196,20 @@ public class JbDownAgvTask extends AbstractTask {
mhcPoint.setVehicle_type(null); mhcPoint.setVehicle_type(null);
mhcPoint.setUpdate_time(DateUtil.now()); mhcPoint.setUpdate_time(DateUtil.now());
pointService.updateBatchById(Arrays.asList(khgPoint, mhcPoint)); pointService.updateBatchById(Arrays.asList(khgPoint, mhcPoint));
taskObj.setRemark("任务执行完毕");
// 3条任务完成 // 3条任务完成
SchBaseTask task = new SchBaseTask(); // SchBaseTask task = new SchBaseTask();
task.setTask_status(TaskStatus.FINISHED.getCode()); // task.setTask_status(TaskStatus.FINISHED.getCode());
TaskUtils.setUpdateByType(task, taskFinishedType); // TaskUtils.setUpdateByType(task, taskFinishedType);
task.setRemark("任务执行完毕"); // task.setRemark("任务执行完毕");
task.setFinished_type(taskFinishedType.getCode()); // task.setFinished_type(taskFinishedType.getCode());
taskService.update(task, new LambdaQueryWrapper<SchBaseTask>() // taskService.update(task, new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_group_id, taskObj.getTask_group_id())); // .eq(SchBaseTask::getTask_group_id, taskObj.getTask_group_id()));
// 出库完成 // 出库完成
inBillService.taskFinish(taskObj); inBillService.taskFinish(taskObj);
return; // return;
} }
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
TaskUtils.setUpdateByType(taskObj, taskFinishedType); TaskUtils.setUpdateByType(taskObj, taskFinishedType);
taskService.updateById(taskObj); taskService.updateById(taskObj);
} }

View File

@@ -33,6 +33,7 @@ import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
/** /**
* 解包上料AGV任务 * 解包上料AGV任务
@@ -66,7 +67,7 @@ public class JbUpAgvTask extends AbstractTask {
SchBaseTask task = new SchBaseTask(); SchBaseTask task = new SchBaseTask();
task.setTask_id(IdUtil.getStringId()); task.setTask_id(IdUtil.getStringId());
task.setTask_code(json.getString("TaskCode")); task.setTask_code(json.getString("TaskCode"));
task.setTask_status(TaskStatus.CREATE.getCode()); task.setTask_status(TaskStatus.CREATED.getCode());
task.setConfig_code(json.getString("task_type")); task.setConfig_code(json.getString("task_type"));
task.setPoint_code1(json.getString("point_code1")); task.setPoint_code1(json.getString("point_code1"));
task.setPoint_code2(json.getString("point_code2")); task.setPoint_code2(json.getString("point_code2"));
@@ -76,7 +77,9 @@ public class JbUpAgvTask extends AbstractTask {
task.setVehicle_code2(json.getString("vehicle_code2")); task.setVehicle_code2(json.getString("vehicle_code2"));
task.setGroup_id(json.getString("group_id")); task.setGroup_id(json.getString("group_id"));
task.setRequest_param(json.toString()); task.setRequest_param(json.toString());
task.setPriority(json.getString("Priority")); task.setPriority(ObjectUtil.isNotEmpty(json.getString("Priority")) ? json.getString("Priority") : "1");
task.setTask_group_id(IdUtil.getStringId());
task.setTask_group_seq(BigDecimal.valueOf(1));
task.setCreate_id(SecurityUtils.getCurrentUserId()); task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentNickName()); task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now()); task.setCreate_time(DateUtil.now());

View File

@@ -5,7 +5,6 @@ import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -39,19 +38,19 @@ import org.nl.wms.sch_manage.service.util.tasks.jb.JbDownAgvTask;
import org.nl.wms.sch_manage.service.util.tasks.zw.InBillTask; import org.nl.wms.sch_manage.service.util.tasks.zw.InBillTask;
import org.nl.wms.warehouse_manage.enums.IOSConstant; import org.nl.wms.warehouse_manage.enums.IOSConstant;
import org.nl.wms.warehouse_manage.enums.IOSEnum; import org.nl.wms.warehouse_manage.enums.IOSEnum;
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
import org.nl.wms.warehouse_manage.service.impl.MdPbGroupplateServiceImpl;
import org.nl.wms.warehouse_manage.inAndOut.service.IInBillService; import org.nl.wms.warehouse_manage.inAndOut.service.IInBillService;
import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInv; import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInv;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis; import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDtl; import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDtl;
import org.nl.wms.warehouse_manage.service.dto.GroupPlateDto;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper; import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDtlMapper; import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDtlMapper;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvMapper; import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvMapper;
import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDisDto; import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDisDto;
import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDtlDto; import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDtlDto;
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
import org.nl.wms.warehouse_manage.service.dto.GroupPlateDto;
import org.nl.wms.warehouse_manage.service.impl.MdPbGroupplateServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert; import org.springframework.util.Assert;
@@ -568,7 +567,6 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
} }
/** /**
* 根据库区策略获取仓位 * 根据库区策略获取仓位
* ioType 出入库类型 * ioType 出入库类型
@@ -684,9 +682,9 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
SchBasePoint parentPoint = pointService.getById(rkPoint.getParent_point_code()); SchBasePoint parentPoint = pointService.getById(rkPoint.getParent_point_code());
// 2、创建任务4条任务、优先级需要获取所有的任务中的最小值并且-1默认8 // 2、创建任务4条任务、优先级需要获取所有的任务中的最小值并且-1默认8
// 获取工单对应的区域的出入点 // 获取工单对应的区域的出入点
SchBasePoint intoPoint = pointService.getNotTaskByRegionAndType(parentPoint.getRegion_code(), "2"); SchBasePoint intoPoint = pointService.getNotTaskByDeviceAndType(parentPoint.getPoint_code(), "2");
SchBasePoint emptyPoint = pointService.getNotTaskByRegionAndType(parentPoint.getRegion_code(), "5"); SchBasePoint emptyPoint = pointService.getNotTaskByDeviceAndType(parentPoint.getPoint_code(), "5");
SchBasePoint fullPoint = pointService.getNotTaskByRegionAndType(parentPoint.getRegion_code(), "6"); SchBasePoint fullPoint = pointService.getNotTaskByDeviceAndType(parentPoint.getPoint_code(), "6");
// 获取无盖子的对应的点位 // 获取无盖子的对应的点位
List<SchBasePoint> canUseCFGJs = pointService.getCanUseCFGJs(parentPoint, "1"); List<SchBasePoint> canUseCFGJs = pointService.getCanUseCFGJs(parentPoint, "1");
if (canUseCFGJs.size() == 0) { if (canUseCFGJs.size() == 0) {
@@ -769,8 +767,8 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
SchBasePoint rkPoint = pointService.getById(point_code); SchBasePoint rkPoint = pointService.getById(point_code);
// 父点位 // 父点位
SchBasePoint parentPoint = pointService.getById(rkPoint.getParent_point_code()); SchBasePoint parentPoint = pointService.getById(rkPoint.getParent_point_code());
SchBasePoint fullPoint = pointService.getNotTaskByRegionAndType(parentPoint.getRegion_code(), "3"); SchBasePoint fullPoint = pointService.getNotTaskByDeviceAndType(parentPoint.getPoint_code(), "3");
SchBasePoint emptyPoint = pointService.getNotTaskByRegionAndType(parentPoint.getRegion_code(), "4"); SchBasePoint emptyPoint = pointService.getNotTaskByDeviceAndType(parentPoint.getPoint_code(), "4");
JSONObject task = new JSONObject(); JSONObject task = new JSONObject();
task.put("task_type", "JbBackAgvTask"); task.put("task_type", "JbBackAgvTask");
task.put("group_id", groupPlate.getGroup_id()); task.put("group_id", groupPlate.getGroup_id());
@@ -780,6 +778,8 @@ public class InBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv> i
task.put("point_code2", emptyPoint.getPoint_code()); task.put("point_code2", emptyPoint.getPoint_code());
task.put("point_code3", fullPoint.getPoint_code()); task.put("point_code3", fullPoint.getPoint_code());
task.put("point_code4", structCode); task.put("point_code4", structCode);
task.put("task_group_seq", whereJson.get("task_group_seq"));
task.put("task_group_id", whereJson.get("task_group_id"));
task.put("vehicle_code", fullPoint.getVehicle_code()); task.put("vehicle_code", fullPoint.getVehicle_code());
task.put("vehicle_code2", structattr.getStoragevehicle_code()); task.put("vehicle_code2", structattr.getStoragevehicle_code());
task_id = jbBackAgvTask.create(task); task_id = jbBackAgvTask.create(task);

View File

@@ -975,8 +975,8 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
// 解包需要单独操作 // 解包需要单独操作
SchBasePoint ckPoint = pointService.getById(point_code); SchBasePoint ckPoint = pointService.getById(point_code);
SchBasePoint outPointP = pointService.getById(ckPoint.getParent_point_code()); SchBasePoint outPointP = pointService.getById(ckPoint.getParent_point_code());
SchBasePoint inPoint = pointService.getNotTaskByRegionAndType(outPointP.getRegion_code(), "3"); SchBasePoint inPoint = pointService.getNotTaskByDeviceAndType(outPointP.getPoint_code(), "3");
SchBasePoint outPoint = pointService.getNotTaskByRegionAndType(outPointP.getRegion_code(), "4"); SchBasePoint outPoint = pointService.getNotTaskByDeviceAndType(outPointP.getPoint_code(), "4");
if (ObjectUtil.isEmpty(inPoint) || ObjectUtil.isEmpty(outPoint)) { if (ObjectUtil.isEmpty(inPoint) || ObjectUtil.isEmpty(outPoint)) {
throw new BadRequestException("解包机输送线点位不存在或者存在任务!"); throw new BadRequestException("解包机输送线点位不存在或者存在任务!");
} }

View File

@@ -123,5 +123,7 @@ public class GroupPlate implements Serializable {
private String material_code; private String material_code;
@TableField(exist = false) @TableField(exist = false)
private String material_name; private String material_name;
@TableField(exist = false)
private String material_spec;
} }

View File

@@ -0,0 +1 @@
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCBbWQ38mZdmOX379myX/NFn/qFIeP3kbogDiWlGtc1JNt6eDSsOEShUNj3o8Jo5Qaepyo6j4stP4WpmCAUFsdyOodzU0R60P7gFOR1OIdKyyQ2OS9J1MdNXRRuksfD1WVG+azoB+huQo2D52bcXSjnu1UDRDrXN3XXZgh1L2V/aDg+Gi9QAIsMDHtN62zKsHs4tlClHt0KORSdAxN9RjPzUFNYXfxW3dNTM9zfltoM2bgeUfG61F5EMipkAEVjDb4+Pu2BsNUamjy85eKDWA8NxDU6uuDkxLNiLx5KipLxOR+EM4/cOqRwHdEj8matpGlqBSOfOxXd6Sh5XmVStBjtAgMBAAECggEAQCbcme6IVrRGqJI2MXfluQkGv56AxGFzBBh/CEs5iJnwP8/9K6/oNJ1CLdz5q8x5b4IkKEqmDZOCyQEiRVLVIQVpxfvr4YReEOvKIWAXjzcJh+boTYwuDWapjfUrFyJaxMdUsN3ak2xhgJPeJDP45oOwK6JSGALhYhas8oi/olptl3leZs/5Z3h9UE69u80XRdhjtGyfS3AOOtT6dVcfKw6H8tmoKmx43ZfPvoV+a7hcwHO587mI1epAhYGOn81e5QoNBegiCEv9KutuZtauJuGHKcsvNh/FK8QujRJ1TFxOsMtxsJWZfxQxUuvJ0PulCpGpmkuHFNGDmV3ukJO1AQKBgQC8eiTaWgq8eCrIOi5fYtXQUmzv2e5BOhMrRyUWoB30N7GmKcdNGT5HJVXztidcBj53cNd8T6t5yTwYFrdZ5Lll7ItPAub25CSnGQU2nmceHK+46PNlQfLZRrlyeUuGYJTHVZanV+6Pneqn+6XifTa969HzpejpiJuG8iYVmcztfQKBgQCvy5ha6tBS+sIrjXL8/lrxXMDm4xT3CnCLmBqInppLwfFOgcQFzYWL6SQSJ7k3uC+xFT++VgsRLz/pQrVLsQzkY6mUF8sI7F0kevy/jAFzl9cgFn9BXu1ATyWloQIAX/UdSbzSWxIH3BW3BNOWZ0x91HUqBDAFzyLBkIns8LZ0MQKBgQCyg9oN+kS69/JFjV3IuLsdQkSt9LNGknP/hLYrNOLKIkofwOhlLOigyEsdt0SWU8+sn3Np6afXhPNnOXTWLt4vHJlh77TE2ZehsQAQGH5Athj1waZvHMSgaO1S8HHJSAcCuh0kSRPKcV8FVkNrPv+vaQGFjXoKX3o3mXja8r53nQKBgQCElQVj1GKnoo1csYJ+wgqurCikObFvG8WD0oR4cz2lUzD956qCQd2thnj45FKxbk0xvffkQhp4rG0ELJZ07qPtgCi+Ey/CnBknUUZb5GiX2HWbsrvo/oHqlYasIwFSbQx9OUaaU6sGmHscHBzD+0ZaRCjVNnFNgEoTOEJ9m5HPkQKBgQC0Kd29rQMIm5wXhIyW+bVdwmEyB/Xuq6Ch7lVVfZ6WMSoDbQZdYH3Mxw+yzjYpcS8jf/7x7mYH9Z0ggXwX7CAcRqhpjtKU800KzwQ2Cnd7Jmgq56Mn/e70J4btH73EZB6sm7vmhIuBZZlvc3oYGeJN/t/9vLwomFqrlXVw318J2A==

View File

@@ -22,6 +22,12 @@ export const constantRouterMap = [
component: (resolve) => require(['@/views/features/401'], resolve), component: (resolve) => require(['@/views/features/401'], resolve),
hidden: true hidden: true
}, },
{
path: '/999',
meta: { title: '无授权码', noCache: true },
component: (resolve) => require(['@/views/features/licenseTip'], resolve),
hidden: true
},
{ {
path: '/redirect', path: '/redirect',
component: Layout, component: Layout,

View File

@@ -22,6 +22,7 @@ service.interceptors.request.use(
} }
config.headers['Content-Type'] = 'application/json' config.headers['Content-Type'] = 'application/json'
config.headers['Accept-Language'] = window.localStorage.getItem('lang') config.headers['Accept-Language'] = window.localStorage.getItem('lang')
config.headers['cdk'] = window.localStorage.getItem('cdk')
return config return config
}, },
error => { error => {
@@ -35,6 +36,7 @@ service.interceptors.response.use(
return response.data return response.data
}, },
error => { error => {
console.log(error)
// 兼容blob下载出错json提示 // 兼容blob下载出错json提示
if (error.response.data instanceof Blob && error.response.data.type.toLowerCase().indexOf('json') !== -1) { if (error.response.data instanceof Blob && error.response.data.type.toLowerCase().indexOf('json') !== -1) {
const reader = new FileReader() const reader = new FileReader()
@@ -47,6 +49,7 @@ service.interceptors.response.use(
}) })
} }
} else { } else {
console.log('Error response:', error.response)
let code = 0 let code = 0
try { try {
code = error.response.status code = error.response.status
@@ -68,6 +71,13 @@ service.interceptors.response.use(
}) })
} else if (code === 403) { } else if (code === 403) {
router.push({ path: '/401' }) router.push({ path: '/401' })
} else if (code === 402) {
console.log('License expired or not activated, redirecting to license page.')
router.push({ path: '/999',
query: {
message: error.response.data.message
}
})
} else { } else {
const errorMsg = error.response.data.message const errorMsg = error.response.data.message
if (errorMsg !== undefined) { if (errorMsg !== undefined) {

View File

@@ -0,0 +1,111 @@
<template>
<div class="activation-container">
<div class="activation-card">
<h1 class="title">请输入授权码激活</h1>
<p class="description">{{ tip ? tip + ',' : '' }}请输入您的授权码以激活功能</p>
<input
v-model="activationCode"
type="text"
placeholder="请输入授权码"
class="input-field"
>
<button class="activate-button" @click="handleActivate">激活</button>
</div>
</div>
</template>
<script>
export default {
name: 'LicenseTip',
data() {
return {
activationCode: '',
tip: ''
}
},
mounted() {
this.tip = this.$route.query.message
const savedCdk = localStorage.getItem('cdk')
if (savedCdk) {
this.activationCode = savedCdk
}
},
methods: {
handleActivate() {
if (this.activationCode.trim() === '') {
alert('请输入授权码')
return
}
// 暂时不对接API这里模拟激活成功
console.log('授权码:', this.activationCode)
localStorage.setItem('cdk', this.activationCode.trim())
this.$router.push({ path: '/' })
}
}
}
</script>
<style scoped>
.activation-container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background: linear-gradient(135deg, #6a11cb 0%, #2575fc 100%);
font-family: 'Arial', sans-serif;
}
.activation-card {
background: white;
padding: 40px;
border-radius: 15px;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
text-align: center;
width: 400px;
max-width: 90%;
}
.title {
font-size: 24px;
margin-bottom: 10px;
color: #333;
}
.description {
font-size: 16px;
margin-bottom: 20px;
color: #666;
}
.input-field {
width: 100%;
padding: 12px;
margin-bottom: 20px;
border: 1px solid #ddd;
border-radius: 8px;
font-size: 16px;
box-sizing: border-box;
transition: border-color 0.3s;
}
.input-field:focus {
border-color: #2575fc;
outline: none;
}
.activate-button {
width: 100%;
padding: 12px;
background: #2575fc;
color: white;
border: none;
border-radius: 8px;
font-size: 16px;
cursor: pointer;
transition: background 0.3s;
}
.activate-button:hover {
background: #1a5bb8;
}
</style>

View File

@@ -91,7 +91,7 @@
<el-table-column prop="qty_unit_name" label="单位" width="160" /> <el-table-column prop="qty_unit_name" label="单位" width="160" />
<el-table-column prop="supp_name" label="供应商" width="160" /> <el-table-column prop="supp_name" label="供应商" width="160" />
<!-- <el-table-column prop="raw_material_code" label="泥料编码" width="160" />--> <!-- <el-table-column prop="raw_material_code" label="泥料编码" width="160" />-->
<!-- <el-table-column prop="material_spec" label="物料规格" width="140" />--> <el-table-column prop="material_spec" label="物料规格" width="140" />
<!-- <el-table-column prop="material_model" label="物料型号" width="140" />--> <!-- <el-table-column prop="material_model" label="物料型号" width="140" />-->
<!-- <el-table-column prop="pack_method" label="包装方式" width="140" />--> <!-- <el-table-column prop="pack_method" label="包装方式" width="140" />-->
<!-- <el-table-column prop="pack_palletspec" label="包装规则" width="140" />--> <!-- <el-table-column prop="pack_palletspec" label="包装规则" width="140" />-->