| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476 |
- package com.qlm.controller.jinzai;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.core.date.DateUtil;
- import com.alibaba.fastjson.JSON;
- import com.jfinal.aop.Clear;
- import com.jfinal.kit.HttpKit;
- import com.jfinal.kit.StrKit;
- import com.jfinal.plugin.activerecord.Db;
- import com.jfinal.plugin.activerecord.Page;
- import com.jfinal.plugin.activerecord.Record;
- import com.qlm.annotation.RequestUrl;
- import com.qlm.common.ApiResponse;
- import com.qlm.common.PageResult;
- import com.qlm.controller.common.CommonController;
- import com.qlm.dto.DeviceMonitorRecordDto;
- import com.qlm.dto.ItemModifyRecordDto;
- import com.qlm.dto.ItemModifyRecordVO;
- import com.qlm.dto.ProdTaskUploadRecordDto;
- import com.qlm.netty.constant.CommandType;
- import com.qlm.netty.manager.DeviceSessionManager;
- import com.qlm.netty.util.WhitelistValidator;
- import com.qlm.tools.WxUtil;
- import com.qlm.view.core.AdminView;
- import io.netty.channel.ChannelHandlerContext;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import java.math.BigInteger;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.stream.Collectors;
- /**
- * @program: jinzaifoodadmin
- * @ClassName: ProdBatchController
- * @description: 生产批次管理
- * @author: 吴英健
- * @create: 2025-08-27 14:41
- * @Version 1.0
- **/
- @RequestUrl("/prodBatch")
- public class ProdBatchController extends CommonController {
- private static final Logger logger = LoggerFactory.getLogger(ProdBatchController.class);
- /**
- * 生产任务上传记录路由
- */
- public void getProdUploadRecordPage() {
- renderJsp("/page/jinzai/production_task_upload.jsp");
- }
- /**
- * 生产任务上传记录查询
- */
- public void getProdUploadRecord() {
- //分页参数
- int pageNumber = getParaToInt("pageNumber", 1);
- int pageSize = getParaToInt("pageSize", 10);
- //创建时间、工厂ID、产线ID、WMS状态
- String createTime = getPara("createTime");
- String factoryId = getPara("factoryId");
- String productName = getPara("productName");
- String wmsStatus = getPara("wmsStatus");
- try {
- StringBuilder whereSql = new StringBuilder(" from jinzai_upload_master_copy where 1=1");
- List<Object> params = new ArrayList<>();
- if(StrKit.notBlank(createTime)){
- //创建时间 =
- whereSql.append(" and create_time = ?");
- params.add(createTime);
- }
- // if(StrKit.notBlank(factoryId)){
- // whereSql.append(" and factory_id = ?");
- // params.add(factoryId);
- // }
- if(StrKit.notBlank(productName)){
- whereSql.append(" and pinxiang like ?");
- params.add("%" + productName + "%");
- }
- // if(StrKit.notBlank(wmsStatus)){
- // whereSql.append(" and wms_status = ?");
- // }
- whereSql.append(" order by create_time desc");
- Page<Record> paginate = Db.paginate(pageNumber, pageSize, "select *", whereSql.toString(), params.toArray());
- if(paginate == null){
- renderJson(new PageResult<>(0, pageNumber, pageSize, new ArrayList<>()));
- return;
- }
- List<Record> list = paginate.getList();
- List<ProdTaskUploadRecordDto> prodTaskUploadRecordDtoList = new ArrayList<>();
- for (Record record : list) {
- prodTaskUploadRecordDtoList.add(convertRecordToDto(record));
- }
- renderJson(new PageResult<>(paginate.getTotalRow(), pageNumber, pageSize, prodTaskUploadRecordDtoList));
- }catch (Exception e){
- logger.error("查询生产任务上传记录异常:", e);
- renderJson(new PageResult<>(0, pageNumber, pageSize, new ArrayList<>()));
- }
- }
- /**
- * 补打信息记录路由
- */
- public void getProdRePrintRecordPage() {
- renderJsp("/page/jinzai/reprint_record.jsp");
- }
- /**
- * 工控机监控记录路由
- */
- public void getProdMonitorRecordPage() {
- renderJsp("/page/jinzai/deviceMonitor.jsp");
- }
- /**
- * 查询工控机监控记录
- */
- public void getDeviceMonitorList() {
- // 获取分页参数
- int pageNumber = getParaToInt("pageNumber", 1);
- int pageSize = getParaToInt("pageSize", 10);
- Integer deviceId = getParaToInt("deviceId");
- try {
- StringBuilder fromSql = new StringBuilder(" from t_device_detail tdd");
- fromSql.append(" inner join t_jz_device tjd on tdd.device_id = tjd.id");
- fromSql.append(" left join t_factory tf on tjd.factory_id = tf.id");
- fromSql.append(" left join t_workshop tw on tjd.workshop_id = tw.id");
- fromSql.append(" left join t_jz_item tjp on tdd.product_sku = tjp.sku");
- List<Object> params = new ArrayList<>();
- if (deviceId != null) {
- fromSql.append(" where tdd.device_id = ?");
- params.add(deviceId);
- }
- Page<Record> paginate = Db.paginate(pageNumber, pageSize, "select tdd.*,tjd.id as deviceId, tjd.device_no as deviceNo,tjd.desc as device_name, tf.factory_name, tw.workshop_name, tjp.item_name as product_name", fromSql.toString(), params.toArray());
- if (paginate == null) {
- renderJson(ApiResponse.success(new PageResult<>(0, pageNumber, pageSize, new ArrayList<>())));
- return;
- }
- List<Record> list = paginate.getList();
- List<DeviceMonitorRecordDto> deviceMonitorRecordDtoList = new ArrayList<>();
- for (Record record : list) {
- deviceMonitorRecordDtoList.add(convertRecordToDeviceMonitorRecordDto(record));
- }
- renderJson(new PageResult<>(paginate.getTotalRow(), pageNumber, pageSize, deviceMonitorRecordDtoList));
- } catch (Exception e) {
- logger.error("查询设备监控记录列表异常:", e);
- renderJson(new PageResult<>(0, pageNumber, pageSize, new ArrayList<>()));
- }
- }
- /**
- * 刷新设备详细信息
- */
- @Clear
- public void refreshDeviceDetail() {
- ApiResponse apiResponse = new ApiResponse();
- Integer deviceId = getParaToInt("deviceId");
- try {
- String sqlOne = "select * from t_jz_device where id = ?";
- Record record = Db.findFirst(sqlOne, deviceId);
- if (record == null) {
- apiResponse.setCode(500);
- apiResponse.setMsg("系统异常:设备不存在");
- } else {
- boolean result = DeviceSessionManager.getInstance().sendCommand(record.getStr("device_no"),null, CommandType.DEVICE_INFO_REPORT.getCode());
- if (result) {
- apiResponse.setMsg("刷新成功");
- apiResponse.setCode(0);
- StringBuilder sql = new StringBuilder("select tjd.*,tdd.id as deviceId,tdd.device_no as deviceNo, tdd.desc as device_name, tf.factory_name, tw.workshop_name, tjp.item_name as product_name");
- sql.append(" from t_jz_device tdd");
- sql.append(" inner join t_device_detail tjd on tdd.id = tjd.device_id");
- sql.append(" left join t_factory tf on tdd.factory_id = tf.id");
- sql.append(" left join t_workshop tw on tdd.workshop_id = tw.id");
- sql.append(" left join t_jz_item tjp on tjd.product_sku = tjp.sku");
- sql.append(" where tdd.id = ?");
- record = Db.findFirst(sql.toString(), deviceId);
- DeviceMonitorRecordDto deviceMonitorRecordDto = convertRecordToDeviceMonitorRecordDto(record);
- apiResponse.setData(deviceMonitorRecordDto);
- } else {
- apiResponse.setCode(500);
- apiResponse.setMsg("刷新失败");
- }
- }
- }catch (Exception e) {
- logger.error("刷新设备详细信息异常:", e);
- apiResponse.setCode(500);
- apiResponse.setMsg("系统异常:" + e.getMessage());
- }
- renderJson(apiResponse);
- }
- /**
- * 获取设备信息
- */
- public void getDeviceList() {
- ApiResponse apiResponse = new ApiResponse();
- String sql = "select id,`desc` as name from t_jz_device";
- try {
- List<Record> list = Db.find(sql);
- apiResponse.setData(list);
- } catch (Exception e) {
- logger.error("获取设备列表异常:", e);
- apiResponse.setCode(500);
- apiResponse.setMsg("系统异常:" + e.getMessage());
- }
- renderJson(apiResponse);
- }
- /**
- * 品相信息更改记录路由
- */
- public void getProdItemChangeRecordPage() {
- renderJsp("/page/jinzai/itemChangeRecord.jsp");
- }
- /**
- * 查询品相信息更改记录
- */
- public void getItemChangeRecordList() {
- // 获取分页参数
- int pageNumber = getParaToInt("pageNumber", 1);
- int pageSize = getParaToInt("pageSize", 10);
- //工厂ID、车间、产线、开始结束时间
- Integer factoryId = getParaToInt("factoryId");
- Integer workshopId = getParaToInt("workshopId");
- Integer lineId = getParaToInt("lineId");
- String startTime = getPara("startDate");
- String endTime = getPara("endDate");
- if (StrKit.notBlank(startTime)) {
- startTime = startTime + " 00:00:00";
- }
- if (StrKit.notBlank(endTime)) {
- endTime = endTime + " 23:59:59";
- }
- try {
- String selectColumns = "select r.modify_type,r.reference_code,f.factory_name,w.workshop_name,bi.item_name as before_item_name,ai.item_name as after_item_name,r.modify_time,r.modify_user";
- StringBuilder fromSql = new StringBuilder(" from t_item_modify_record r");
- fromSql.append(" left join t_factory f on r.factory_id = f.id");
- fromSql.append(" left join t_workshop w on r.workshop_id = w.id");
- fromSql.append(" left join t_jz_device l on r.line_id = l.id");
- fromSql.append(" left join t_jz_item bi on r.before_item_id = bi.id");
- fromSql.append(" left join t_jz_item ai on r.after_item_id = ai.id");
- fromSql.append(" where 1=1");
- List<Object> params = new ArrayList<>();
- if (factoryId != null) {
- fromSql.append(" and r.factory_id = ?");
- params.add(factoryId);
- }
- if (workshopId != null) {
- fromSql.append(" and r.workshop_id = ?");
- params.add(workshopId);
- }
- if (lineId != null) {
- fromSql.append(" and r.line_id = ?");
- params.add(lineId);
- }
- if (StrKit.notBlank(startTime)) {
- fromSql.append(" and r.modify_time >= ?");
- params.add(startTime);
- }
- if (StrKit.notBlank(endTime)) {
- fromSql.append(" and r.modify_time <= ?");
- params.add(endTime);
- }
- Page<Record> paginate = Db.paginate(pageNumber, pageSize, selectColumns, fromSql.toString(), params.toArray());
- if(paginate == null){
- renderJson(new PageResult<>(0, pageNumber, pageSize, new ArrayList<>()));
- return;
- }
- List<Record> list = paginate.getList();
- List<ItemModifyRecordVO> itemModifyRecordVOList = new ArrayList<>();
- for (Record record : list) {
- ItemModifyRecordVO itemModifyRecordVO = new ItemModifyRecordVO();
- itemModifyRecordVO.setModifyType(WxUtil.getInt("modify_type",record));
- itemModifyRecordVO.setReferenceCode(record.getStr("reference_code"));
- itemModifyRecordVO.setFactoryName(record.getStr("factory_name"));
- itemModifyRecordVO.setWorkshopName(record.getStr("workshop_name"));
- itemModifyRecordVO.setBeforeItemName(record.getStr("before_item_name"));
- itemModifyRecordVO.setAfterItemName(record.getStr("after_item_name"));
- itemModifyRecordVO.setModifyTime(DateUtil.format(record.getDate("modify_time"), "yyyy-MM-dd HH:mm:ss"));
- itemModifyRecordVO.setModifyUser(record.getStr("modify_user"));
- itemModifyRecordVOList.add(itemModifyRecordVO);
- }
- renderJson(new PageResult<>(paginate.getTotalRow(), pageNumber, pageSize, itemModifyRecordVOList));
- } catch (Exception e) {
- logger.error("查询品相信息更改记录列表异常:", e);
- renderJson(new PageResult<>(0, pageNumber, pageSize, new ArrayList<>()));
- }
- }
- /**
- * 变更品相
- */
- @Clear
- public void changeItem() {
- ApiResponse apiResponse = new ApiResponse();
- //AdminView loginUser = getLoginUser();
- AdminView loginUser = new AdminView();
- loginUser.setUsername("测试管理员");
- try {
- String bodyData = HttpKit.readData(getRequest());
- ItemModifyRecordDto itemModifyRecordDto = JSON.parseObject(bodyData, ItemModifyRecordDto.class);
- apiResponse = actionChangeItem(itemModifyRecordDto,loginUser);
- } catch (Exception e) {
- logger.error("品相信息更改异常:", e);
- apiResponse.setCode(500);
- apiResponse.setMsg("系统异常:" + e.getMessage());
- }
- renderJson(apiResponse);
- }
- private ApiResponse actionChangeItem(ItemModifyRecordDto itemModifyRecordDto,AdminView loginUser) {
- Integer modifyType = itemModifyRecordDto.getModifyType();
- List<String> referenceCodes = itemModifyRecordDto.getReferenceCodes();
- //单号/箱码/托码 对应的修改之前的 品项sku
- Map<String,String> referenceCodeAndSku = new HashMap<>();
- if(modifyType.compareTo(1) == 0){
- Record first = Db.findFirst("select * from jinzai_upload_master_copy where task_no = ?", referenceCodes.get(0));
- if(first == null){
- return ApiResponse.error("单号不存在");
- }
- referenceCodeAndSku.put(referenceCodes.get(0),first.getStr("sku"));
- }else if(modifyType.compareTo(2) == 0){
- String codeList = referenceCodes.stream()
- .map(code -> "'" + code + "'")
- .collect(java.util.stream.Collectors.joining(","));
- List<Record> masterRecords = Db.find("select * from jinzai_upload_master_copy where id in(" + codeList + ")");
- if(masterRecords.size() != referenceCodes.size()){
- return ApiResponse.error("有箱码不存在");
- }
- masterRecords.forEach(record -> {
- referenceCodeAndSku.put(record.getStr("id"),record.getStr("sku"));
- });
- }else if(modifyType.compareTo(3) == 0){
- String codeList = referenceCodes.stream()
- .map(code -> "'" + code + "'")
- .collect(java.util.stream.Collectors.joining(","));
- List<Record> duoRecords = Db.find("select * from jinzai_upload_master_copy where duo_code in(" + codeList + ")");
- if(duoRecords.size() != referenceCodes.size()){
- return ApiResponse.error("有托码不存在");
- }
- duoRecords.forEach(record -> {
- referenceCodeAndSku.put(record.getStr("duo_code"),record.getStr("sku"));
- });
- }
- boolean tx = Db.tx(() -> {
- try {
- //转成字符串,逗号拼接
- String addReferenceCode = referenceCodes.stream()
- .map(code -> "'" + code + "'")
- .collect(java.util.stream.Collectors.joining(","));
- List<Record> itemList = Db.find("select * from t_jz_item");
- Map<Integer, Record> itemMap = new HashMap<>();
- Map<String,Record> itemSkuMap = new HashMap<>();
- if (CollUtil.isNotEmpty(itemList)) {
- itemMap = itemList.stream().collect(Collectors.toMap(
- record -> WxUtil.getInt("id", record),
- record -> record,
- (existing, replacement) -> existing
- ));
- itemSkuMap = itemList.stream().collect(Collectors.toMap(
- record -> record.getStr("sku"),
- record -> record,
- (existing, replacement) -> existing
- ));
- }
- Record itemRecord = itemMap.get(itemModifyRecordDto.getAfterItemId());
- String itemName = itemRecord.getStr("item_name");
- String itemKouWei = itemRecord.getStr("kouwei");
- String sku = itemRecord.getStr("sku");
- //批量插入品项更新记录
- for (String referenceCode : referenceCodes) {
- //根据单号/箱码/托码 获取sku
- String beforeSku = referenceCodeAndSku.get(referenceCode);
- if(StrKit.isBlank(beforeSku)){
- logger.error("单号/箱码/托码:{}未获取到sku", referenceCode);
- continue;
- }
- //根据 beforeSku 获取 beforeItemId
- Record beforeItemRecord = itemSkuMap.get(beforeSku);
- if(beforeItemRecord == null){
- logger.error("SKU:{}未获取到品项ID", referenceCode);
- continue;
- }
- //插入品相信息修改记录
- Record record = new Record();
- record.set("modify_type", modifyType);
- record.set("reference_code", referenceCode);
- record.set("factory_id", itemModifyRecordDto.getFactoryId());
- record.set("workshop_id", itemModifyRecordDto.getWorkshopId());
- record.set("line_id", itemModifyRecordDto.getLineId());
- record.set("before_item_id", WxUtil.getInt("id", beforeItemRecord));
- record.set("after_item_id", itemModifyRecordDto.getAfterItemId());
- record.set("modify_user", loginUser.getUsername());
- Db.save("t_item_modify_record", record);
- }
- if (modifyType.compareTo(1) == 0) {
- Db.update("update jinzai_upload_master_copy set upload_time = null,pinxiang = ?,kouwei = ?,sku = ? where task_no = ?", itemName, itemKouWei,sku, referenceCodes.get(0));
- } else if (modifyType.compareTo(2) == 0) {
- Db.update("update jinzai_upload_master_copy set upload_time = null,pinxiang = ?,kouwei = ?,sku = ? where id in(" + addReferenceCode + ")", itemName, itemKouWei,sku);
- } else if (modifyType.compareTo(3) == 0) {
- Db.update("update jinzai_upload_master_copy set upload_time = null,pinxiang = ?,kouwei = ?,sku = ? where duo_code in(" + addReferenceCode + ")", itemName, itemKouWei,sku);
- }
- return true;
- } catch (Exception e) {
- logger.error("品相信息更改异常:", e);
- return false;
- }
- });
- if (!tx) {
- return ApiResponse.error("品相信息更改失败");
- }
- return ApiResponse.success();
- }
- @Clear
- public void refreshWhitelist() {
- try {
- WhitelistValidator.reloadWhitelist();
- renderJson((ApiResponse.success()));
- } catch (Exception e) {
- logger.error("刷新白名单失败: {}", e.getMessage(), e);
- renderJson(ApiResponse.error("刷新白名单失败"));
- }
- }
- private ProdTaskUploadRecordDto convertRecordToDto(Record record) {
- ProdTaskUploadRecordDto dto = new ProdTaskUploadRecordDto();
- dto.setFactoryName(record.getStr("factory_name"));
- dto.setLineName(record.getStr("line_name"));
- dto.setProductName(record.getStr("pinxiang"));
- dto.setBatchNo(record.getStr("task_no"));
- dto.setCreateTime(DateUtil.format(record.getDate("create_time"), "yyyy-MM-dd HH:mm:ss"));
- if(record.getDate("upload_time") != null){
- dto.setUploadTime(DateUtil.format(record.getDate("upload_time"), "yyyy-MM-dd HH:mm:ss"));
- dto.setIsUpload("1");
- dto.setWmsStatus("1");
- }
- dto.setTransferredToDataCenter(1);
- return dto;
- }
- private DeviceMonitorRecordDto convertRecordToDeviceMonitorRecordDto(Record record) {
- DeviceMonitorRecordDto deviceMonitorRecordDto = new DeviceMonitorRecordDto();
- deviceMonitorRecordDto.setDeviceName(record.getStr("device_name"));
- deviceMonitorRecordDto.setCupUsage(record.getBigDecimal("cpu_usage").toString());
- deviceMonitorRecordDto.setMemoryUsage(record.getBigDecimal("memory_usage").toString());
- deviceMonitorRecordDto.setDiskSurplus(record.getStr("disk_free"));
- deviceMonitorRecordDto.setProductionTaskNum(record.getInt("current_task_quantity").toString());
- deviceMonitorRecordDto.setFactory(record.getStr("factory_name"));
- deviceMonitorRecordDto.setWorkshop(record.getStr("workshop_name"));
- deviceMonitorRecordDto.setLine(record.getStr("device_name"));
- deviceMonitorRecordDto.setProduct(record.getStr("product_name"));
- deviceMonitorRecordDto.setProductionNum(record.getInt("current_quantity").toString());
- deviceMonitorRecordDto.setTotalNum(record.getInt("total_quantity").toString());
- deviceMonitorRecordDto.setPlatformNum(record.getInt("uploaded_quantity").toString());
- deviceMonitorRecordDto.setDeviceId(WxUtil.getInt("deviceId", record));
- Long delay = record.getLong("network_delay");
- if(delay == null){
- deviceMonitorRecordDto.setNetworkDelay("0");
- }else{
- //是毫秒,得转成秒,小数也要显示,默认支持三位小数
- deviceMonitorRecordDto.setNetworkDelay(delay+"");
- }
- ChannelHandlerContext deviceNo = DeviceSessionManager.getInstance().getDeviceSession(record.getStr("deviceNo"));
- if(deviceNo != null){
- deviceMonitorRecordDto.setOnline(1);
- }
- return deviceMonitorRecordDto;
- }
- }
|