lucky 3 долоо хоног өмнө
parent
commit
ac49e76d35
100 өөрчлөгдсөн 6587 нэмэгдсэн , 201 устгасан
  1. 10 1
      zkqy-admin/pom.xml
  2. 8 0
      zkqy-admin/src/main/java/com/zkqy/web/controller/system/SysLoginController.java
  3. 2 1
      zkqy-admin/src/main/java/com/zkqy/web/controller/system/SysMenuController.java
  4. 219 0
      zkqy-admin/src/main/java/com/zkqy/web/controller/system/SysMessageController.java
  5. 98 0
      zkqy-admin/src/main/java/com/zkqy/web/core/config/MessageWebSocketHandler.java
  6. 30 0
      zkqy-admin/src/main/java/com/zkqy/web/core/config/UserHandshakeHandler.java
  7. 23 0
      zkqy-admin/src/main/java/com/zkqy/web/core/config/UserPrincipal.java
  8. 23 0
      zkqy-admin/src/main/java/com/zkqy/web/core/config/WebSocketConfig.java
  9. 5 6
      zkqy-admin/src/main/java/com/zkqy/web/yb.java
  10. 3 2
      zkqy-admin/src/main/resources/application-druid.yml
  11. 3 0
      zkqy-admin/src/main/resources/application.yml
  12. 1 0
      zkqy-admin/src/main/resources/mybatis/mybatis-config.xml
  13. 4 2
      zkqy-common/src/main/java/com/zkqy/common/core/domain/entity/SysMenu.java
  14. 13 0
      zkqy-common/src/main/java/com/zkqy/common/core/domain/entity/SysTenant.java
  15. 115 0
      zkqy-common/src/main/java/com/zkqy/common/utils/MachineCodeUtil.java
  16. 49 0
      zkqy-framework/src/main/java/com/zkqy/framework/aspectj/TableNameInterceptor.java
  17. 1 1
      zkqy-framework/src/main/java/com/zkqy/framework/config/SecurityConfig.java
  18. 12 4
      zkqy-framework/src/main/java/com/zkqy/framework/sso_oauth2/controller/OauthController.java
  19. 7 0
      zkqy-framework/src/main/java/com/zkqy/framework/sso_oauth2/controller/ThirdPartLoginController.java
  20. 33 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/bean/IndoorPlanVo.java
  21. 109 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/ErOrderInfoController.java
  22. 76 1
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/IndoorPlanInformationController.java
  23. 4 4
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/IndoorProductionGroupInformationController.java
  24. 107 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/MaterialsInventoryController.java
  25. 5 2
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/RingScanInformationController.java
  26. 134 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/StockInOrderController.java
  27. 107 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/StockInOrderDetailController.java
  28. 108 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/StockInRecordController.java
  29. 126 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/StockOutOrderController.java
  30. 108 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/StockOutRecordController.java
  31. 1 1
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/AutomaticSchedulingOnSite.java
  32. 54 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/ErOrderInfo.java
  33. 27 14
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/IndoorMaterialInformation.java
  34. 70 23
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/IndoorPlanInformation.java
  35. 160 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/MaterialsInventory.java
  36. 96 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/StockInOrder.java
  37. 155 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/StockInOrderDetail.java
  38. 248 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/StockInRecord.java
  39. 249 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/StockOutRecord.java
  40. 34 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/vo/StockInOrderAndOrderDetail.java
  41. 63 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/mapper/ErOrderInfoMapper.java
  42. 12 8
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/mapper/IndoorPlanInformationMapper.java
  43. 72 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/mapper/MaterialsInventoryMapper.java
  44. 65 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/mapper/StockInOrderDetailMapper.java
  45. 64 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/mapper/StockInOrderMapper.java
  46. 70 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/mapper/StockInRecordMapper.java
  47. 70 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/mapper/StockOutRecordMapper.java
  48. 61 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IErOrderInfoService.java
  49. 10 8
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IIndoorPlanInformationService.java
  50. 9 9
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IIndoorProductionGroupInformationService.java
  51. 61 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IMaterialsInventoryService.java
  52. 61 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IStockInOrderDetailService.java
  53. 77 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IStockInOrderService.java
  54. 61 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IStockInRecordService.java
  55. 61 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IStockOutRecordService.java
  56. 97 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/ErOrderInfoServiceImpl.java
  57. 19 9
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/IndoorPlanInformationServiceImpl.java
  58. 23 9
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/IndoorProductionGroupInformationServiceImpl.java
  59. 97 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/MaterialsInventoryServiceImpl.java
  60. 10 7
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/ProductDeliverySheetServiceImpl.java
  61. 200 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/StationInformationServiceImpl.java
  62. 97 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/StockInOrderDetailServiceImpl.java
  63. 306 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/StockInOrderServiceImpl.java
  64. 97 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/StockInRecordServiceImpl.java
  65. 333 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/StockOutOrderServiceImpl.java
  66. 97 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/StockOutRecordServiceImpl.java
  67. 31 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/utils/PaginationUtils.java
  68. 64 0
      zkqy-fujian-amichi/src/main/resources/mapper/ErOrderInfoMapper.xml
  69. 8 5
      zkqy-fujian-amichi/src/main/resources/mapper/IndoorMaterialInformationMapper.xml
  70. 19 6
      zkqy-fujian-amichi/src/main/resources/mapper/IndoorPlanInformationMapper.xml
  71. 7 5
      zkqy-fujian-amichi/src/main/resources/mapper/IndoorProductionGroupInformationMapper.xml
  72. 5 5
      zkqy-fujian-amichi/src/main/resources/mapper/MaterialInfoMapper.xml
  73. 129 0
      zkqy-fujian-amichi/src/main/resources/mapper/MaterialsInventoryMapper.xml
  74. 8 8
      zkqy-fujian-amichi/src/main/resources/mapper/MaterialtransactionlogMapper.xml
  75. 6 6
      zkqy-fujian-amichi/src/main/resources/mapper/PocurementdetailsMapper.xml
  76. 29 25
      zkqy-fujian-amichi/src/main/resources/mapper/RingScanInformationMapper.xml
  77. 4 12
      zkqy-fujian-amichi/src/main/resources/mapper/StationInformationMapper.xml
  78. 117 0
      zkqy-fujian-amichi/src/main/resources/mapper/StockInOrderDetailMapper.xml
  79. 90 0
      zkqy-fujian-amichi/src/main/resources/mapper/StockInOrderMapper.xml
  80. 148 0
      zkqy-fujian-amichi/src/main/resources/mapper/StockInRecordMapper.xml
  81. 148 0
      zkqy-fujian-amichi/src/main/resources/mapper/StockOutRecordMapper.xml
  82. 207 0
      zkqy-system/src/main/java/com/zkqy/system/domain/SysMessage.java
  83. 61 0
      zkqy-system/src/main/java/com/zkqy/system/mapper/SysMessageMapper.java
  84. 61 0
      zkqy-system/src/main/java/com/zkqy/system/service/ISysMessageService.java
  85. 108 0
      zkqy-system/src/main/java/com/zkqy/system/service/impl/SysMessageServiceImpl.java
  86. 110 0
      zkqy-system/src/main/resources/mapper/system/SysMessageMapper.xml
  87. 10 9
      zkqy-system/src/main/resources/mapper/system/SysTenantMapper.xml
  88. 2 2
      zkqy-ui/.env.production
  89. BIN
      zkqy-ui/public/notify.mp3
  90. 44 0
      zkqy-ui/src/api/amichi/ercsm/info.js
  91. 44 0
      zkqy-ui/src/api/amichi/indoor/ckRecord.js
  92. 44 0
      zkqy-ui/src/api/amichi/indoor/detail.js
  93. 44 0
      zkqy-ui/src/api/amichi/indoor/inventory.js
  94. 44 0
      zkqy-ui/src/api/amichi/indoor/material.js
  95. 52 0
      zkqy-ui/src/api/amichi/indoor/order.js
  96. 54 0
      zkqy-ui/src/api/amichi/indoor/outOrder.js
  97. 44 0
      zkqy-ui/src/api/amichi/indoor/rkRecord.js
  98. 2 1
      zkqy-ui/src/api/amichi/indoorMaterialInformation/information.js
  99. 8 0
      zkqy-ui/src/api/amichi/indoorPlanInformation/information.js
  100. 5 5
      zkqy-ui/src/api/amichi/indoorProductionGroupInfo/information.js

+ 10 - 1
zkqy-admin/pom.xml

@@ -24,6 +24,15 @@
             <artifactId>spring-boot-devtools</artifactId>
             <optional>true</optional> <!-- 表示依赖不会传递 -->
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-websocket</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.github.binarywang</groupId>
+            <artifactId>weixin-java-cp</artifactId>
+            <version>4.6.0</version>
+        </dependency>
         <!-- swagger3-->
         <dependency>
             <groupId>io.springfox</groupId>
@@ -157,4 +166,4 @@
         <finalName>${project.artifactId}</finalName>
     </build>
 
-</project>
+</project>

+ 8 - 0
zkqy-admin/src/main/java/com/zkqy/web/controller/system/SysLoginController.java

@@ -8,6 +8,8 @@ import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.zkqy.business.service.IMobilePageDataService;
 import com.zkqy.common.core.domain.entity.SysTenant;
+import com.zkqy.common.core.domain.model.LoginUser;
+import com.zkqy.common.utils.MachineCodeUtil;
 import com.zkqy.common.utils.StringUtils;
 import com.zkqy.framework.web.service.TokenService;
 import com.zkqy.system.service.*;
@@ -319,6 +321,12 @@ public class SysLoginController {
     @GetMapping("/isTenantExist")
     public AjaxResult isTenantExist(String tenantCode) {
         SysTenant sysTenantInfo = iSysTenantService.selectSysTenantByTenantCode(tenantCode);
+        String machineCode = MachineCodeUtil.getMachineCode();
+        if(org.apache.commons.lang3.StringUtils.isBlank(sysTenantInfo.getMachineCode()) ||!machineCode.equals(sysTenantInfo.getMachineCode())){
+            sysTenantInfo.setLoginPageConfiguration(loginPageConfigurationService.selectLoginPageConfigurationByLoginPageNumber(tenantCode, "client"));
+            sysTenantInfo.setMachineCode("请联系管理员激活租户");
+            return AjaxResult.success(sysTenantInfo);
+        }
         if (sysTenantInfo != null) {
             sysTenantInfo.setLoginPageConfiguration(loginPageConfigurationService.selectLoginPageConfigurationByLoginPageNumber(tenantCode, "client"));            return AjaxResult.success(sysTenantInfo);
         }

+ 2 - 1
zkqy-admin/src/main/java/com/zkqy/web/controller/system/SysMenuController.java

@@ -107,6 +107,7 @@ public class SysMenuController extends BaseController {
         }
         menu.setUpdateBy(getUsername());
         menu.setMenuNameByMenuNameLocale();
+//        menu.setMenuName();
         return toAjax(menuService.updateMenu(menu));
     }
 
@@ -174,4 +175,4 @@ public class SysMenuController extends BaseController {
         menu.setCreateBy(getUsername());
         return AjaxResult.success(menuService.insertMenus(menu, getUserId()));
     }
-}
+}

+ 219 - 0
zkqy-admin/src/main/java/com/zkqy/web/controller/system/SysMessageController.java

@@ -0,0 +1,219 @@
+package com.zkqy.web.controller.system;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.zkqy.common.annotation.Anonymous;
+import com.zkqy.common.annotation.Log;
+import com.zkqy.common.core.controller.BaseController;
+import com.zkqy.common.core.domain.AjaxResult;
+import com.zkqy.common.core.domain.entity.SysUser;
+import com.zkqy.common.core.page.TableDataInfo;
+import com.zkqy.common.enums.BusinessType;
+import com.zkqy.common.utils.SecurityUtils;
+import com.zkqy.common.utils.poi.ExcelUtil;
+import com.zkqy.system.domain.sso.User;
+import com.zkqy.system.service.impl.SysUserServiceImpl;
+import com.zkqy.web.core.config.MessageWebSocketHandler;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zkqy.system.domain.SysMessage;
+import com.zkqy.system.service.ISysMessageService;
+
+
+/**
+ * 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。Controller
+ *
+ * @author hmc
+ * @date 2025-06-30
+ */
+@RestController
+@RequestMapping("/system/message")
+public class SysMessageController extends BaseController
+{
+    @Autowired
+    private ISysMessageService sysMessageService;
+
+    @Autowired
+    private SysUserServiceImpl sysUserService;
+
+    @Autowired
+    private  MessageWebSocketHandler socketHandler;
+
+    /**
+     * 查询系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。列表
+     */
+//    @PreAuthorize("@ss.hasPermi('system:message:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysMessage sysMessage)
+    {
+        startPage();
+        if(sysMessage.getFsOrJs().equals("2")){ //我接收的
+            sysMessage.setReceiveUserId(SecurityUtils.getUserId());
+            sysMessage.setSendUserId(null);
+        }else { //我发送的
+            sysMessage.setReceiveUserId(null);
+            sysMessage.setSendUserId(Long.valueOf(SecurityUtils.getUserId()));
+        }
+        List<SysMessage> list = sysMessageService.selectSysMessageList(sysMessage);
+        return getDataTable(list);
+    }
+
+
+//    @PreAuthorize("@ss.hasPermi('system:message:list')")
+    @GetMapping("/getUnreadMessage")
+    public AjaxResult getUnreadMessage(SysMessage sysMessage)
+    {
+//        startPage();
+        if(sysMessage.getFsOrJs().equals("2")){ //我接收的
+            sysMessage.setReceiveUserId(SecurityUtils.getUserId());
+            sysMessage.setSendUserId(null);
+            sysMessage.setIsRead(0);
+        }
+        List<SysMessage> list = sysMessageService.selectSysMessageList(sysMessage);
+        HashMap map=new HashMap<>();
+        map.put("unreadCount",list.size());
+        return AjaxResult.success(map);
+    }
+
+    /**
+     * 查询当前租户下的所有用户信息
+     * @param
+     * @return
+     */
+    @GetMapping("/getTenantUser")
+    public AjaxResult getTenantUser()
+    {
+        SysUser user=new SysUser();
+        user.setTenantId(SecurityUtils.getTenantId());
+        List<SysUser> list = sysUserService.selectUserList(user);
+        return AjaxResult.success(list);
+    }
+
+
+    /**
+     * 导出系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。列表
+     */
+//    @PreAuthorize("@ss.hasPermi('system:message:export')")
+//    @Log(title = "系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysMessage sysMessage)
+    {
+        List<SysMessage> list = sysMessageService.selectSysMessageList(sysMessage);
+        ExcelUtil<SysMessage> util = new ExcelUtil<SysMessage>(SysMessage.class);
+        util.exportExcel(response, list, "系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。数据");
+    }
+
+    /**
+     * 获取系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。详细信息
+     */
+//    @PreAuthorize("@ss.hasPermi('system:message:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(sysMessageService.selectSysMessageById(id));
+    }
+
+    /**
+     * 新增系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     */
+//    @PreAuthorize("@ss.hasPermi('system:message:add')")
+//    @Log(title = "系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody SysMessage sysMessage) throws IOException {
+        int i = sysMessageService.insertSysMessage(sysMessage);
+        socketHandler.sendNewMessageToUser(sysMessage.getReceiveUserId().toString());
+        return toAjax(i);
+    }
+
+    /**
+     * 修改系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     */
+//    @PreAuthorize("@ss.hasPermi('system:message:edit')")
+//    @Log(title = "系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody SysMessage sysMessage)
+    {
+        return toAjax(sysMessageService.updateSysMessage(sysMessage));
+    }
+
+    /**
+     * 删除系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     */
+//    @PreAuthorize("@ss.hasPermi('system:message:remove')")
+//    @Log(title = "系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(sysMessageService.deleteSysMessageByIds(ids));
+    }
+
+    @GetMapping("/send")
+    @Anonymous
+    public String send() throws IOException {
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+        HttpPost httpPost = new HttpPost("https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=15364a9e-e724-450b-9e9a-2684018c0f97");
+        httpPost.addHeader("Content-Type", "application/json; charset=utf-8");
+//        String textMsg="铨一异常通知测试";
+        HashMap<String,Object> hashMap=new HashMap<>();
+        hashMap.put("msgtype","text");
+        HashMap<String,String> hashMap1=new HashMap<>();
+        hashMap1.put("content","铨一异常通知测试");
+        hashMap.put("text",hashMap1);
+        ObjectMapper objectMapper=new ObjectMapper();
+        String s = objectMapper.writeValueAsString(hashMap);
+
+        StringEntity se = new StringEntity(s, "utf-8");
+        httpPost.setEntity(se);
+        CloseableHttpResponse response = httpClient.execute(httpPost);
+
+        if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
+            String result = EntityUtils.toString(response.getEntity(), "utf-8");
+
+            // 检查 result 是否为空或空白
+            if (result == null || result.trim().isEmpty()) {
+
+                System.out.println("消息内容为空,不发送微信机器人消息");
+                // 关闭资源
+                httpClient.close();
+                response.close();
+                return "消息内容为空,未发送";
+            } else {
+                System.out.println("发送微信机器人消息成功: " + result);
+                // 假设这里有一个发送消息给微信机器人的方法,比如 sendToWeChatBot(result);
+                // sendToWeChatBot(result);
+
+                // 关闭资源
+                httpClient.close();
+                response.close();
+                return result; // 或者返回其他表示成功的字符串
+            }
+        } else {
+            System.out.println("发送微信机器人消息失败");
+            // 关闭资源(通常应该在 finally 块中处理,但这里为了简洁而放在这里)
+            httpClient.close();
+            if (response != null) {
+                response.close();
+            }
+            return "发送微信机器人消息失败";
+        }
+    }
+}

+ 98 - 0
zkqy-admin/src/main/java/com/zkqy/web/core/config/MessageWebSocketHandler.java

@@ -0,0 +1,98 @@
+package com.zkqy.web.core.config;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.zkqy.system.domain.SysMessage;
+import com.zkqy.system.service.ISysMessageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.web.socket.CloseStatus;
+import org.springframework.web.socket.TextMessage;
+import org.springframework.web.socket.WebSocketSession;
+import org.springframework.web.socket.handler.TextWebSocketHandler;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Component
+public class MessageWebSocketHandler extends TextWebSocketHandler {
+
+    @Autowired
+    private RedisTemplate<String, String> redisTemplate;
+
+    // 存储用户和会话之间的映射关系
+    private final ConcurrentHashMap<String, WebSocketSession> userSessions = new ConcurrentHashMap<>();
+
+    @Autowired
+    private ISysMessageService sysMessageService;
+
+
+    @Override
+    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
+        UserPrincipal principal = (UserPrincipal)session.getPrincipal();
+        String name = principal.getName();
+
+//        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if (principal != null) {
+//            String userId = principal.getName();
+//            Long userId = SecurityUtils.getUserId();
+            userSessions.put(name, session);
+//            redisTemplate.opsForHash().put("user:sessions", name, session);
+            System.out.println("Client connected: " + name);
+        }
+    }
+
+    @Override
+    public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
+        String payload = message.getPayload();
+        System.out.println("Received message: " + payload);
+        // 假设 payload 是目标用户ID 或者 JSON 格式 { "to": "user1", "content": "xxx" }
+        // 示例:假设 payload 是目标用户ID
+        String targetUserId = payload.trim();
+        // 向指定用户发送消息
+        sendNewMessageToUser(targetUserId);
+    }
+
+
+    @Override
+    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
+//        Principal principal = session.getPrincipal();
+//        LoginUser loginUser = SecurityUtils.getLoginUser();
+
+        UserPrincipal principal = (UserPrincipal)session.getPrincipal();
+        String name = principal.getName();
+        if (principal != null) {
+//            userSessions.remove(name);
+
+            redisTemplate.opsForHash().delete("user:sessions", name);
+            System.out.println("Client disconnected: " + name);
+        }
+    }
+
+    // 向指定用户发送铃铛+1通知
+    public void sendNewMessageToUser(String userId) throws IOException {
+        WebSocketSession session = userSessions.get(userId);
+//        redisTemplate.opsForHash().get("user:sessions", userId);
+//        return (String) redisTemplate.opsForHash().get("user:sessions", userId);
+        if (session != null && session.isOpen()) {
+            SysMessage sysMessage=new SysMessage();
+            if(sysMessage.getFsOrJs().equals("2")){ //我接收的
+                sysMessage.setReceiveUserId(Long.valueOf(userId));
+                sysMessage.setSendUserId(null);
+                sysMessage.setIsRead(0);
+            }
+            List<SysMessage> list = sysMessageService.selectSysMessageList(sysMessage);
+            HashMap map=new HashMap<>();
+            map.put("unreadCount",list.size());
+            // 创建 ObjectMapper 实例
+            ObjectMapper objectMapper = new ObjectMapper();
+            // 将 Map 转换为 JSON 字符串
+            String json = objectMapper.writeValueAsString(map);
+            session.sendMessage(new TextMessage(json));
+        } else {
+            System.out.println("用户 " + userId + " 不在线");
+        }
+    }
+}

+ 30 - 0
zkqy-admin/src/main/java/com/zkqy/web/core/config/UserHandshakeHandler.java

@@ -0,0 +1,30 @@
+package com.zkqy.web.core.config;
+
+import org.springframework.http.server.ServerHttpRequest;
+import org.springframework.http.server.ServletServerHttpRequest;
+import org.springframework.web.socket.WebSocketHandler;
+import org.springframework.web.socket.server.support.DefaultHandshakeHandler;
+
+import java.security.Principal;
+import java.util.Map;
+
+public class UserHandshakeHandler extends DefaultHandshakeHandler {
+    @Override
+    protected Principal determineUser(ServerHttpRequest request, WebSocketHandler wsHandler, Map<String, Object> attributes) {
+        ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
+        String query = servletRequest.getURI().getQuery();
+
+        String userId = null;
+        if (query != null && query.startsWith("userId=")) {
+            userId = query.substring(7);
+        }
+
+        if (userId == null || userId.isEmpty()) {
+            userId = "anonymous";
+        }
+
+        return new UserPrincipal(userId);
+    }
+
+
+}

+ 23 - 0
zkqy-admin/src/main/java/com/zkqy/web/core/config/UserPrincipal.java

@@ -0,0 +1,23 @@
+package com.zkqy.web.core.config;
+
+
+import javax.security.auth.Subject;
+import java.security.Principal;
+
+public class UserPrincipal implements Principal {
+    private  String name;
+
+    public UserPrincipal(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public String getName() {
+        return this.name;
+    }
+
+    @Override
+    public boolean implies(Subject subject) {
+        return Principal.super.implies(subject);
+    }
+}

+ 23 - 0
zkqy-admin/src/main/java/com/zkqy/web/core/config/WebSocketConfig.java

@@ -0,0 +1,23 @@
+package com.zkqy.web.core.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.config.annotation.EnableWebSocket;
+import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
+import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
+
+@Configuration
+@EnableWebSocket
+public class WebSocketConfig implements WebSocketConfigurer {
+
+    @Autowired
+    MessageWebSocketHandler messageWebSocketHandler;
+
+    @Override
+    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
+        registry.addHandler(messageWebSocketHandler, "/sendMessage")
+                .setAllowedOrigins("*")// 允许跨域访问
+        .setHandshakeHandler(new UserHandshakeHandler());
+    }
+
+}

+ 5 - 6
zkqy-admin/src/main/java/com/zkqy/web/yb.java

@@ -1,18 +1,17 @@
 package com.zkqy.web;
 
 import org.junit.Test;
+import sun.util.resources.LocaleData;
 
+import java.time.LocalDate;
+import java.util.Locale;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
 
 public class yb {
 
     public static void main(String[] args) {
-        int count = 0;
-        for(int i = 0;i < 100;i++)
-        {
-            count = ++count;
-        }
-        System.out.println("count = "+count);
+        LocalDate now = LocalDate.now();
+        System.out.println(now);
     }
 }

+ 3 - 2
zkqy-admin/src/main/resources/application-druid.yml

@@ -6,8 +6,9 @@ spring:
         druid:
             # 主库数据源 http:///
             master:
-                #url: jdbc:mysql://localhost:3306/ry-vue-call?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
-                url: jdbc:mysql://localhost:3306/hxzk0415?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
+                url: jdbc:mysql://localhost:3306/ry-vue-call-copy?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
+                #url: jdbc:mysql://localhost:3306/hxzk0415?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
+                #url: jdbc:mysql://175.27.169.173:3306/ry-vue-call?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
                 #url: jdbc:mysql://192.168.110.15:3306/ry-vue-call?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
                 #url: jdbc:mysql://121.37.234.37:3306/zkqyzk?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true
                 username: root

+ 3 - 0
zkqy-admin/src/main/resources/application.yml

@@ -197,6 +197,9 @@ cas:
 
 projectDownloadZip:
   mysql: /usr/local/mysql/bin/mysqldump
+wx:
+  appid: wxfdd29de608e6ebc1
+  appSecret: 2738a651b015f6002b89b45d8bdcedc2
 template:
   urluPload: D:\zkqy\test\a\
   pageUrl: D:\zkqy\test\a\

+ 1 - 0
zkqy-admin/src/main/resources/mybatis/mybatis-config.xml

@@ -38,6 +38,7 @@
     <!-- sql拦截器 -->
     <plugins>
         <plugin interceptor="com.zkqy.framework.aspectj.SqlInterceptor"/>
+<!--         <plugin interceptor="com.zkqy.framework.aspectj.TableNameInterceptor"></plugin>-->
     </plugins>
 
 </configuration>

+ 4 - 2
zkqy-common/src/main/java/com/zkqy/common/core/domain/entity/SysMenu.java

@@ -325,17 +325,19 @@ public class SysMenu extends BaseEntity
         }
         this.menuNameLocale = menuNameLocale;
     }
+
     //根据前端的菜单传值 + 本地环境的判断,填充menuName 或者 menuNameEn的值
     public void setMenuNameByMenuNameLocale(){
         if (StringUtils.isBlank(menuNameLocale)){
             return;
         }
         if (MessageUtils.getUserLocale().equals(LocaleEnum.Chinese.getLocaleCode())){
-            menuName = menuNameLocale;
+            if(menuNameLocale.equals(menuName)){
+                menuName = menuNameLocale;
+            }
         }else if (MessageUtils.getUserLocale().equals(LocaleEnum.English.getLocaleCode())){
             menuNameEn = menuNameLocale;
         }
-
     }
 
 }

+ 13 - 0
zkqy-common/src/main/java/com/zkqy/common/core/domain/entity/SysTenant.java

@@ -25,6 +25,19 @@ public class SysTenant extends BaseEntity {
     @Excel(name = "租户名称")
     private String tenantName;
 
+    /**
+     * 机器码信息
+     */
+    private String  machineCode;
+
+    public String getMachineCode() {
+        return machineCode;
+    }
+
+    public void setMachineCode(String machineCode) {
+        this.machineCode = machineCode;
+    }
+
     /**
      * 租户编号(公司统一信用代码)
      */

+ 115 - 0
zkqy-common/src/main/java/com/zkqy/common/utils/MachineCodeUtil.java

@@ -0,0 +1,115 @@
+package com.zkqy.common.utils;
+
+import java.net.NetworkInterface;
+import java.security.MessageDigest;
+import java.util.Enumeration;
+import java.util.Scanner;
+
+public class MachineCodeUtil {
+
+    /**
+     * 机器码盐值
+     */
+    private static final String SALT = "zkqy2024";  // 修改为更安全的盐值
+
+    /**
+     * 获取当前机器的机器码
+     */
+    public static String getMachineCode() {
+        try {
+            // 获取网卡信息
+            StringBuilder sb = new StringBuilder();
+            Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
+
+            while (networkInterfaces.hasMoreElements()) {
+                NetworkInterface ni = networkInterfaces.nextElement();
+                byte[] hardwareAddress = ni.getHardwareAddress();
+
+                // 排除虚拟网卡等
+                if (hardwareAddress != null && hardwareAddress.length > 0
+                        && !ni.isVirtual() && !ni.isLoopback()) {
+                    // 获取MAC地址
+                    for (byte b : hardwareAddress) {
+                        sb.append(String.format("%02X", b));
+                    }
+                }
+            }
+
+            // 获取CPU序列号
+            String cpuId = getCPUSerial();
+            if (StringUtils.isNotEmpty(cpuId)) {
+                sb.append(cpuId);
+            }
+
+            // 获取主板序列号
+            String motherboardId = getMotherboardSerial();
+            if (StringUtils.isNotEmpty(motherboardId)) {
+                sb.append(motherboardId);
+            }
+
+            // 添加盐值并使用MD5加密生成最终的机器码
+            String rawMachineCode = sb.toString() + SALT;
+            return getMD5(rawMachineCode);
+
+        } catch (Exception e) {
+            throw new RuntimeException("获取机器码失败", e);
+        }
+    }
+
+    /**
+     * 获取CPU序列号
+     */
+    private static String getCPUSerial() {
+        try {
+            Process process = Runtime.getRuntime().exec(
+                    new String[] { "wmic", "cpu", "get", "ProcessorId" });
+            process.getOutputStream().close();
+            Scanner sc = new Scanner(process.getInputStream());
+            String property = sc.next();
+            String serial = sc.next();
+            return serial;
+        } catch (Exception e) {
+            return "";
+        }
+    }
+
+    /**
+     * 获取主板序列号
+     */
+    private static String getMotherboardSerial() {
+        try {
+            Process process = Runtime.getRuntime().exec(
+                    new String[] { "wmic", "baseboard", "get", "SerialNumber" });
+            process.getOutputStream().close();
+            Scanner sc = new Scanner(process.getInputStream());
+            String property = sc.next();
+            String serial = sc.next();
+            return serial;
+        } catch (Exception e) {
+            return "";
+        }
+    }
+
+    /**
+     * MD5加密
+     */
+    private static String getMD5(String input) {
+        try {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            byte[] messageDigest = md.digest(input.getBytes());
+            StringBuilder hexString = new StringBuilder();
+
+            for (byte b : messageDigest) {
+                String hex = Integer.toHexString(0xFF & b);
+                if (hex.length() == 1) {
+                    hexString.append('0');
+                }
+                hexString.append(hex);
+            }
+
+            return hexString.toString();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

+ 49 - 0
zkqy-framework/src/main/java/com/zkqy/framework/aspectj/TableNameInterceptor.java

@@ -0,0 +1,49 @@
+package com.zkqy.framework.aspectj;
+
+
+import cn.hutool.core.util.ReflectUtil;
+import com.zkqy.common.utils.SecurityUtils;
+import com.zkqy.common.utils.StringUtils;
+import org.apache.ibatis.executor.statement.StatementHandler;
+import org.apache.ibatis.mapping.BoundSql;
+import org.apache.ibatis.plugin.*;
+import org.springframework.security.core.context.SecurityContextHolder;
+
+import java.sql.Connection;
+import java.util.Properties;
+
+@Intercepts({
+        @Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})
+})
+public class TableNameInterceptor implements Interceptor {
+
+    @Override
+    public Object intercept(Invocation invocation) throws Throwable {
+        // 获取 StatementHandler 对象
+        StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
+
+        // 获取原始的 SQL 语句
+        BoundSql boundSql = statementHandler.getBoundSql();
+        String originalSql = boundSql.getSql();
+
+//        if(StringUtils.isNotNull(SecurityContextHolder.getContext().getAuthentication())){
+//            if(SecurityUtils.getLoginUser2().getTenantId().equals("223")){
+                // 修改 SQL:将表名 fjqydb 替换为 fjqydbcopy
+                String modifiedSql = originalSql.replaceAll("\\bfjqydb\\b", "jdhydb");
+                // 使用反射修改 BoundSql 中的 SQL
+                ReflectUtil.setFieldValue(boundSql, "sql", modifiedSql);
+//            }
+//        }
+        // 继续执行原方法
+        return invocation.proceed();
+    }
+
+    @Override
+    public Object plugin(Object target) {
+        return Plugin.wrap(target, this);
+    }
+
+    @Override
+    public void setProperties(Properties properties) {
+    }
+}

+ 1 - 1
zkqy-framework/src/main/java/com/zkqy/framework/config/SecurityConfig.java

@@ -108,7 +108,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
                 // 过滤请求
                 .authorizeRequests()
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
-                .antMatchers("/login", "/register", "/captchaImage", "/uniappLogin", "/commonUniappLogin", "/isTenantExist").permitAll()
+                .antMatchers("/login", "/register", "/captchaImage", "/uniappLogin", "/commonUniappLogin", "/isTenantExist","/sendMessage").permitAll()
                 // 静态资源,可匿名访问
                 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                 .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()

+ 12 - 4
zkqy-framework/src/main/java/com/zkqy/framework/sso_oauth2/controller/OauthController.java

@@ -2,11 +2,13 @@ package com.zkqy.framework.sso_oauth2.controller;
 
 import com.zkqy.common.constant.CacheConstants;
 import com.zkqy.common.core.domain.AjaxResult;
+import com.zkqy.common.core.domain.entity.SysTenant;
 import com.zkqy.common.core.domain.entity.SysUser;
 import com.zkqy.common.core.redis.RedisCache;
 import com.zkqy.common.enums.sso.ErrorCodeEnum;
 import com.zkqy.common.enums.sso.ExpireEnum;
 import com.zkqy.common.enums.sso.GrantTypeEnum;
+import com.zkqy.common.utils.MachineCodeUtil;
 import com.zkqy.common.utils.StringUtils;
 import com.zkqy.common.utils.sso.Constants;
 import com.zkqy.common.utils.sso.DateUtils;
@@ -14,6 +16,7 @@ import com.zkqy.framework.security.context.AuthenticationContextHolder;
 import com.zkqy.system.domain.sso.AuthAccessToken;
 import com.zkqy.system.domain.sso.AuthClientDetails;
 import com.zkqy.system.domain.sso.AuthRefreshToken;
+import com.zkqy.system.service.ISysTenantService;
 import com.zkqy.system.service.ISysUserService;
 import com.zkqy.system.service.sso.AuthorizationService;
 import com.zkqy.system.service.sso.RedisService;
@@ -57,6 +60,9 @@ public class OauthController {
     @Autowired
     private ISysUserService userService;
 
+    @Autowired
+    private  ISysTenantService sysTenantService;
+
     @Autowired
     private RedisCache redisCache;
 
@@ -78,10 +84,12 @@ public class OauthController {
         String code = request.getParameter("code");
         String uuid = request.getParameter("uuid");
         String ym= request.getParameter("isYanMa");
-//        if(StringUtils.isNotNull(ym)&&ym.equals("yes")){
-//
-//        }
-
+        SysTenant sysTenant = sysTenantService.selectSysTenantByTenantId(Long.valueOf(tenantID));
+        if(org.apache.commons.lang3.StringUtils.isBlank(sysTenant.getMachineCode())&&!sysTenant.getMachineCode().equals("跳过")){
+            if(org.apache.commons.lang3.StringUtils.isBlank(sysTenant.getMachineCode())||!sysTenant.getMachineCode().equals(MachineCodeUtil.getMachineCode())){
+                return AjaxResult.warn("请联系管理员获取新的机器码");
+            }
+        }
         if(ym.equals("yes")){
             String verifyKey =
                     CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");

+ 7 - 0
zkqy-framework/src/main/java/com/zkqy/framework/sso_oauth2/controller/ThirdPartLoginController.java

@@ -4,11 +4,14 @@ import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.zkqy.common.annotation.Anonymous;
 import com.zkqy.common.core.domain.AjaxResult;
+import com.zkqy.common.core.domain.entity.SysTenant;
 import com.zkqy.common.core.domain.entity.SysUser;
+import com.zkqy.common.utils.MachineCodeUtil;
 import com.zkqy.common.utils.StringUtils;
 import com.zkqy.common.utils.http.HttpUtilsOauth2;
 import com.zkqy.framework.web.service.SysLoginService;
 import com.zkqy.system.service.ISysUserService;
+import com.zkqy.system.service.impl.SysTenantServiceImpl;
 import org.apache.http.HttpResponse;
 import org.apache.http.util.EntityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -53,6 +56,9 @@ public class ThirdPartLoginController {
     @Autowired
     private SysLoginService loginService;
 
+    @Autowired
+    private SysTenantServiceImpl sysTenantService;
+
     @GetMapping("oauth/callback")
     public String callback(@RequestParam("code") String code, HttpSession session, HttpServletRequest request) {
         try {
@@ -105,6 +111,7 @@ public class ThirdPartLoginController {
                         if (!checkTenantExpirationTimeMsg.isEmpty()) {
                             return "redirect:" + REDIRECT_URL + "/401";
                         }
+
                         System.out.println("用户名:" + (sysUser.getTenant().getTenantCode() + "^_^" + sysUser.getUserName() + "^_^" + System.currentTimeMillis() / 1000));
                         byte[] userInfo = Base64.getEncoder().encode((sysUser.getTenant().getTenantCode() + "^_^" + sysUser.getUserName() + "^_^" + System.currentTimeMillis() / 1000).getBytes(StandardCharsets.UTF_8));
                         String retUserInfo = new String(userInfo, StandardCharsets.UTF_8);

+ 33 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/bean/IndoorPlanVo.java

@@ -0,0 +1,33 @@
+package com.zkqy.amichi.bean;
+
+public class IndoorPlanVo {
+
+    private  String id;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    private String  pageNum;
+    public  String  pageSize;
+
+    public String getPageNum() {
+        return pageNum;
+    }
+
+    public void setPageNum(String pageNum) {
+        this.pageNum = pageNum;
+    }
+
+    public String getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(String pageSize) {
+        this.pageSize = pageSize;
+    }
+}

+ 109 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/ErOrderInfoController.java

@@ -0,0 +1,109 @@
+package com.zkqy.amichi.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.zkqy.amichi.service.IErOrderInfoService;
+import com.zkqy.common.annotation.Anonymous;
+import com.zkqy.common.annotation.Log;
+import com.zkqy.common.core.controller.BaseController;
+import com.zkqy.common.core.domain.AjaxResult;
+import com.zkqy.common.core.page.TableDataInfo;
+import com.zkqy.common.enums.BusinessType;
+import com.zkqy.common.utils.poi.ExcelUtil;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.zkqy.amichi.domain.ErOrderInfo;
+
+
+/**
+ * towScanController
+ *
+ * @author ruoyi
+ * @date 2025-05-19
+ */
+@RestController
+@RequestMapping("/ercsm/info")
+public class ErOrderInfoController extends BaseController
+{
+    @Autowired
+    private IErOrderInfoService erOrderInfoService;
+
+    /**
+     * 查询towScan列表
+     */
+    @PreAuthorize("@ss.hasPermi('ercsm:info:list')")
+    @GetMapping("/list")
+
+    public TableDataInfo list(ErOrderInfo erOrderInfo)
+    {
+        startPage();
+        List<ErOrderInfo> list = erOrderInfoService.selectErOrderInfoList(erOrderInfo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出towScan列表
+     */
+    @PreAuthorize("@ss.hasPermi('ercsm:info:export')")
+    @Log(title = "towScan", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ErOrderInfo erOrderInfo)
+    {
+        List<ErOrderInfo> list = erOrderInfoService.selectErOrderInfoList(erOrderInfo);
+        ExcelUtil<ErOrderInfo> util = new ExcelUtil<ErOrderInfo>(ErOrderInfo.class);
+        util.exportExcel(response, list, "towScan数据");
+    }
+
+    /**
+     * 获取towScan详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('ercsm:info:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(erOrderInfoService.selectErOrderInfoById(id));
+    }
+
+    /**
+     * 新增towScan
+     */
+    @PreAuthorize("@ss.hasPermi('ercsm:info:add')")
+    @Log(title = "towScan", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ErOrderInfo erOrderInfo)
+    {
+        return toAjax(erOrderInfoService.insertErOrderInfo(erOrderInfo));
+    }
+
+    /**
+     * 修改towScan
+     */
+    @PreAuthorize("@ss.hasPermi('ercsm:info:edit')")
+    @Log(title = "towScan", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ErOrderInfo erOrderInfo)
+    {
+        return toAjax(erOrderInfoService.updateErOrderInfo(erOrderInfo));
+    }
+
+    /**
+     * 删除towScan
+     */
+    @PreAuthorize("@ss.hasPermi('ercsm:info:remove')")
+    @Log(title = "towScan", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(erOrderInfoService.deleteErOrderInfoByIds(ids));
+    }
+}

+ 76 - 1
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/IndoorPlanInformationController.java

@@ -1,14 +1,21 @@
 package com.zkqy.amichi.controller;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletResponse;
 
+import com.zkqy.amichi.bean.IndoorPlanVo;
+import com.zkqy.amichi.utils.MaUtils;
+import com.zkqy.amichi.utils.PaginationUtils;
 import com.zkqy.common.annotation.Log;
 import com.zkqy.common.core.controller.BaseController;
 import com.zkqy.common.core.domain.AjaxResult;
 import com.zkqy.common.core.page.TableDataInfo;
 import com.zkqy.common.enums.BusinessType;
 import com.zkqy.common.utils.poi.ExcelUtil;
+import org.springframework.beans.BeanUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -26,7 +33,7 @@ import com.zkqy.amichi.service.IIndoorPlanInformationService;
 
 /**
  * 场内计划信息:记录场内生产计划相关的详细信息Controller
- * 
+ *
  * @author ruoyi
  * @date 2025-02-11
  */
@@ -62,6 +69,74 @@ public class IndoorPlanInformationController extends BaseController
         util.exportExcel(response, list, "场内计划信息:记录场内生产计划相关的详细信息数据");
     }
 
+    /**
+     * 导出场内计划信息:记录场内生产计划相关的详细信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('indoorPlanInformation:information:export')")
+    @Log(title = "场内计划信息:记录场内生产计划相关的详细信息", businessType = BusinessType.EXPORT)
+    @GetMapping("/generateCodeListInformation")
+    public AjaxResult generateCodeListInformation(IndoorPlanVo indoorPlanVo)
+    {
+        List<String> collect = Arrays.stream(indoorPlanVo.getId().split(",")).collect(Collectors.toList());
+
+        //返回的二维码集合
+        List<IndoorPlanInformation> list=new ArrayList<>();
+
+        //这是一个对象
+        List<IndoorPlanInformation>  indoorPlanInformation = indoorPlanInformationService.selectIndoorPlanInformationByIdList(collect);
+          indoorPlanInformation.forEach(item->{
+              //总数量
+              String taskQuantity = String.valueOf(item.getTaskQuantity());
+              //一托盘数量
+              String quantityOfPallets = item.getQuantityOfPallets();
+              //前端计算出来的一共需要几托盘
+              int ofPalletsTatal = Integer.parseInt(item.getOfPalletsTatal());
+
+              // 满载
+//              int fullTrucks = Integer.parseInt(taskQuantity) / Integer.parseInt(quantityOfPallets);       // 满载的车数:6
+
+              //最后一辆车余数
+              int remainingItems = Integer.parseInt(taskQuantity) % Integer.parseInt(quantityOfPallets);   // 剩余件数:1
+
+              // 最后一托盘数量装载数量                     取余数              正常一托盘的量
+              int lastTruckItems = remainingItems > 0 ? remainingItems : Integer.parseInt(quantityOfPallets);
+
+              for(int i=1;i<=ofPalletsTatal;i++){
+                  if(i==ofPalletsTatal){
+                      IndoorPlanInformation indoorPlanInformation1=new IndoorPlanInformation();
+                      BeanUtils.copyProperties(item,indoorPlanInformation1);
+                      //改变最后一个元素的托盘数量
+                      indoorPlanInformation1.setQuantityOfPallets(String.valueOf(lastTruckItems));
+
+                      indoorPlanInformation1.setIndex(String.valueOf(i));//序号
+                      String qrCodeContent="qycn&"+indoorPlanInformation1.getId()+"&"+indoorPlanInformation1.getIndex()+"&"+indoorPlanInformation1.getQuantityOfPallets();
+                      String qrCodeContentBaseUrl = MaUtils.generateQRCode(qrCodeContent);
+                      StringBuilder prefixString=new StringBuilder("data:image/png;base64,");
+                      prefixString.append(qrCodeContentBaseUrl);
+                      indoorPlanInformation1.setImageQrCode(prefixString.toString());
+                      list.add(indoorPlanInformation1);
+                  } else {
+                      IndoorPlanInformation indoorPlanInformation2=new IndoorPlanInformation();
+                      BeanUtils.copyProperties(item,indoorPlanInformation2);
+                      indoorPlanInformation2.setIndex(String.valueOf(i));//序号
+                      String qrCodeContent="qycn&"+indoorPlanInformation2.getId()+"&"+indoorPlanInformation2.getIndex()+"&"+indoorPlanInformation2.getQuantityOfPallets();
+
+                      String qrCodeContentBaseUrl = MaUtils.generateQRCode(qrCodeContent);
+                      StringBuilder prefixString=new StringBuilder("data:image/png;base64,");
+                      prefixString.append(qrCodeContentBaseUrl);
+
+                      indoorPlanInformation2.setImageQrCode(prefixString.toString());
+
+                      list.add(indoorPlanInformation2);
+                  }
+              }
+          });
+
+        List<IndoorPlanInformation> page = PaginationUtils.getPage(list, Integer.parseInt(indoorPlanVo.getPageNum()), Integer.parseInt(indoorPlanVo.getPageSize()));
+        //查询
+        return AjaxResult.success("查询成功").put("rows",page).put("total",list.size());
+    }
+
     /**
      * 获取场内计划信息:记录场内生产计划相关的详细信息详细信息
      */

+ 4 - 4
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/IndoorProductionGroupInformationController.java

@@ -30,7 +30,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 分组信息:用于记录各个分组的基本信息Controller
- * 
+ *
  * @author ruoyi
  * @date 2025-02-11
  */
@@ -87,10 +87,10 @@ public class IndoorProductionGroupInformationController extends BaseController
         return toAjax(indoorProductionGroupInformationService.insertIndoorProductionGroupInformation(indoorProductionGroupInformation));
     }
     @Anonymous
-    @GetMapping(value = "/treeList/{id}")
-    public AjaxResult treeList(@PathVariable("id") Long id)
+    @GetMapping(value = "/treeList")
+    public AjaxResult treeList(@RequestParam(name = "id",required = false) Long id,@RequestParam(name = "groupName",required = false) String groupName)
     {
-        return AjaxResult.success(indoorProductionGroupInformationService.treeList(id));
+        return AjaxResult.success(indoorProductionGroupInformationService.treeList(id,groupName));
     }
 
     @Log(title = "导入产品信息", businessType = BusinessType.IMPORT)

+ 107 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/MaterialsInventoryController.java

@@ -0,0 +1,107 @@
+package com.zkqy.amichi.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.zkqy.common.annotation.Log;
+import com.zkqy.common.core.controller.BaseController;
+import com.zkqy.common.core.domain.AjaxResult;
+import com.zkqy.common.core.page.TableDataInfo;
+import com.zkqy.common.enums.BusinessType;
+import com.zkqy.common.utils.poi.ExcelUtil;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.zkqy.amichi.domain.MaterialsInventory;
+import com.zkqy.amichi.service.IMaterialsInventoryService;
+
+
+/**
+ * 半成品库存Controller
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@RestController
+@RequestMapping("/indoor/inventory")
+public class MaterialsInventoryController extends BaseController
+{
+    @Autowired
+    private IMaterialsInventoryService materialsInventoryService;
+
+    /**
+     * 查询半成品库存列表
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:inventory:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(MaterialsInventory materialsInventory)
+    {
+        startPage();
+        List<MaterialsInventory> list = materialsInventoryService.selectMaterialsInventoryList(materialsInventory);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出半成品库存列表
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:inventory:export')")
+    @Log(title = "半成品库存", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, MaterialsInventory materialsInventory)
+    {
+        List<MaterialsInventory> list = materialsInventoryService.selectMaterialsInventoryList(materialsInventory);
+        ExcelUtil<MaterialsInventory> util = new ExcelUtil<MaterialsInventory>(MaterialsInventory.class);
+        util.exportExcel(response, list, "半成品库存数据");
+    }
+
+    /**
+     * 获取半成品库存详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:inventory:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(materialsInventoryService.selectMaterialsInventoryById(id));
+    }
+
+    /**
+     * 新增半成品库存
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:inventory:add')")
+    @Log(title = "半成品库存", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody MaterialsInventory materialsInventory)
+    {
+        return toAjax(materialsInventoryService.insertMaterialsInventory(materialsInventory));
+    }
+
+    /**
+     * 修改半成品库存
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:inventory:edit')")
+    @Log(title = "半成品库存", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody MaterialsInventory materialsInventory)
+    {
+        return toAjax(materialsInventoryService.updateMaterialsInventory(materialsInventory));
+    }
+
+    /**
+     * 删除半成品库存
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:inventory:remove')")
+    @Log(title = "半成品库存", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(materialsInventoryService.deleteMaterialsInventoryByIds(ids));
+    }
+}

+ 5 - 2
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/RingScanInformationController.java

@@ -79,18 +79,19 @@ public class RingScanInformationController extends BaseController
     @GetMapping("/scfylist")
     public  AjaxResult scfylist(RingScanInformation ringScanInformation)
     {
+        ringScanInformation.setDeviceNumber("SMSB869161028903448");
         //验证当前页码
         if(ringScanInformation.getPageNum()<=1){
             ringScanInformation.setPageNum(1);
         }
-        PageHelper.clearPage();
+//        PageHelper.clearPage();
         //查询总条数
         int i = ringScanInformationMapper.selectRingScanInformationListScfyCount(ringScanInformation);
         if(i<=0){
             List<Map> list1=new ArrayList<>();
             return AjaxResult.success(list1);
         }
-        int totalPages = (int) Math.ceil((double) i / ringScanInformation.getPageSize());
+//        int totalPages = (int) Math.ceil((double) i / ringScanInformation.getPageSize());
         // 验证当前页码是否超过总页数
 //        if (ringScanInformation.getPageNum() > totalPages) {
 //            ringScanInformation.setPageNum(totalPages);
@@ -159,6 +160,7 @@ public class RingScanInformationController extends BaseController
 
         RingScanInformation ringScanInformation=new RingScanInformation();
         ringScanInformation.setDeviceNumber(deviceNumber);//编号
+        ringScanInformation.setPersonnelName(stationInformations.get(0).getPersonnelName());
 
         // 用户名,工位,生产订单总数,成功数量,失败数量,订单号
         List<Map> list = ringScanInformationService.handHeldJournal(ringScanInformation);
@@ -324,6 +326,7 @@ public class RingScanInformationController extends BaseController
         }
         List<String> orderNumberListString = ringScanInformationFirsts.parallelStream().map(RingScanInformationFirst::getOrderNumber).collect(Collectors.toList());
 
+
         Map<String, List<RingScanInformationLogVo>> stringListMap = ringScanInformationService.selectRingScanInformationLog2(orderNumberListString);
         //总条数
         long total = new PageInfo(ringScanInformationFirsts).getTotal();

+ 134 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/StockInOrderController.java

@@ -0,0 +1,134 @@
+package com.zkqy.amichi.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.zkqy.amichi.domain.vo.StockInOrderAndOrderDetail;
+import com.zkqy.common.annotation.Log;
+import com.zkqy.common.core.controller.BaseController;
+import com.zkqy.common.core.domain.AjaxResult;
+import com.zkqy.common.core.page.TableDataInfo;
+import com.zkqy.common.enums.BusinessType;
+import com.zkqy.common.utils.poi.ExcelUtil;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.zkqy.amichi.domain.StockInOrder;
+import com.zkqy.amichi.service.IStockInOrderService;
+
+
+/**
+ * 半成品入库单主Controller
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@RestController
+@RequestMapping("/indoor/order")
+public class StockInOrderController extends BaseController
+{
+    @Autowired
+    @Qualifier("StockInOrderServiceImpl")
+    private IStockInOrderService stockInOrderService;
+
+    /**
+     * 查询半成品入库单主列表
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:order:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(StockInOrder stockInOrder)
+    {
+        startPage();
+        stockInOrder.setType("0");
+        List<StockInOrder> list = stockInOrderService.selectStockInOrderList(stockInOrder);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出半成品入库单主列表
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:order:export')")
+    @Log(title = "半成品入库单主", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, StockInOrder stockInOrder)
+    {
+        stockInOrder.setType("0");
+        List<StockInOrder> list = stockInOrderService.selectStockInOrderList(stockInOrder);
+        ExcelUtil<StockInOrder> util = new ExcelUtil<StockInOrder>(StockInOrder.class);
+        util.exportExcel(response, list, "半成品入库单主数据");
+    }
+
+    /**
+     * 获取半成品入库单主详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:order:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(stockInOrderService.selectStockInOrderById(id));
+    }
+
+//    @PreAuthorize("@ss.hasPermi('indoor:order:query')")
+//    @GetMapping(value = "/de/{id}")
+//    public AjaxResult getInfo(@PathVariable("id") Long id)
+//    {
+//        return success(stockInOrderService.selectStockInOrderById(id));
+//    }
+
+    /**
+     * 新增半成品入库单主
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:order:add')")
+    @Log(title = "半成品入库单主", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody StockInOrder stockInOrder)
+    {
+        stockInOrder.setType("0");
+        return toAjax(stockInOrderService.insertStockInOrder(stockInOrder));
+    }
+
+
+    /**
+     * 新增半成品入库单主
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:order:add')")
+    @Log(title = "半成品入库单主", businessType = BusinessType.INSERT)
+    @PostMapping("/stockInOrderAndOrderDetail")
+    public AjaxResult stockInOrderAndOrderDetail(@RequestBody StockInOrderAndOrderDetail stockInOrder)
+    {    stockInOrder.setType("0");
+        return toAjax(stockInOrderService.insertStockInOrderAndDetail(stockInOrder));
+    }
+
+
+    /**
+     * 修改半成品入库单主
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:order:edit')")
+    @Log(title = "半成品入库单主", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody StockInOrderAndOrderDetail stockInOrder)
+    {
+        stockInOrder.setType("0");
+        return stockInOrderService.updateStockInOrder(stockInOrder);
+    }
+
+    /**
+     * 删除半成品入库单主
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:order:remove')")
+    @Log(title = "半成品入库单主", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(stockInOrderService.deleteStockInOrderByIds(ids));
+    }
+}

+ 107 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/StockInOrderDetailController.java

@@ -0,0 +1,107 @@
+package com.zkqy.amichi.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.zkqy.amichi.domain.StockInOrderDetail;
+import com.zkqy.common.annotation.Log;
+import com.zkqy.common.core.controller.BaseController;
+import com.zkqy.common.core.domain.AjaxResult;
+import com.zkqy.common.core.page.TableDataInfo;
+import com.zkqy.common.enums.BusinessType;
+import com.zkqy.common.utils.poi.ExcelUtil;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.zkqy.amichi.service.IStockInOrderDetailService;
+
+
+/**
+ * 半成品入库单明细Controller
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@RestController
+@RequestMapping("/indoor/detail")
+public class StockInOrderDetailController extends BaseController
+{
+    @Autowired
+    private IStockInOrderDetailService stockInOrderDetailService;
+
+    /**
+     * 查询半成品入库单明细列表
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:detail:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(StockInOrderDetail stockInOrderDetail)
+    {
+        startPage();
+        List<StockInOrderDetail> list = stockInOrderDetailService.selectStockInOrderDetailList(stockInOrderDetail);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出半成品入库单明细列表
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:detail:export')")
+    @Log(title = "半成品入库单明细", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, StockInOrderDetail stockInOrderDetail)
+    {
+        List<StockInOrderDetail> list = stockInOrderDetailService.selectStockInOrderDetailList(stockInOrderDetail);
+        ExcelUtil<StockInOrderDetail> util = new ExcelUtil<StockInOrderDetail>(StockInOrderDetail.class);
+        util.exportExcel(response, list, "半成品入库单明细数据");
+    }
+
+    /**
+     * 获取半成品入库单明细详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:detail:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(stockInOrderDetailService.selectStockInOrderDetailById(id));
+    }
+
+    /**
+     * 新增半成品入库单明细
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:detail:add')")
+    @Log(title = "半成品入库单明细", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody StockInOrderDetail stockInOrderDetail)
+    {
+        return toAjax(stockInOrderDetailService.insertStockInOrderDetail(stockInOrderDetail));
+    }
+
+    /**
+     * 修改半成品入库单明细
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:detail:edit')")
+    @Log(title = "半成品入库单明细", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody StockInOrderDetail stockInOrderDetail)
+    {
+        return toAjax(stockInOrderDetailService.updateStockInOrderDetail(stockInOrderDetail));
+    }
+
+    /**
+     * 删除半成品入库单明细
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:detail:remove')")
+    @Log(title = "半成品入库单明细", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable List<Long> ids)
+    {
+        return toAjax(stockInOrderDetailService.deleteStockInOrderDetailByIds(ids));
+    }
+}

+ 108 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/StockInRecordController.java

@@ -0,0 +1,108 @@
+package com.zkqy.amichi.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.zkqy.common.annotation.Log;
+import com.zkqy.common.core.controller.BaseController;
+import com.zkqy.common.core.domain.AjaxResult;
+import com.zkqy.common.core.page.TableDataInfo;
+import com.zkqy.common.enums.BusinessType;
+import com.zkqy.common.utils.poi.ExcelUtil;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.zkqy.amichi.domain.StockInRecord;
+import com.zkqy.amichi.service.IStockInRecordService;
+
+
+/**
+ * 半成品入库记录Controller
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@RestController
+@RequestMapping("/indoor/cnjh/record")
+public class StockInRecordController extends BaseController
+{
+    @Autowired
+    private IStockInRecordService stockInRecordService;
+
+    /**
+     * 查询半成品入库记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:record:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(StockInRecord stockInRecord)
+    {
+        startPage();
+        List<StockInRecord> list = stockInRecordService.selectStockInRecordList(stockInRecord);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出半成品入库记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:record:export')")
+    @Log(title = "半成品入库记录", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, StockInRecord stockInRecord)
+    {
+
+        List<StockInRecord> list = stockInRecordService.selectStockInRecordList(stockInRecord);
+        ExcelUtil<StockInRecord> util = new ExcelUtil<StockInRecord>(StockInRecord.class);
+        util.exportExcel(response, list, "半成品入库记录数据");
+    }
+
+    /**
+     * 获取半成品入库记录详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:record:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(stockInRecordService.selectStockInRecordById(id));
+    }
+
+    /**
+     * 新增半成品入库记录
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:record:add')")
+    @Log(title = "半成品入库记录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody StockInRecord stockInRecord)
+    {
+        return toAjax(stockInRecordService.insertStockInRecord(stockInRecord));
+    }
+
+    /**
+     * 修改半成品入库记录
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:record:edit')")
+    @Log(title = "半成品入库记录", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody StockInRecord stockInRecord)
+    {
+        return toAjax(stockInRecordService.updateStockInRecord(stockInRecord));
+    }
+
+    /**
+     * 删除半成品入库记录
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:record:remove')")
+    @Log(title = "半成品入库记录", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(stockInRecordService.deleteStockInRecordByIds(ids));
+    }
+}

+ 126 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/StockOutOrderController.java

@@ -0,0 +1,126 @@
+package com.zkqy.amichi.controller;
+
+import com.zkqy.amichi.domain.StockInOrder;
+import com.zkqy.amichi.domain.vo.StockInOrderAndOrderDetail;
+import com.zkqy.amichi.service.IStockInOrderService;
+import com.zkqy.common.annotation.Log;
+import com.zkqy.common.core.controller.BaseController;
+import com.zkqy.common.core.domain.AjaxResult;
+import com.zkqy.common.core.page.TableDataInfo;
+import com.zkqy.common.enums.BusinessType;
+import com.zkqy.common.utils.poi.ExcelUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+
+/**
+ * 半成品入库单主Controller
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@RestController
+@RequestMapping("/indoor/order/out")
+public class StockOutOrderController extends BaseController
+{
+    @Autowired
+    @Qualifier("StockOutOrderServiceImpl")
+    private IStockInOrderService stockInOrderService;
+
+    /**
+     * 查询半成品入库单主列表
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:order:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(StockInOrder stockInOrder)
+    {
+        startPage();
+        stockInOrder.setType("1");
+        List<StockInOrder> list = stockInOrderService.selectStockInOrderList(stockInOrder);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出半成品入库单主列表
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:order:export')")
+    @Log(title = "半成品入库单主", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, StockInOrder stockInOrder)
+    {
+        stockInOrder.setType("1");
+        List<StockInOrder> list = stockInOrderService.selectStockInOrderList(stockInOrder);
+        ExcelUtil<StockInOrder> util = new ExcelUtil<StockInOrder>(StockInOrder.class);
+        util.exportExcel(response, list, "半成品入库单主数据");
+    }
+
+    /**
+     * 获取半成品入库单主详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:order:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(stockInOrderService.selectStockInOrderById(id));
+    }
+
+//    @PreAuthorize("@ss.hasPermi('indoor:order:query')")
+//    @GetMapping(value = "/de/{id}")
+//    public AjaxResult getInfo(@PathVariable("id") Long id)
+//    {
+//        return success(stockInOrderService.selectStockInOrderById(id));
+//    }
+
+    /**
+     * 新增半成品入库单主
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:order:add')")
+    @Log(title = "半成品入库单主", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody StockInOrder stockInOrder)
+    {
+        stockInOrder.setType("1");
+        return toAjax(stockInOrderService.insertStockInOrder(stockInOrder));
+    }
+
+
+    /**
+     * 新增半成品出库单主
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:order:add')")
+    @Log(title = "半成品入库单主", businessType = BusinessType.INSERT)
+    @PostMapping("/stockInOrderAndOrderDetail")
+    public AjaxResult stockInOrderAndOrderDetail(@RequestBody StockInOrderAndOrderDetail stockInOrder)
+    {    stockInOrder.setType("1");
+        return stockInOrderService.insertStockIOutOrderAndDetail(stockInOrder);
+    }
+
+
+    /**
+     * 修改半成品入库单主
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:order:edit')")
+    @Log(title = "半成品入库单主", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody StockInOrderAndOrderDetail stockInOrder)
+    {
+        stockInOrder.setType("1");
+        return stockInOrderService.updateStockInOrder(stockInOrder);
+    }
+
+    /**
+     * 删除半成品入库单主
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:order:remove')")
+    @Log(title = "半成品入库单主", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(stockInOrderService.deleteStockInOrderByIds(ids));
+    }
+}

+ 108 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/StockOutRecordController.java

@@ -0,0 +1,108 @@
+package com.zkqy.amichi.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.zkqy.common.annotation.Log;
+import com.zkqy.common.core.controller.BaseController;
+import com.zkqy.common.core.domain.AjaxResult;
+import com.zkqy.common.core.page.TableDataInfo;
+import com.zkqy.common.enums.BusinessType;
+import com.zkqy.common.utils.poi.ExcelUtil;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.zkqy.amichi.domain.StockOutRecord;
+import com.zkqy.amichi.service.IStockOutRecordService;
+
+
+/**
+ * 半成品出库记录Controller
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@RestController
+@RequestMapping("/indoor/record")
+public class StockOutRecordController extends BaseController
+{
+
+    @Autowired
+    private IStockOutRecordService stockOutRecordService;
+
+    /**
+     * 查询半成品出库记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:record:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(StockOutRecord stockOutRecord)
+    {
+        startPage();
+        List<StockOutRecord> list = stockOutRecordService.selectStockOutRecordList(stockOutRecord);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出半成品出库记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:record:export')")
+    @Log(title = "半成品出库记录", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, StockOutRecord stockOutRecord)
+    {
+        List<StockOutRecord> list = stockOutRecordService.selectStockOutRecordList(stockOutRecord);
+        ExcelUtil<StockOutRecord> util = new ExcelUtil<StockOutRecord>(StockOutRecord.class);
+        util.exportExcel(response, list, "半成品出库记录数据");
+    }
+
+    /**
+     * 获取半成品出库记录详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:record:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(stockOutRecordService.selectStockOutRecordById(id));
+    }
+
+    /**
+     * 新增半成品出库记录
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:record:add')")
+    @Log(title = "半成品出库记录", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody StockOutRecord stockOutRecord)
+    {
+        return toAjax(stockOutRecordService.insertStockOutRecord(stockOutRecord));
+    }
+
+    /**
+     * 修改半成品出库记录
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:record:edit')")
+    @Log(title = "半成品出库记录", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody StockOutRecord stockOutRecord)
+    {
+        return toAjax(stockOutRecordService.updateStockOutRecord(stockOutRecord));
+    }
+
+    /**
+     * 删除半成品出库记录
+     */
+    @PreAuthorize("@ss.hasPermi('indoor:record:remove')")
+    @Log(title = "半成品出库记录", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(stockOutRecordService.deleteStockOutRecordByIds(ids));
+    }
+}

+ 1 - 1
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/AutomaticSchedulingOnSite.java

@@ -18,7 +18,7 @@ public class AutomaticSchedulingOnSite extends BaseEntity {
     private Long id;
 
     /** 计划编号 */
-    @Excel(name = "计划编号")
+    @Excel(name = "计划编号",isStatistics = true)
     private String workmanship;
 
     /** 计划完成时间 */

+ 54 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/ErOrderInfo.java

@@ -0,0 +1,54 @@
+package com.zkqy.amichi.domain;
+
+import com.zkqy.common.annotation.Excel;
+import com.zkqy.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+
+/**
+ * towScan对象 er_order_info
+ *
+ * @author ruoyi
+ * @date 2025-05-19
+ */
+public class ErOrderInfo extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private Long id;
+
+    /** 订单号 */
+    @Excel(name = "订单号")
+    private String orderNumber;
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setOrderNumber(String orderNumber)
+    {
+        this.orderNumber = orderNumber;
+    }
+
+    public String getOrderNumber()
+    {
+        return orderNumber;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("orderNumber", getOrderNumber())
+            .append("createTime", getCreateTime())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 27 - 14
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/IndoorMaterialInformation.java

@@ -8,7 +8,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
 
 /**
  * 场内计划信息对象 indoor_material_information
- * 
+ *
  * @author ruoyi
  * @date 2025-02-11
  */
@@ -22,6 +22,12 @@ public class IndoorMaterialInformation extends BaseEntity
     @Excel(name = "父项物料编码")
     private String materialCode;
 
+
+    /** 物料类型 */
+    @Excel(name = "物料类型")
+    private String materialType;
+
+
     /** 物料名称:物料的具体名称 */
     @Excel(name = "物料名称")
     private String materialName;
@@ -51,6 +57,13 @@ public class IndoorMaterialInformation extends BaseEntity
 
 
 
+    public String getMaterialType() {
+        return materialType;
+    }
+
+    public void setMaterialType(String materialType) {
+        this.materialType = materialType;
+    }
     public Long getId() {
         return id;
     }
@@ -72,61 +85,61 @@ public class IndoorMaterialInformation extends BaseEntity
         this.materialCode = materialCode;
     }
 
-    public String getMaterialCode() 
+    public String getMaterialCode()
     {
         return materialCode;
     }
-    public void setMaterialName(String materialName) 
+    public void setMaterialName(String materialName)
     {
         this.materialName = materialName;
     }
 
-    public String getMaterialName() 
+    public String getMaterialName()
     {
         return materialName;
     }
-    public void setModel(String model) 
+    public void setModel(String model)
     {
         this.model = model;
     }
 
-    public String getModel() 
+    public String getModel()
     {
         return model;
     }
-    public void setSpecification(String specification) 
+    public void setSpecification(String specification)
     {
         this.specification = specification;
     }
 
-    public String getSpecification() 
+    public String getSpecification()
     {
         return specification;
     }
-    public void setDescription(String description) 
+    public void setDescription(String description)
     {
         this.description = description;
     }
 
-    public String getDescription() 
+    public String getDescription()
     {
         return description;
     }
-    public void setUnit(String unit) 
+    public void setUnit(String unit)
     {
         this.unit = unit;
     }
 
-    public String getUnit() 
+    public String getUnit()
     {
         return unit;
     }
-    public void setGroupId(Long groupId) 
+    public void setGroupId(Long groupId)
     {
         this.groupId = groupId;
     }
 
-    public Long getGroupId() 
+    public Long getGroupId()
     {
         return groupId;
     }

+ 70 - 23
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/IndoorPlanInformation.java

@@ -10,7 +10,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
 
 /**
  * 场内计划信息:记录场内生产计划相关的详细信息对象 indoor_plan_information
- * 
+ *
  * @author ruoyi
  * @date 2025-02-11
  */
@@ -62,102 +62,149 @@ public class IndoorPlanInformation extends BaseEntity
     @Excel(name = "备注:其他需要说明的信息")
     private String remarks;
 
-    public void setId(Long id) 
+    /**
+     * 托盘数量
+     */
+    private  String ofPalletsTatal;
+
+    /**
+     * 一托盘放多少个
+     * @param id
+     */
+    private  String quantityOfPallets;
+
+    private  String  index;
+
+    private  String imageQrCode;
+
+    public String getIndex() {
+        return index;
+    }
+
+    public void setIndex(String index) {
+        this.index = index;
+    }
+
+    public String getImageQrCode() {
+        return imageQrCode;
+    }
+
+    public void setImageQrCode(String imageQrCode) {
+        this.imageQrCode = imageQrCode;
+    }
+
+    public String getOfPalletsTatal() {
+        return ofPalletsTatal;
+    }
+
+    public void setOfPalletsTatal(String ofPalletsTatal) {
+        this.ofPalletsTatal = ofPalletsTatal;
+    }
+
+    public String getQuantityOfPallets() {
+        return quantityOfPallets;
+    }
+
+    public void setQuantityOfPallets(String quantityOfPallets) {
+        this.quantityOfPallets = quantityOfPallets;
+    }
+
+    public void setId(Long id)
     {
         this.id = id;
     }
 
-    public Long getId() 
+    public Long getId()
     {
         return id;
     }
-    public void setTaskId(String taskId) 
+    public void setTaskId(String taskId)
     {
         this.taskId = taskId;
     }
 
-    public String getTaskId() 
+    public String getTaskId()
     {
         return taskId;
     }
-    public void setMaterialCode(String materialCode) 
+    public void setMaterialCode(String materialCode)
     {
         this.materialCode = materialCode;
     }
 
-    public String getMaterialCode() 
+    public String getMaterialCode()
     {
         return materialCode;
     }
-    public void setMaterialName(String materialName) 
+    public void setMaterialName(String materialName)
     {
         this.materialName = materialName;
     }
 
-    public String getMaterialName() 
+    public String getMaterialName()
     {
         return materialName;
     }
-    public void setMaterialModel(String materialModel) 
+    public void setMaterialModel(String materialModel)
     {
         this.materialModel = materialModel;
     }
 
-    public String getMaterialModel() 
+    public String getMaterialModel()
     {
         return materialModel;
     }
-    public void setMaterialSpecification(String materialSpecification) 
+    public void setMaterialSpecification(String materialSpecification)
     {
         this.materialSpecification = materialSpecification;
     }
 
-    public String getMaterialSpecification() 
+    public String getMaterialSpecification()
     {
         return materialSpecification;
     }
-    public void setProductionTime(Date productionTime) 
+    public void setProductionTime(Date productionTime)
     {
         this.productionTime = productionTime;
     }
 
-    public Date getProductionTime() 
+    public Date getProductionTime()
     {
         return productionTime;
     }
-    public void setTaskQuantity(Long taskQuantity) 
+    public void setTaskQuantity(Long taskQuantity)
     {
         this.taskQuantity = taskQuantity;
     }
 
-    public Long getTaskQuantity() 
+    public Long getTaskQuantity()
     {
         return taskQuantity;
     }
-    public void setPlanStatus(String planStatus) 
+    public void setPlanStatus(String planStatus)
     {
         this.planStatus = planStatus;
     }
 
-    public String getPlanStatus() 
+    public String getPlanStatus()
     {
         return planStatus;
     }
-    public void setProductDescription(String productDescription) 
+    public void setProductDescription(String productDescription)
     {
         this.productDescription = productDescription;
     }
 
-    public String getProductDescription() 
+    public String getProductDescription()
     {
         return productDescription;
     }
-    public void setRemarks(String remarks) 
+    public void setRemarks(String remarks)
     {
         this.remarks = remarks;
     }
 
-    public String getRemarks() 
+    public String getRemarks()
     {
         return remarks;
     }

+ 160 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/MaterialsInventory.java

@@ -0,0 +1,160 @@
+package com.zkqy.amichi.domain;
+
+import com.zkqy.common.annotation.Excel;
+import com.zkqy.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+
+/**
+ * 半成品库存对象 materials_inventory
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+public class MaterialsInventory extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    private Long id;
+
+    private  String dyl;
+
+    public String getDyl() {
+        return dyl;
+    }
+
+    public void setDyl(String dyl) {
+        this.dyl = dyl;
+    }
+
+    /** 物料编码 */
+    @Excel(name = "物料编码")
+    private String materialCode;
+    @Excel(name = "类型")
+    private  String excitationType;
+
+    /** 物料名称 */
+    @Excel(name = "物料名称")
+    private String materialName;
+
+    /** 型号 */
+    @Excel(name = "型号")
+    private String model;
+
+    /** 规格 */
+    @Excel(name = "规格")
+    private String specification;
+
+    /** 库存数量 */
+    @Excel(name = "库存数量")
+    private Long stockQuantity;
+
+    /** 操作人ID */
+    @Excel(name = "操作人ID")
+    private Long createById;
+
+    /** 操作人ID */
+    @Excel(name = "操作人ID")
+    private Long updateById;
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setMaterialCode(String materialCode)
+    {
+        this.materialCode = materialCode;
+    }
+
+    public String getMaterialCode()
+    {
+        return materialCode;
+    }
+    public void setMaterialName(String materialName)
+    {
+        this.materialName = materialName;
+    }
+
+    public String getMaterialName()
+    {
+        return materialName;
+    }
+    public void setModel(String model)
+    {
+        this.model = model;
+    }
+
+    public String getModel()
+    {
+        return model;
+    }
+    public void setSpecification(String specification)
+    {
+        this.specification = specification;
+    }
+
+    public String getSpecification()
+    {
+        return specification;
+    }
+    public void setStockQuantity(Long stockQuantity)
+    {
+        this.stockQuantity = stockQuantity;
+    }
+
+    public String getExcitationType() {
+        return excitationType;
+    }
+
+    public void setExcitationType(String excitationType) {
+        this.excitationType = excitationType;
+    }
+    public Long getStockQuantity()
+    {
+        return stockQuantity;
+    }
+    public void setCreateById(Long createById)
+    {
+        this.createById = createById;
+    }
+
+    public Long getCreateById()
+    {
+        return createById;
+    }
+    public void setUpdateById(Long updateById)
+    {
+        this.updateById = updateById;
+    }
+
+    public Long getUpdateById()
+    {
+        return updateById;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("materialCode", getMaterialCode())
+            .append("materialName", getMaterialName())
+            .append("model", getModel())
+            .append("specification", getSpecification())
+            .append("stockQuantity", getStockQuantity())
+            .append("remark", getRemark())
+            .append("createBy", getCreateBy())
+            .append("createById", getCreateById())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateById", getUpdateById())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 96 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/StockInOrder.java

@@ -0,0 +1,96 @@
+package com.zkqy.amichi.domain;
+
+import com.zkqy.common.annotation.Excel;
+import com.zkqy.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+
+/**
+ * 半成品入库单主对象 stock_in_order
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+public class StockInOrder extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    private Long id;
+
+    /** 入库单号 */
+    @Excel(name = "入库单号")
+    private String orderNo;
+
+    /** 操作人ID */
+    @Excel(name = "操作人ID")
+    private Long createById;
+
+    /** 操作人ID */
+    @Excel(name = "操作人ID")
+    private Long updateById;
+
+    @Excel(name = "0入库单 1出库单")
+    private  String  type;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setOrderNo(String orderNo)
+    {
+        this.orderNo = orderNo;
+    }
+
+    public String getOrderNo()
+    {
+        return orderNo;
+    }
+    public void setCreateById(Long createById)
+    {
+        this.createById = createById;
+    }
+
+    public Long getCreateById()
+    {
+        return createById;
+    }
+    public void setUpdateById(Long updateById)
+    {
+        this.updateById = updateById;
+    }
+
+    public Long getUpdateById()
+    {
+        return updateById;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("orderNo", getOrderNo())
+            .append("remark", getRemark())
+            .append("createBy", getCreateBy())
+            .append("createById", getCreateById())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateById", getUpdateById())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 155 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/StockInOrderDetail.java

@@ -0,0 +1,155 @@
+package com.zkqy.amichi.domain;
+
+import com.zkqy.common.annotation.Excel;
+import com.zkqy.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+
+/**
+ * 半成品入库单明细对象 stock_in_order_detail
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+public class StockInOrderDetail extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    private Long id;
+
+    /** 关联入库单主表ID */
+    @Excel(name = "关联入库单主表ID")
+    private Long stockInOrderId;
+
+    /** 物料编码 */
+    @Excel(name = "物料编码")
+    private String materialCode;
+
+    /** 物料名称 */
+    @Excel(name = "物料名称")
+    private String materialName;
+
+    /** 型号 */
+    @Excel(name = "型号")
+    private String model;
+
+    /** 规格 */
+    @Excel(name = "规格")
+    private String specification;
+
+    /** 计划入库数量 */
+    @Excel(name = "计划入库数量")
+    private Long inQuantity;
+
+    /** 操作人ID */
+    @Excel(name = "操作人ID")
+    private Long createById;
+
+    /** 操作人ID */
+    @Excel(name = "操作人ID")
+    private Long updateById;
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setStockInOrderId(Long stockInOrderId)
+    {
+        this.stockInOrderId = stockInOrderId;
+    }
+
+    public Long getStockInOrderId()
+    {
+        return stockInOrderId;
+    }
+    public void setMaterialCode(String materialCode)
+    {
+        this.materialCode = materialCode;
+    }
+
+    public String getMaterialCode()
+    {
+        return materialCode;
+    }
+    public void setMaterialName(String materialName)
+    {
+        this.materialName = materialName;
+    }
+
+    public String getMaterialName()
+    {
+        return materialName;
+    }
+    public void setModel(String model)
+    {
+        this.model = model;
+    }
+
+    public String getModel()
+    {
+        return model;
+    }
+    public void setSpecification(String specification)
+    {
+        this.specification = specification;
+    }
+
+    public String getSpecification()
+    {
+        return specification;
+    }
+    public void setInQuantity(Long inQuantity)
+    {
+        this.inQuantity = inQuantity;
+    }
+
+    public Long getInQuantity()
+    {
+        return inQuantity;
+    }
+    public void setCreateById(Long createById)
+    {
+        this.createById = createById;
+    }
+
+    public Long getCreateById()
+    {
+        return createById;
+    }
+    public void setUpdateById(Long updateById)
+    {
+        this.updateById = updateById;
+    }
+
+    public Long getUpdateById()
+    {
+        return updateById;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("stockInOrderId", getStockInOrderId())
+            .append("materialCode", getMaterialCode())
+            .append("materialName", getMaterialName())
+            .append("model", getModel())
+            .append("specification", getSpecification())
+            .append("inQuantity", getInQuantity())
+            .append("remark", getRemark())
+            .append("createBy", getCreateBy())
+            .append("createById", getCreateById())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateById", getUpdateById())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 248 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/StockInRecord.java

@@ -0,0 +1,248 @@
+package com.zkqy.amichi.domain;
+
+import com.zkqy.common.annotation.Excel;
+import com.zkqy.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+
+/**
+ * 半成品入库记录对象 stock_in_record
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+public class StockInRecord extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    private Long id;
+
+    /** 关联库存ID */
+    @Excel(name = "关联库存ID")
+    private Long inventoryId;
+
+    /** 物料编码 */
+    @Excel(name = "物料编码")
+    private String materialCode;
+
+    @Excel(name = "入库单编号")
+    private  String  rkdbh;
+
+
+    /** 物料名称 */
+    @Excel(name = "物料名称")
+    private String materialName;
+
+    /** 型号 */
+    @Excel(name = "型号")
+    private String model;
+
+    /** 规格 */
+    @Excel(name = "规格")
+    private String specification;
+
+    /** 入库数量 */
+    @Excel(name = "入库数量")
+    private Long inQuantity;
+
+    /** 操作人 */
+    @Excel(name = "操作人")
+    private String operator;
+
+    /** 单据号 */
+    @Excel(name = "单据号")
+    private String djh;
+
+    /** 单据序号 */
+    @Excel(name = "单据序号")
+    private String djIndex;
+
+    /** 一托盘数量 */
+    @Excel(name = "一托盘数量")
+    private String ytps;
+
+    /** 一共几个托盘 */
+    @Excel(name = "一共几个托盘")
+    private String tps;
+
+    /** 操作人ID */
+    @Excel(name = "操作人ID")
+    private Long createById;
+
+
+    /** 操作人ID */
+    @Excel(name = "操作人ID")
+    private Long updateById;
+
+    @Excel(name = "入库类型0:扫描入库 1:手动入库")
+    private  String InboundType;
+
+    public String getInboundType() {
+        return InboundType;
+    }
+
+    public void setInboundType(String inboundType) {
+        InboundType = inboundType;
+    }
+
+    public String getRkdbh() {
+        return rkdbh;
+    }
+
+    public void setRkdbh(String rkdbh) {
+        this.rkdbh = rkdbh;
+    }
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setInventoryId(Long inventoryId)
+    {
+        this.inventoryId = inventoryId;
+    }
+
+    public Long getInventoryId()
+    {
+        return inventoryId;
+    }
+    public void setMaterialCode(String materialCode)
+    {
+        this.materialCode = materialCode;
+    }
+
+    public String getMaterialCode()
+    {
+        return materialCode;
+    }
+    public void setMaterialName(String materialName)
+    {
+        this.materialName = materialName;
+    }
+
+    public String getMaterialName()
+    {
+        return materialName;
+    }
+    public void setModel(String model)
+    {
+        this.model = model;
+    }
+
+    public String getModel()
+    {
+        return model;
+    }
+    public void setSpecification(String specification)
+    {
+        this.specification = specification;
+    }
+
+    public String getSpecification()
+    {
+        return specification;
+    }
+    public void setInQuantity(Long inQuantity)
+    {
+        this.inQuantity = inQuantity;
+    }
+
+    public Long getInQuantity()
+    {
+        return inQuantity;
+    }
+    public void setOperator(String operator)
+    {
+        this.operator = operator;
+    }
+
+    public String getOperator()
+    {
+        return operator;
+    }
+    public void setDjh(String djh)
+    {
+        this.djh = djh;
+    }
+
+    public String getDjh()
+    {
+        return djh;
+    }
+    public void setDjIndex(String djIndex)
+    {
+        this.djIndex = djIndex;
+    }
+
+    public String getDjIndex()
+    {
+        return djIndex;
+    }
+    public void setYtps(String ytps)
+    {
+        this.ytps = ytps;
+    }
+
+    public String getYtps()
+    {
+        return ytps;
+    }
+    public void setTps(String tps)
+    {
+        this.tps = tps;
+    }
+
+    public String getTps()
+    {
+        return tps;
+    }
+    public void setCreateById(Long createById)
+    {
+        this.createById = createById;
+    }
+
+    public Long getCreateById()
+    {
+        return createById;
+    }
+    public void setUpdateById(Long updateById)
+    {
+        this.updateById = updateById;
+    }
+
+    public Long getUpdateById()
+    {
+        return updateById;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("inventoryId", getInventoryId())
+            .append("materialCode", getMaterialCode())
+            .append("materialName", getMaterialName())
+            .append("model", getModel())
+            .append("specification", getSpecification())
+            .append("inQuantity", getInQuantity())
+            .append("operator", getOperator())
+            .append("djh", getDjh())
+            .append("djIndex", getDjIndex())
+            .append("ytps", getYtps())
+            .append("tps", getTps())
+            .append("remark", getRemark())
+            .append("createBy", getCreateBy())
+            .append("createById", getCreateById())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateById", getUpdateById())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 249 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/StockOutRecord.java

@@ -0,0 +1,249 @@
+package com.zkqy.amichi.domain;
+
+import com.zkqy.common.annotation.Excel;
+import com.zkqy.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+
+/**
+ * 半成品出库记录对象 stock_out_record
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+public class StockOutRecord extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+    @Excel(name = "出库单编号")
+    private  String  rkdbh;
+
+    @Excel(name = "入库类型0:扫描出库 1:手动出库")
+    private  String InboundType;
+
+    public String getRkdbh() {
+        return rkdbh;
+    }
+
+    public void setRkdbh(String rkdbh) {
+        this.rkdbh = rkdbh;
+    }
+
+    public String getInboundType() {
+        return InboundType;
+    }
+
+    public void setInboundType(String inboundType) {
+        InboundType = inboundType;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /** 主键ID */
+    private Long id;
+
+    /** 关联库存ID */
+    @Excel(name = "关联库存ID")
+    private Long inventoryId;
+
+    /** 物料编码 */
+    @Excel(name = "物料编码")
+    private String materialCode;
+
+    /** 物料名称 */
+    @Excel(name = "物料名称")
+    private String materialName;
+
+    /** 型号 */
+    @Excel(name = "型号")
+    private String model;
+
+    /** 规格 */
+    @Excel(name = "规格")
+    private String specification;
+
+    /** 出库数量 */
+    @Excel(name = "出库数量")
+    private Long outQuantity;
+
+    /** 操作人 */
+    @Excel(name = "操作人")
+    private String operator;
+
+    /** 单据号 */
+    @Excel(name = "单据号")
+    private String djh;
+
+    /** 单据序号 */
+    @Excel(name = "单据序号")
+    private String djIndex;
+
+    /** 一托盘数量 */
+    @Excel(name = "一托盘数量")
+    private String ytps;
+
+    /** 一共几个托盘 */
+    @Excel(name = "一共几个托盘")
+    private String tps;
+
+    /** 操作人ID */
+    @Excel(name = "操作人ID")
+    private Long createById;
+
+    /** 操作人ID */
+    @Excel(name = "操作人ID")
+    private Long updateById;
+
+
+
+
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setInventoryId(Long inventoryId)
+    {
+        this.inventoryId = inventoryId;
+    }
+
+    public Long getInventoryId()
+    {
+        return inventoryId;
+    }
+    public void setMaterialCode(String materialCode)
+    {
+        this.materialCode = materialCode;
+    }
+
+    public String getMaterialCode()
+    {
+        return materialCode;
+    }
+    public void setMaterialName(String materialName)
+    {
+        this.materialName = materialName;
+    }
+
+    public String getMaterialName()
+    {
+        return materialName;
+    }
+    public void setModel(String model)
+    {
+        this.model = model;
+    }
+
+    public String getModel()
+    {
+        return model;
+    }
+    public void setSpecification(String specification)
+    {
+        this.specification = specification;
+    }
+
+    public String getSpecification()
+    {
+        return specification;
+    }
+    public void setOutQuantity(Long outQuantity)
+    {
+        this.outQuantity = outQuantity;
+    }
+
+    public Long getOutQuantity()
+    {
+        return outQuantity;
+    }
+    public void setOperator(String operator)
+    {
+        this.operator = operator;
+    }
+
+    public String getOperator()
+    {
+        return operator;
+    }
+    public void setDjh(String djh)
+    {
+        this.djh = djh;
+    }
+
+    public String getDjh()
+    {
+        return djh;
+    }
+    public void setDjIndex(String djIndex)
+    {
+        this.djIndex = djIndex;
+    }
+
+    public String getDjIndex()
+    {
+        return djIndex;
+    }
+    public void setYtps(String ytps)
+    {
+        this.ytps = ytps;
+    }
+
+    public String getYtps()
+    {
+        return ytps;
+    }
+    public void setTps(String tps)
+    {
+        this.tps = tps;
+    }
+
+    public String getTps()
+    {
+        return tps;
+    }
+    public void setCreateById(Long createById)
+    {
+        this.createById = createById;
+    }
+
+    public Long getCreateById()
+    {
+        return createById;
+    }
+    public void setUpdateById(Long updateById)
+    {
+        this.updateById = updateById;
+    }
+
+    public Long getUpdateById()
+    {
+        return updateById;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("inventoryId", getInventoryId())
+            .append("materialCode", getMaterialCode())
+            .append("materialName", getMaterialName())
+            .append("model", getModel())
+            .append("specification", getSpecification())
+            .append("outQuantity", getOutQuantity())
+            .append("operator", getOperator())
+            .append("djh", getDjh())
+            .append("djIndex", getDjIndex())
+            .append("ytps", getYtps())
+            .append("tps", getTps())
+            .append("remark", getRemark())
+            .append("createBy", getCreateBy())
+            .append("createById", getCreateById())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateById", getUpdateById())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

+ 34 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/vo/StockInOrderAndOrderDetail.java

@@ -0,0 +1,34 @@
+package com.zkqy.amichi.domain.vo;
+
+import com.zkqy.amichi.domain.StockInOrder;
+import com.zkqy.amichi.domain.StockInOrderDetail;
+import com.zkqy.amichi.domain.StockInRecord;
+
+import java.util.List;
+
+public class StockInOrderAndOrderDetail extends StockInOrder {
+
+    /**
+     * 入库单明细信息
+     */
+    private List<StockInOrderDetail> orderDetailList;
+
+
+    private List<StockInOrderDetail> detailList;
+
+    public List<StockInOrderDetail> getDetailList() {
+        return detailList;
+    }
+
+    public void setDetailList(List<StockInOrderDetail> detailList) {
+        this.detailList = detailList;
+    }
+
+    public List<StockInOrderDetail> getOrderDetailList() {
+        return orderDetailList;
+    }
+
+    public void setOrderDetailList(List<StockInOrderDetail> orderDetailList) {
+        this.orderDetailList = orderDetailList;
+    }
+}

+ 63 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/mapper/ErOrderInfoMapper.java

@@ -0,0 +1,63 @@
+package com.zkqy.amichi.mapper;
+
+import java.util.List;
+import com.zkqy.amichi.domain.ErOrderInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * towScanMapper接口
+ *
+ * @author ruoyi
+ * @date 2025-05-19
+ */
+@Mapper
+public interface ErOrderInfoMapper
+{
+    /**
+     * 查询towScan
+     *
+     * @param id towScan主键
+     * @return towScan
+     */
+    public ErOrderInfo selectErOrderInfoById(Long id);
+
+    /**
+     * 查询towScan列表
+     *
+     * @param erOrderInfo towScan
+     * @return towScan集合
+     */
+    public List<ErOrderInfo> selectErOrderInfoList(ErOrderInfo erOrderInfo);
+
+    /**
+     * 新增towScan
+     *
+     * @param erOrderInfo towScan
+     * @return 结果
+     */
+    public int insertErOrderInfo(ErOrderInfo erOrderInfo);
+
+    /**
+     * 修改towScan
+     *
+     * @param erOrderInfo towScan
+     * @return 结果
+     */
+    public int updateErOrderInfo(ErOrderInfo erOrderInfo);
+
+    /**
+     * 删除towScan
+     *
+     * @param id towScan主键
+     * @return 结果
+     */
+    public int deleteErOrderInfoById(Long id);
+
+    /**
+     * 批量删除towScan
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteErOrderInfoByIds(Long[] ids);
+}

+ 12 - 8
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/mapper/IndoorPlanInformationMapper.java

@@ -2,18 +2,20 @@ package com.zkqy.amichi.mapper;
 
 import java.util.List;
 import com.zkqy.amichi.domain.IndoorPlanInformation;
+import org.apache.ibatis.annotations.Mapper;
 
 /**
  * 场内计划信息:记录场内生产计划相关的详细信息Mapper接口
- * 
+ *
  * @author ruoyi
  * @date 2025-02-11
  */
-public interface IndoorPlanInformationMapper 
+@Mapper
+public interface IndoorPlanInformationMapper
 {
     /**
      * 查询场内计划信息:记录场内生产计划相关的详细信息
-     * 
+     *
      * @param id 场内计划信息:记录场内生产计划相关的详细信息主键
      * @return 场内计划信息:记录场内生产计划相关的详细信息
      */
@@ -21,7 +23,7 @@ public interface IndoorPlanInformationMapper
 
     /**
      * 查询场内计划信息:记录场内生产计划相关的详细信息列表
-     * 
+     *
      * @param indoorPlanInformation 场内计划信息:记录场内生产计划相关的详细信息
      * @return 场内计划信息:记录场内生产计划相关的详细信息集合
      */
@@ -29,7 +31,7 @@ public interface IndoorPlanInformationMapper
 
     /**
      * 新增场内计划信息:记录场内生产计划相关的详细信息
-     * 
+     *
      * @param indoorPlanInformation 场内计划信息:记录场内生产计划相关的详细信息
      * @return 结果
      */
@@ -37,7 +39,7 @@ public interface IndoorPlanInformationMapper
 
     /**
      * 修改场内计划信息:记录场内生产计划相关的详细信息
-     * 
+     *
      * @param indoorPlanInformation 场内计划信息:记录场内生产计划相关的详细信息
      * @return 结果
      */
@@ -45,7 +47,7 @@ public interface IndoorPlanInformationMapper
 
     /**
      * 删除场内计划信息:记录场内生产计划相关的详细信息
-     * 
+     *
      * @param id 场内计划信息:记录场内生产计划相关的详细信息主键
      * @return 结果
      */
@@ -53,9 +55,11 @@ public interface IndoorPlanInformationMapper
 
     /**
      * 批量删除场内计划信息:记录场内生产计划相关的详细信息
-     * 
+     *
      * @param ids 需要删除的数据主键集合
      * @return 结果
      */
     public int deleteIndoorPlanInformationByIds(Long[] ids);
+
+    List<IndoorPlanInformation> selectIndoorPlanInformationByIdList(List<String> id);
 }

+ 72 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/mapper/MaterialsInventoryMapper.java

@@ -0,0 +1,72 @@
+package com.zkqy.amichi.mapper;
+
+import java.util.List;
+import com.zkqy.amichi.domain.MaterialsInventory;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 半成品库存Mapper接口
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@Mapper
+public interface MaterialsInventoryMapper
+{
+    /**
+     * 查询半成品库存
+     *
+     * @param id 半成品库存主键
+     * @return 半成品库存
+     */
+    public MaterialsInventory selectMaterialsInventoryById(Long id);
+
+    /**
+     * 查询半成品库存列表
+     *
+     * @param materialsInventory 半成品库存
+     * @return 半成品库存集合
+     */
+    public List<MaterialsInventory> selectMaterialsInventoryList(MaterialsInventory materialsInventory);
+
+    /**
+     * 新增半成品库存
+     *
+     * @param materialsInventory 半成品库存
+     * @return 结果
+     */
+    public int insertMaterialsInventory(MaterialsInventory materialsInventory);
+
+    /**
+     * 修改半成品库存
+     *
+     * @param materialsInventory 半成品库存
+     * @return 结果
+     */
+    public int updateMaterialsInventory(MaterialsInventory materialsInventory);
+
+    /**
+     * 删除半成品库存
+     *
+     * @param id 半成品库存主键
+     * @return 结果
+     */
+    public int deleteMaterialsInventoryById(Long id);
+
+    /**
+     * 批量删除半成品库存
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteMaterialsInventoryByIds(Long[] ids);
+
+    /**
+     * 根据物料编码修改库存数量
+     * @param materialsInventoryUpdate
+     * @return
+     */
+    public  int updateMaterialsInventoryByMaterialCode(MaterialsInventory materialsInventoryUpdate);
+
+
+}

+ 65 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/mapper/StockInOrderDetailMapper.java

@@ -0,0 +1,65 @@
+package com.zkqy.amichi.mapper;
+
+import java.util.List;
+import com.zkqy.amichi.domain.StockInOrderDetail;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 半成品入库单明细Mapper接口
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@Mapper
+public interface StockInOrderDetailMapper
+{
+    /**
+     * 查询半成品入库单明细
+     *
+     * @param id 半成品入库单明细主键
+     * @return 半成品入库单明细
+     */
+    public StockInOrderDetail selectStockInOrderDetailById(Long id);
+
+    /**
+     * 查询半成品入库单明细列表
+     *
+     * @param stockInOrderDetail 半成品入库单明细
+     * @return 半成品入库单明细集合
+     */
+    public List<StockInOrderDetail> selectStockInOrderDetailList(StockInOrderDetail stockInOrderDetail);
+
+    /**
+     * 新增半成品入库单明细
+     *
+     * @param stockInOrderDetail 半成品入库单明细
+     * @return 结果
+     */
+    public int insertStockInOrderDetail(StockInOrderDetail stockInOrderDetail);
+
+    /**
+     * 修改半成品入库单明细
+     *
+     * @param stockInOrderDetail 半成品入库单明细
+     * @return 结果
+     */
+    public int updateStockInOrderDetail(StockInOrderDetail stockInOrderDetail);
+
+    /**
+     * 删除半成品入库单明细
+     *
+     * @param id 半成品入库单明细主键
+     * @return 结果
+     */
+    public int deleteStockInOrderDetailById(Long id);
+
+    /**
+     * 批量删除半成品入库单明细
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteStockInOrderDetailByIds(List<Long> ids);
+
+    public  int  deleteStockInOrderDetailByStockInOrderId(Long id);
+}

+ 64 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/mapper/StockInOrderMapper.java

@@ -0,0 +1,64 @@
+package com.zkqy.amichi.mapper;
+
+import java.util.List;
+import com.zkqy.amichi.domain.StockInOrder;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 半成品入库单主Mapper接口
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@Mapper
+public interface StockInOrderMapper
+{
+    /**
+     * 查询半成品入库单主
+     *
+     * @param id 半成品入库单主主键
+     * @return 半成品入库单主
+     */
+    public StockInOrder selectStockInOrderById(@Param("id") Long id);
+
+    /**
+     * 查询半成品入库单主列表
+     *
+     * @param stockInOrder 半成品入库单主
+     * @return 半成品入库单主集合
+     */
+    public List<StockInOrder> selectStockInOrderList(StockInOrder stockInOrder);
+
+    /**
+     * 新增半成品入库单主
+     *
+     * @param stockInOrder 半成品入库单主
+     * @return 结果
+     */
+    public int insertStockInOrder(StockInOrder stockInOrder);
+
+    /**
+     * 修改半成品入库单主
+     *
+     * @param stockInOrder 半成品入库单主
+     * @return 结果
+     */
+    public int updateStockInOrder(StockInOrder stockInOrder);
+
+    /**
+     * 删除半成品入库单主
+     *
+     * @param id 半成品入库单主主键
+     * @return 结果
+     */
+    public int deleteStockInOrderById(Long id);
+
+    /**
+     * 批量删除半成品入库单主
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteStockInOrderByIds(Long[] ids);
+}

+ 70 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/mapper/StockInRecordMapper.java

@@ -0,0 +1,70 @@
+package com.zkqy.amichi.mapper;
+
+import java.util.List;
+import com.zkqy.amichi.domain.StockInRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 半成品入库记录Mapper接口
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@Mapper
+public interface StockInRecordMapper
+{
+    /**
+     * 查询半成品入库记录
+     *
+     * @param id 半成品入库记录主键
+     * @return 半成品入库记录
+     */
+    public StockInRecord selectStockInRecordById(Long id);
+
+    /**
+     * 查询半成品入库记录列表
+     *
+     * @param stockInRecord 半成品入库记录
+     * @return 半成品入库记录集合
+     */
+    public List<StockInRecord> selectStockInRecordList(StockInRecord stockInRecord);
+
+    /**
+     * 新增半成品入库记录
+     *
+     * @param stockInRecord 半成品入库记录
+     * @return 结果
+     */
+    public int insertStockInRecord(StockInRecord stockInRecord);
+
+    /**
+     * 修改半成品入库记录
+     *
+     * @param stockInRecord 半成品入库记录
+     * @return 结果
+     */
+    public int updateStockInRecord(StockInRecord stockInRecord);
+
+    /**
+     * 删除半成品入库记录
+     *
+     * @param id 半成品入库记录主键
+     * @return 结果
+     */
+    public int deleteStockInRecordById(Long id);
+
+    /**
+     * 批量删除半成品入库记录
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteStockInRecordByIds(Long[] ids);
+
+    /**
+     * 根据入库单id删除对应的入库数据
+     * @param id
+     * @return
+     */
+    int deleteStockInRecordByRkdbh(String id);
+}

+ 70 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/mapper/StockOutRecordMapper.java

@@ -0,0 +1,70 @@
+package com.zkqy.amichi.mapper;
+
+import java.util.List;
+import com.zkqy.amichi.domain.StockOutRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 半成品出库记录Mapper接口
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@Mapper
+public interface StockOutRecordMapper
+{
+    /**
+     * 查询半成品出库记录
+     *
+     * @param id 半成品出库记录主键
+     * @return 半成品出库记录
+     */
+    public StockOutRecord selectStockOutRecordById(Long id);
+
+    /**
+     * 查询半成品出库记录列表
+     *
+     * @param stockOutRecord 半成品出库记录
+     * @return 半成品出库记录集合
+     */
+    public List<StockOutRecord> selectStockOutRecordList(StockOutRecord stockOutRecord);
+
+    /**
+     * 新增半成品出库记录
+     *
+     * @param stockOutRecord 半成品出库记录
+     * @return 结果
+     */
+    public int insertStockOutRecord(StockOutRecord stockOutRecord);
+
+    /**
+     * 修改半成品出库记录
+     *
+     * @param stockOutRecord 半成品出库记录
+     * @return 结果
+     */
+    public int updateStockOutRecord(StockOutRecord stockOutRecord);
+
+    /**
+     * 删除半成品出库记录
+     *
+     * @param id 半成品出库记录主键
+     * @return 结果
+     */
+    public int deleteStockOutRecordById(Long id);
+
+    /**
+     * 批量删除半成品出库记录
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteStockOutRecordByIds(Long[] ids);
+
+    /**
+     * 根据入库单编号删除日志信息
+     * @param orderNo
+     * @return
+     */
+    int  deleteStockInRecordByRkdbh(String orderNo);
+}

+ 61 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IErOrderInfoService.java

@@ -0,0 +1,61 @@
+package com.zkqy.amichi.service;
+
+import java.util.List;
+import com.zkqy.amichi.domain.ErOrderInfo;
+
+/**
+ * towScanService接口
+ * 
+ * @author ruoyi
+ * @date 2025-05-19
+ */
+public interface IErOrderInfoService 
+{
+    /**
+     * 查询towScan
+     * 
+     * @param id towScan主键
+     * @return towScan
+     */
+    public ErOrderInfo selectErOrderInfoById(Long id);
+
+    /**
+     * 查询towScan列表
+     * 
+     * @param erOrderInfo towScan
+     * @return towScan集合
+     */
+    public List<ErOrderInfo> selectErOrderInfoList(ErOrderInfo erOrderInfo);
+
+    /**
+     * 新增towScan
+     * 
+     * @param erOrderInfo towScan
+     * @return 结果
+     */
+    public int insertErOrderInfo(ErOrderInfo erOrderInfo);
+
+    /**
+     * 修改towScan
+     * 
+     * @param erOrderInfo towScan
+     * @return 结果
+     */
+    public int updateErOrderInfo(ErOrderInfo erOrderInfo);
+
+    /**
+     * 批量删除towScan
+     * 
+     * @param ids 需要删除的towScan主键集合
+     * @return 结果
+     */
+    public int deleteErOrderInfoByIds(Long[] ids);
+
+    /**
+     * 删除towScan信息
+     * 
+     * @param id towScan主键
+     * @return 结果
+     */
+    public int deleteErOrderInfoById(Long id);
+}

+ 10 - 8
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IIndoorPlanInformationService.java

@@ -5,23 +5,25 @@ import com.zkqy.amichi.domain.IndoorPlanInformation;
 
 /**
  * 场内计划信息:记录场内生产计划相关的详细信息Service接口
- * 
+ *
  * @author ruoyi
  * @date 2025-02-11
  */
-public interface IIndoorPlanInformationService 
+public interface IIndoorPlanInformationService
 {
     /**
      * 查询场内计划信息:记录场内生产计划相关的详细信息
-     * 
+     *
      * @param id 场内计划信息:记录场内生产计划相关的详细信息主键
      * @return 场内计划信息:记录场内生产计划相关的详细信息
      */
     public IndoorPlanInformation selectIndoorPlanInformationById(Long id);
 
+    public List<IndoorPlanInformation> selectIndoorPlanInformationByIdList(List<String> id);
+
     /**
      * 查询场内计划信息:记录场内生产计划相关的详细信息列表
-     * 
+     *
      * @param indoorPlanInformation 场内计划信息:记录场内生产计划相关的详细信息
      * @return 场内计划信息:记录场内生产计划相关的详细信息集合
      */
@@ -29,7 +31,7 @@ public interface IIndoorPlanInformationService
 
     /**
      * 新增场内计划信息:记录场内生产计划相关的详细信息
-     * 
+     *
      * @param indoorPlanInformation 场内计划信息:记录场内生产计划相关的详细信息
      * @return 结果
      */
@@ -37,7 +39,7 @@ public interface IIndoorPlanInformationService
 
     /**
      * 修改场内计划信息:记录场内生产计划相关的详细信息
-     * 
+     *
      * @param indoorPlanInformation 场内计划信息:记录场内生产计划相关的详细信息
      * @return 结果
      */
@@ -45,7 +47,7 @@ public interface IIndoorPlanInformationService
 
     /**
      * 批量删除场内计划信息:记录场内生产计划相关的详细信息
-     * 
+     *
      * @param ids 需要删除的场内计划信息:记录场内生产计划相关的详细信息主键集合
      * @return 结果
      */
@@ -53,7 +55,7 @@ public interface IIndoorPlanInformationService
 
     /**
      * 删除场内计划信息:记录场内生产计划相关的详细信息信息
-     * 
+     *
      * @param id 场内计划信息:记录场内生产计划相关的详细信息主键
      * @return 结果
      */

+ 9 - 9
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IIndoorProductionGroupInformationService.java

@@ -9,15 +9,15 @@ import com.zkqy.amichi.domain.vo.IndoorProductionGroupInformationTreeVo;
 
 /**
  * 分组信息:用于记录各个分组的基本信息Service接口
- * 
+ *
  * @author ruoyi
  * @date 2025-02-11
  */
-public interface IIndoorProductionGroupInformationService 
+public interface IIndoorProductionGroupInformationService
 {
     /**
      * 查询分组信息:用于记录各个分组的基本信息
-     * 
+     *
      * @param id 分组信息:用于记录各个分组的基本信息主键
      * @return 分组信息:用于记录各个分组的基本信息
      */
@@ -25,7 +25,7 @@ public interface IIndoorProductionGroupInformationService
 
     /**
      * 查询分组信息:用于记录各个分组的基本信息列表
-     * 
+     *
      * @param indoorProductionGroupInformation 分组信息:用于记录各个分组的基本信息
      * @return 分组信息:用于记录各个分组的基本信息集合
      */
@@ -33,7 +33,7 @@ public interface IIndoorProductionGroupInformationService
 
     /**
      * 新增分组信息:用于记录各个分组的基本信息
-     * 
+     *
      * @param indoorProductionGroupInformation 分组信息:用于记录各个分组的基本信息
      * @return 结果
      */
@@ -41,7 +41,7 @@ public interface IIndoorProductionGroupInformationService
 
     /**
      * 修改分组信息:用于记录各个分组的基本信息
-     * 
+     *
      * @param indoorProductionGroupInformation 分组信息:用于记录各个分组的基本信息
      * @return 结果
      */
@@ -49,7 +49,7 @@ public interface IIndoorProductionGroupInformationService
 
     /**
      * 批量删除分组信息:用于记录各个分组的基本信息
-     * 
+     *
      * @param ids 需要删除的分组信息:用于记录各个分组的基本信息主键集合
      * @return 结果
      */
@@ -57,7 +57,7 @@ public interface IIndoorProductionGroupInformationService
 
     /**
      * 删除分组信息:用于记录各个分组的基本信息信息
-     * 
+     *
      * @param id 分组信息:用于记录各个分组的基本信息主键
      * @return 结果
      */
@@ -68,7 +68,7 @@ public interface IIndoorProductionGroupInformationService
      * @param id
      * @return
      */
-    List<IndoorProductionGroupInformationTreeVo> treeList(Long id);
+    List<IndoorProductionGroupInformationTreeVo> treeList(Long id,String groupName);
 
     /**
      * 导入产品信息

+ 61 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IMaterialsInventoryService.java

@@ -0,0 +1,61 @@
+package com.zkqy.amichi.service;
+
+import java.util.List;
+import com.zkqy.amichi.domain.MaterialsInventory;
+
+/**
+ * 半成品库存Service接口
+ * 
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+public interface IMaterialsInventoryService 
+{
+    /**
+     * 查询半成品库存
+     * 
+     * @param id 半成品库存主键
+     * @return 半成品库存
+     */
+    public MaterialsInventory selectMaterialsInventoryById(Long id);
+
+    /**
+     * 查询半成品库存列表
+     * 
+     * @param materialsInventory 半成品库存
+     * @return 半成品库存集合
+     */
+    public List<MaterialsInventory> selectMaterialsInventoryList(MaterialsInventory materialsInventory);
+
+    /**
+     * 新增半成品库存
+     * 
+     * @param materialsInventory 半成品库存
+     * @return 结果
+     */
+    public int insertMaterialsInventory(MaterialsInventory materialsInventory);
+
+    /**
+     * 修改半成品库存
+     * 
+     * @param materialsInventory 半成品库存
+     * @return 结果
+     */
+    public int updateMaterialsInventory(MaterialsInventory materialsInventory);
+
+    /**
+     * 批量删除半成品库存
+     * 
+     * @param ids 需要删除的半成品库存主键集合
+     * @return 结果
+     */
+    public int deleteMaterialsInventoryByIds(Long[] ids);
+
+    /**
+     * 删除半成品库存信息
+     * 
+     * @param id 半成品库存主键
+     * @return 结果
+     */
+    public int deleteMaterialsInventoryById(Long id);
+}

+ 61 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IStockInOrderDetailService.java

@@ -0,0 +1,61 @@
+package com.zkqy.amichi.service;
+
+import java.util.List;
+import com.zkqy.amichi.domain.StockInOrderDetail;
+
+/**
+ * 半成品入库单明细Service接口
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+public interface IStockInOrderDetailService
+{
+    /**
+     * 查询半成品入库单明细
+     *
+     * @param id 半成品入库单明细主键
+     * @return 半成品入库单明细
+     */
+    public StockInOrderDetail selectStockInOrderDetailById(Long id);
+
+    /**
+     * 查询半成品入库单明细列表
+     *
+     * @param stockInOrderDetail 半成品入库单明细
+     * @return 半成品入库单明细集合
+     */
+    public List<StockInOrderDetail> selectStockInOrderDetailList(StockInOrderDetail stockInOrderDetail);
+
+    /**
+     * 新增半成品入库单明细
+     *
+     * @param stockInOrderDetail 半成品入库单明细
+     * @return 结果
+     */
+    public int insertStockInOrderDetail(StockInOrderDetail stockInOrderDetail);
+
+    /**
+     * 修改半成品入库单明细
+     *
+     * @param stockInOrderDetail 半成品入库单明细
+     * @return 结果
+     */
+    public int updateStockInOrderDetail(StockInOrderDetail stockInOrderDetail);
+
+    /**
+     * 批量删除半成品入库单明细
+     *
+     * @param ids 需要删除的半成品入库单明细主键集合
+     * @return 结果
+     */
+    public int deleteStockInOrderDetailByIds(List<Long> ids);
+
+    /**
+     * 删除半成品入库单明细信息
+     *
+     * @param id 半成品入库单明细主键
+     * @return 结果
+     */
+    public int deleteStockInOrderDetailById(Long id);
+}

+ 77 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IStockInOrderService.java

@@ -0,0 +1,77 @@
+package com.zkqy.amichi.service;
+
+import java.util.List;
+import com.zkqy.amichi.domain.StockInOrder;
+import com.zkqy.amichi.domain.vo.StockInOrderAndOrderDetail;
+import com.zkqy.common.core.domain.AjaxResult;
+
+/**
+ * 半成品入库单主Service接口
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+public interface IStockInOrderService
+{
+    /**
+     * 查询半成品入库单主
+     *
+     * @param id 半成品入库单主主键
+     * @return 半成品入库单主
+     */
+    public StockInOrder selectStockInOrderById(Long id);
+
+    /**
+     * 查询半成品入库单主列表
+     *
+     * @param stockInOrder 半成品入库单主
+     * @return 半成品入库单主集合
+     */
+    public List<StockInOrder> selectStockInOrderList(StockInOrder stockInOrder);
+
+    /**
+     * 新增半成品入库单主
+     *
+     * @param stockInOrder 半成品入库单主
+     * @return 结果
+     */
+    public int insertStockInOrder(StockInOrder stockInOrder);
+
+    /**
+     * 修改半成品入库单主
+     *
+     * @param stockInOrder 半成品入库单主
+     * @return 结果
+     */
+    public AjaxResult updateStockInOrder(StockInOrderAndOrderDetail stockInOrder);
+
+    /**
+     * 批量删除半成品入库单主
+     *
+     * @param ids 需要删除的半成品入库单主主键集合
+     * @return 结果
+     */
+    public int deleteStockInOrderByIds(Long[] ids);
+
+    /**
+     * 删除半成品入库单主信息
+     *
+     * @param id 半成品入库单主主键
+     * @return 结果
+     */
+    public int deleteStockInOrderById(Long id);
+
+    /**
+     * 添加入库单and添加订单明细
+     * @param stockInOrder
+     * @return
+     */
+    int insertStockInOrderAndDetail(StockInOrderAndOrderDetail stockInOrder);
+
+    /**
+     * 添加入库单and添加订单明细
+     * @param stockInOrder
+     * @return
+     */
+    AjaxResult insertStockIOutOrderAndDetail(StockInOrderAndOrderDetail stockInOrder);
+}

+ 61 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IStockInRecordService.java

@@ -0,0 +1,61 @@
+package com.zkqy.amichi.service;
+
+import java.util.List;
+import com.zkqy.amichi.domain.StockInRecord;
+
+/**
+ * 半成品入库记录Service接口
+ * 
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+public interface IStockInRecordService 
+{
+    /**
+     * 查询半成品入库记录
+     * 
+     * @param id 半成品入库记录主键
+     * @return 半成品入库记录
+     */
+    public StockInRecord selectStockInRecordById(Long id);
+
+    /**
+     * 查询半成品入库记录列表
+     * 
+     * @param stockInRecord 半成品入库记录
+     * @return 半成品入库记录集合
+     */
+    public List<StockInRecord> selectStockInRecordList(StockInRecord stockInRecord);
+
+    /**
+     * 新增半成品入库记录
+     * 
+     * @param stockInRecord 半成品入库记录
+     * @return 结果
+     */
+    public int insertStockInRecord(StockInRecord stockInRecord);
+
+    /**
+     * 修改半成品入库记录
+     * 
+     * @param stockInRecord 半成品入库记录
+     * @return 结果
+     */
+    public int updateStockInRecord(StockInRecord stockInRecord);
+
+    /**
+     * 批量删除半成品入库记录
+     * 
+     * @param ids 需要删除的半成品入库记录主键集合
+     * @return 结果
+     */
+    public int deleteStockInRecordByIds(Long[] ids);
+
+    /**
+     * 删除半成品入库记录信息
+     * 
+     * @param id 半成品入库记录主键
+     * @return 结果
+     */
+    public int deleteStockInRecordById(Long id);
+}

+ 61 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IStockOutRecordService.java

@@ -0,0 +1,61 @@
+package com.zkqy.amichi.service;
+
+import java.util.List;
+import com.zkqy.amichi.domain.StockOutRecord;
+
+/**
+ * 半成品出库记录Service接口
+ * 
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+public interface IStockOutRecordService 
+{
+    /**
+     * 查询半成品出库记录
+     * 
+     * @param id 半成品出库记录主键
+     * @return 半成品出库记录
+     */
+    public StockOutRecord selectStockOutRecordById(Long id);
+
+    /**
+     * 查询半成品出库记录列表
+     * 
+     * @param stockOutRecord 半成品出库记录
+     * @return 半成品出库记录集合
+     */
+    public List<StockOutRecord> selectStockOutRecordList(StockOutRecord stockOutRecord);
+
+    /**
+     * 新增半成品出库记录
+     * 
+     * @param stockOutRecord 半成品出库记录
+     * @return 结果
+     */
+    public int insertStockOutRecord(StockOutRecord stockOutRecord);
+
+    /**
+     * 修改半成品出库记录
+     * 
+     * @param stockOutRecord 半成品出库记录
+     * @return 结果
+     */
+    public int updateStockOutRecord(StockOutRecord stockOutRecord);
+
+    /**
+     * 批量删除半成品出库记录
+     * 
+     * @param ids 需要删除的半成品出库记录主键集合
+     * @return 结果
+     */
+    public int deleteStockOutRecordByIds(Long[] ids);
+
+    /**
+     * 删除半成品出库记录信息
+     * 
+     * @param id 半成品出库记录主键
+     * @return 结果
+     */
+    public int deleteStockOutRecordById(Long id);
+}

+ 97 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/ErOrderInfoServiceImpl.java

@@ -0,0 +1,97 @@
+package com.zkqy.amichi.service.impl;
+
+import java.util.List;
+
+import com.zkqy.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.zkqy.amichi.mapper.ErOrderInfoMapper;
+import com.zkqy.amichi.domain.ErOrderInfo;
+import com.zkqy.amichi.service.IErOrderInfoService;
+
+/**
+ * towScanService业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-05-19
+ */
+@Service
+public class ErOrderInfoServiceImpl implements IErOrderInfoService
+{
+    @Autowired
+    private ErOrderInfoMapper erOrderInfoMapper;
+
+    /**
+     * 查询towScan
+     *
+     * @param id towScan主键
+     * @return towScan
+     */
+    @Override
+    public ErOrderInfo selectErOrderInfoById(Long id)
+    {
+        return erOrderInfoMapper.selectErOrderInfoById(id);
+    }
+
+    /**
+     * 查询towScan列表
+     *
+     * @param erOrderInfo towScan
+     * @return towScan
+     */
+    @Override
+    public List<ErOrderInfo> selectErOrderInfoList(ErOrderInfo erOrderInfo)
+    {
+        return erOrderInfoMapper.selectErOrderInfoList(erOrderInfo);
+    }
+
+    /**
+     * 新增towScan
+     *
+     * @param erOrderInfo towScan
+     * @return 结果
+     */
+    @Override
+    public int insertErOrderInfo(ErOrderInfo erOrderInfo)
+    {
+        erOrderInfo.setCreateTime(DateUtils.getNowDate());
+        return erOrderInfoMapper.insertErOrderInfo(erOrderInfo);
+    }
+
+    /**
+     * 修改towScan
+     *
+     * @param erOrderInfo towScan
+     * @return 结果
+     */
+    @Override
+    public int updateErOrderInfo(ErOrderInfo erOrderInfo)
+    {
+        erOrderInfo.setUpdateTime(DateUtils.getNowDate());
+        return erOrderInfoMapper.updateErOrderInfo(erOrderInfo);
+    }
+
+    /**
+     * 批量删除towScan
+     *
+     * @param ids 需要删除的towScan主键
+     * @return 结果
+     */
+    @Override
+    public int deleteErOrderInfoByIds(Long[] ids)
+    {
+        return erOrderInfoMapper.deleteErOrderInfoByIds(ids);
+    }
+
+    /**
+     * 删除towScan信息
+     *
+     * @param id towScan主键
+     * @return 结果
+     */
+    @Override
+    public int deleteErOrderInfoById(Long id)
+    {
+        return erOrderInfoMapper.deleteErOrderInfoById(id);
+    }
+}

+ 19 - 9
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/IndoorPlanInformationServiceImpl.java

@@ -1,5 +1,7 @@
 package com.zkqy.amichi.service.impl;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
 import java.util.Random;
 import java.util.UUID;
@@ -12,19 +14,19 @@ import com.zkqy.amichi.service.IIndoorPlanInformationService;
 
 /**
  * 场内计划信息:记录场内生产计划相关的详细信息Service业务层处理
- * 
+ *
  * @author ruoyi
  * @date 2025-02-11
  */
 @Service
-public class IndoorPlanInformationServiceImpl implements IIndoorPlanInformationService 
+public class IndoorPlanInformationServiceImpl implements IIndoorPlanInformationService
 {
     @Autowired
     private IndoorPlanInformationMapper indoorPlanInformationMapper;
 
     /**
      * 查询场内计划信息:记录场内生产计划相关的详细信息
-     * 
+     *
      * @param id 场内计划信息:记录场内生产计划相关的详细信息主键
      * @return 场内计划信息:记录场内生产计划相关的详细信息
      */
@@ -34,9 +36,15 @@ public class IndoorPlanInformationServiceImpl implements IIndoorPlanInformationS
         return indoorPlanInformationMapper.selectIndoorPlanInformationById(id);
     }
 
+    @Override
+    public List<IndoorPlanInformation> selectIndoorPlanInformationByIdList(List<String> id)
+    {
+        return indoorPlanInformationMapper.selectIndoorPlanInformationByIdList(id);
+    }
+
     /**
      * 查询场内计划信息:记录场内生产计划相关的详细信息列表
-     * 
+     *
      * @param indoorPlanInformation 场内计划信息:记录场内生产计划相关的详细信息
      * @return 场内计划信息:记录场内生产计划相关的详细信息
      */
@@ -49,7 +57,7 @@ public class IndoorPlanInformationServiceImpl implements IIndoorPlanInformationS
 
     /**
      * 新增场内计划信息:记录场内生产计划相关的详细信息
-     * 
+     *
      * @param indoorPlanInformation 场内计划信息:记录场内生产计划相关的详细信息
      * @return 结果
      */
@@ -59,13 +67,15 @@ public class IndoorPlanInformationServiceImpl implements IIndoorPlanInformationS
         //任务状态
         indoorPlanInformation.setPlanStatus("1");
         //任务id
-        indoorPlanInformation.setTaskId(UUID.randomUUID().toString());
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        String taskId = sdf.format(new Date());
+        indoorPlanInformation.setTaskId(taskId);
         return indoorPlanInformationMapper.insertIndoorPlanInformation(indoorPlanInformation);
     }
 
     /**
      * 修改场内计划信息:记录场内生产计划相关的详细信息
-     * 
+     *
      * @param indoorPlanInformation 场内计划信息:记录场内生产计划相关的详细信息
      * @return 结果
      */
@@ -77,7 +87,7 @@ public class IndoorPlanInformationServiceImpl implements IIndoorPlanInformationS
 
     /**
      * 批量删除场内计划信息:记录场内生产计划相关的详细信息
-     * 
+     *
      * @param ids 需要删除的场内计划信息:记录场内生产计划相关的详细信息主键
      * @return 结果
      */
@@ -89,7 +99,7 @@ public class IndoorPlanInformationServiceImpl implements IIndoorPlanInformationS
 
     /**
      * 删除场内计划信息:记录场内生产计划相关的详细信息信息
-     * 
+     *
      * @param id 场内计划信息:记录场内生产计划相关的详细信息主键
      * @return 结果
      */

+ 23 - 9
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/IndoorProductionGroupInformationServiceImpl.java

@@ -7,6 +7,7 @@ import com.zkqy.amichi.domain.IndoorMaterialInformation;
 import com.zkqy.amichi.domain.vo.IndoorProductionGroupInformationTreeVo;
 import com.zkqy.amichi.domain.vo.SemiFinishedMaterialListVo;
 import com.zkqy.amichi.mapper.IndoorMaterialInformationMapper;
+import com.zkqy.common.utils.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -16,12 +17,12 @@ import com.zkqy.amichi.service.IIndoorProductionGroupInformationService;
 
 /**
  * 分组信息:用于记录各个分组的基本信息Service业务层处理
- * 
+ *
  * @author ruoyi
  * @date 2025-02-11
  */
 @Service
-public class IndoorProductionGroupInformationServiceImpl implements IIndoorProductionGroupInformationService 
+public class IndoorProductionGroupInformationServiceImpl implements IIndoorProductionGroupInformationService
 {
     @Autowired
     private IndoorProductionGroupInformationMapper indoorProductionGroupInformationMapper;
@@ -31,7 +32,7 @@ public class IndoorProductionGroupInformationServiceImpl implements IIndoorProdu
 
     /**
      * 查询分组信息:用于记录各个分组的基本信息
-     * 
+     *
      * @param id 分组信息:用于记录各个分组的基本信息主键
      * @return 分组信息:用于记录各个分组的基本信息
      */
@@ -43,7 +44,7 @@ public class IndoorProductionGroupInformationServiceImpl implements IIndoorProdu
 
     /**
      * 查询分组信息:用于记录各个分组的基本信息列表
-     * 
+     *
      * @param indoorProductionGroupInformation 分组信息:用于记录各个分组的基本信息
      * @return 分组信息:用于记录各个分组的基本信息
      */
@@ -55,7 +56,7 @@ public class IndoorProductionGroupInformationServiceImpl implements IIndoorProdu
 
     /**
      * 新增分组信息:用于记录各个分组的基本信息
-     * 
+     *
      * @param indoorProductionGroupInformation 分组信息:用于记录各个分组的基本信息
      * @return 结果
      */
@@ -67,7 +68,7 @@ public class IndoorProductionGroupInformationServiceImpl implements IIndoorProdu
 
     /**
      * 修改分组信息:用于记录各个分组的基本信息
-     * 
+     *
      * @param indoorProductionGroupInformation 分组信息:用于记录各个分组的基本信息
      * @return 结果
      */
@@ -79,7 +80,7 @@ public class IndoorProductionGroupInformationServiceImpl implements IIndoorProdu
 
     /**
      * 批量删除分组信息:用于记录各个分组的基本信息
-     * 
+     *
      * @param ids 需要删除的分组信息:用于记录各个分组的基本信息主键
      * @return 结果
      */
@@ -91,7 +92,7 @@ public class IndoorProductionGroupInformationServiceImpl implements IIndoorProdu
 
     /**
      * 删除分组信息:用于记录各个分组的基本信息信息
-     * 
+     *
      * @param id 分组信息:用于记录各个分组的基本信息主键
      * @return 结果
      */
@@ -140,11 +141,24 @@ public class IndoorProductionGroupInformationServiceImpl implements IIndoorProdu
     }
 
     @Override
-    public List<IndoorProductionGroupInformationTreeVo> treeList(Long id) {
+    public List<IndoorProductionGroupInformationTreeVo> treeList(Long id,String groupName) {
         // 查询组信息列表
         IndoorProductionGroupInformation  IndoorProductionGroupInformation=new IndoorProductionGroupInformation();
+        if(StringUtils.isNotBlank(groupName)){
+            IndoorProductionGroupInformation.setGroupName(groupName);
+        }else {
+            id=0L;
+        }
         List<IndoorProductionGroupInformation> indoorProductionGroupInformations = indoorProductionGroupInformationMapper
                 .selectIndoorProductionGroupInformationList(IndoorProductionGroupInformation);
+        if(null==id){
+          return indoorProductionGroupInformations.stream().map(item->{
+                 IndoorProductionGroupInformationTreeVo indoorProductionGroupInformationTreeVo = new IndoorProductionGroupInformationTreeVo();
+                 indoorProductionGroupInformationTreeVo.setId(item.getId().toString());
+                 indoorProductionGroupInformationTreeVo.setLabel(item.getGroupName());
+                 return indoorProductionGroupInformationTreeVo;
+            }).collect(Collectors.toList());
+        }
         List<IndoorProductionGroupInformationTreeVo> children = this.findChildren(id.toString(), indoorProductionGroupInformations);
         return children;
     }

+ 97 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/MaterialsInventoryServiceImpl.java

@@ -0,0 +1,97 @@
+package com.zkqy.amichi.service.impl;
+
+import java.util.List;
+
+import com.zkqy.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.zkqy.amichi.mapper.MaterialsInventoryMapper;
+import com.zkqy.amichi.domain.MaterialsInventory;
+import com.zkqy.amichi.service.IMaterialsInventoryService;
+
+/**
+ * 半成品库存Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@Service
+public class MaterialsInventoryServiceImpl implements IMaterialsInventoryService
+{
+    @Autowired
+    private MaterialsInventoryMapper materialsInventoryMapper;
+
+    /**
+     * 查询半成品库存
+     *
+     * @param id 半成品库存主键
+     * @return 半成品库存
+     */
+    @Override
+    public MaterialsInventory selectMaterialsInventoryById(Long id)
+    {
+        return materialsInventoryMapper.selectMaterialsInventoryById(id);
+    }
+
+    /**
+     * 查询半成品库存列表
+     *
+     * @param materialsInventory 半成品库存
+     * @return 半成品库存
+     */
+    @Override
+    public List<MaterialsInventory> selectMaterialsInventoryList(MaterialsInventory materialsInventory)
+    {
+        return materialsInventoryMapper.selectMaterialsInventoryList(materialsInventory);
+    }
+
+    /**
+     * 新增半成品库存
+     *
+     * @param materialsInventory 半成品库存
+     * @return 结果
+     */
+    @Override
+    public int insertMaterialsInventory(MaterialsInventory materialsInventory)
+    {
+        materialsInventory.setCreateTime(DateUtils.getNowDate());
+        return materialsInventoryMapper.insertMaterialsInventory(materialsInventory);
+    }
+
+    /**
+     * 修改半成品库存
+     *
+     * @param materialsInventory 半成品库存
+     * @return 结果
+     */
+    @Override
+    public int updateMaterialsInventory(MaterialsInventory materialsInventory)
+    {
+        materialsInventory.setUpdateTime(DateUtils.getNowDate());
+        return materialsInventoryMapper.updateMaterialsInventory(materialsInventory);
+    }
+
+    /**
+     * 批量删除半成品库存
+     *
+     * @param ids 需要删除的半成品库存主键
+     * @return 结果
+     */
+    @Override
+    public int deleteMaterialsInventoryByIds(Long[] ids)
+    {
+        return materialsInventoryMapper.deleteMaterialsInventoryByIds(ids);
+    }
+
+    /**
+     * 删除半成品库存信息
+     *
+     * @param id 半成品库存主键
+     * @return 结果
+     */
+    @Override
+    public int deleteMaterialsInventoryById(Long id)
+    {
+        return materialsInventoryMapper.deleteMaterialsInventoryById(id);
+    }
+}

+ 10 - 7
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/ProductDeliverySheetServiceImpl.java

@@ -23,12 +23,12 @@ import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 产品出库单Service业务层处理
- * 
+ *
  * @author zkqy
  * @date 2024-07-08
  */
 @Service
-public class ProductDeliverySheetServiceImpl implements IProductDeliverySheetService 
+public class ProductDeliverySheetServiceImpl implements IProductDeliverySheetService
 {
     @Autowired
     private ProductDeliverySheetMapper productDeliverySheetMapper;
@@ -58,7 +58,7 @@ public class ProductDeliverySheetServiceImpl implements IProductDeliverySheetSer
 
     /**
      * 查询产品出库单列表
-     * 
+     *
      * @param productDeliverySheet 产品出库单
      * @return 产品出库单
      */
@@ -71,7 +71,7 @@ public class ProductDeliverySheetServiceImpl implements IProductDeliverySheetSer
 
     /**
      * 新增产品出库单
-     * 
+     *
      * @param productDeliverySheet 产品出库单
      * @return 结果
      */
@@ -84,7 +84,7 @@ public class ProductDeliverySheetServiceImpl implements IProductDeliverySheetSer
 
     /**
      * 修改产品出库单
-     * 
+     *
      * @param productDeliverySheet 产品出库单
      * @return 结果
      */
@@ -97,7 +97,7 @@ public class ProductDeliverySheetServiceImpl implements IProductDeliverySheetSer
 
     /**
      * 批量删除产品出库单
-     * 
+     *
      * @param ids 需要删除的产品出库单主键
      * @return 结果
      */
@@ -109,7 +109,7 @@ public class ProductDeliverySheetServiceImpl implements IProductDeliverySheetSer
 
     /**
      * 删除产品出库单信息
-     * 
+     *
      * @param id 产品出库单主键
      * @return 结果
      */
@@ -232,6 +232,9 @@ public class ProductDeliverySheetServiceImpl implements IProductDeliverySheetSer
                 finishedGoodsInventory.setProductName(productDetail.getProductName());//产品名称
                 finishedGoodsInventory.setModelNumber(productDetail.getModelNumber());//型号
                 List<FinishedGoodsInventory> finishedGoodsInventories = finishedGoodsInventoryMapper.selectFinishedGoodsInventoryList(finishedGoodsInventory);
+                if(finishedGoodsInventories.size()<=0){
+                    return msg+"库存不足";
+                }
                 if(Double.parseDouble(finishedGoodsInventories.get(0).getTotalInventory())<=Double.parseDouble(productDetail.getQuantity())){
                     mes.add(finishedGoodsInventories.get(0).getProductName());
                 }

+ 200 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/StationInformationServiceImpl.java

@@ -211,6 +211,18 @@ public class StationInformationServiceImpl implements IStationInformationService
 
     @Autowired
     private  SysTenantMapper sysTenantMapper;
+
+    @Autowired
+    private  MaterialsInventoryMapper materialsInventoryMapper;
+
+    @Autowired
+    private  IndoorPlanInformationMapper indoorPlanInformationMapper;
+
+    @Autowired
+    private  StockInRecordMapper stockInRecordMapper;
+
+    @Autowired
+    private  StockOutRecordMapper stockOutRecordMapper;
     /**
      * 手持扫描真实逻辑
      * @param contentString
@@ -275,6 +287,194 @@ public class StationInformationServiceImpl implements IStationInformationService
             }
             System.out.println("工位:"+stationInformations1.get(0).getStationName()+"人员:"+stationInformations1.get(0).getPersonnelName());
             return stationInformations1.get(0).getStationName()+"-"+stationInformations1.get(0).getPersonnelName()+"-手持设备绑定成功";
+        }else if(contentString.contains("qycnr")){
+            //先查询在不在 qycn & 4 & 1 & 50 & aslkdjflaksdjfalkdjfasdf
+            List<String> collect = Arrays.stream(contentString.split("&")).collect(Collectors.toList());
+            String s = collect.get(1);
+            //根据id查询半成品信息
+            IndoorPlanInformation indoorPlanInformation = indoorPlanInformationMapper.selectIndoorPlanInformationById(Long.valueOf(s));
+            MaterialsInventory materialsInventory=new MaterialsInventory();
+            materialsInventory.setMaterialCode(indoorPlanInformation.getMaterialCode());
+            List<MaterialsInventory> materialsInventories = materialsInventoryMapper.selectMaterialsInventoryList(materialsInventory);
+
+            RingScanInformation ringScanInformation =new RingScanInformation();
+            if(materialsInventories.size()<=0){
+                //新增
+                MaterialsInventory materialsInventory1=new MaterialsInventory();
+                materialsInventory1.setMaterialCode(indoorPlanInformation.getMaterialCode());
+                materialsInventory1.setMaterialName(indoorPlanInformation.getMaterialName());
+                materialsInventory1.setModel(indoorPlanInformation.getMaterialModel());
+                materialsInventory1.setSpecification(indoorPlanInformation.getMaterialSpecification());
+                materialsInventory1.setStockQuantity(Long.valueOf(collect.get(3).toString()));
+
+
+                StationInformation stationInformation = new StationInformation();
+                stationInformation.setDeviceNumber(collect.get(4));//设备编号
+                List<StationInformation> stationInformations = stationInformationMapper.selectStationInformationListByDEviceNumber(stationInformation);
+
+                materialsInventory1.setCreateBy(stationInformations.get(0).getPersonnelName());//操作人
+                materialsInventory1.setCreateById(Long.valueOf(stationInformations.get(0).getPersonnelId()));
+
+                ringScanInformation.setPersonnelName(stationInformations.get(0).getPersonnelName());//人员姓名
+                ringScanInformation.setProcess(stationInformations.get(0).getProcessId()); //工序id
+                ringScanInformation.setProcessName(stationInformations.get(0).getProcessName()); //工序名称
+                ringScanInformation.setStationId(stationInformations.get(0).getId().toString()); //工位id
+                ringScanInformation.setStationName(stationInformations.get(0).getStationName());//工位名称
+
+                materialsInventoryMapper.insertMaterialsInventory(materialsInventory1);
+
+                StockInRecord stockInRecord=new StockInRecord();
+                stockInRecord.setDjh(indoorPlanInformation.getTaskId());//单据号
+                stockInRecord.setDjIndex(collect.get(2));//单据序号
+                stockInRecord.setYtps(collect.get(3)); //当前托盘数量
+                stockInRecord.setTps(indoorPlanInformation.getOfPalletsTatal());//一共几个托盘
+                stockInRecord.setMaterialCode(indoorPlanInformation.getMaterialCode()); //物料编码
+                stockInRecord.setMaterialName(indoorPlanInformation.getMaterialName()); //物料名称
+                stockInRecord.setModel(indoorPlanInformation.getMaterialModel());//型号
+                stockInRecord.setSpecification(indoorPlanInformation.getMaterialSpecification());//规格
+                stockInRecord.setInQuantity(Long.valueOf(collect.get(3)));//入库数量
+                stockInRecord.setCreateTime(new Date());//创建时间
+//                stockInRecord.setInventoryId(materialsInventories.get(0).getId());
+                stockInRecord.setCreateBy(stationInformations.get(0).getPersonnelName());//操作人
+                stockInRecord.setCreateById(Long.valueOf(stationInformations.get(0).getPersonnelId()));
+                //新增入库日志
+                int i = stockInRecordMapper.insertStockInRecord(stockInRecord);
+            }else {
+
+                //修改
+                MaterialsInventory materialsInventory1 = materialsInventories.get(0);
+
+                StationInformation stationInformation = new StationInformation();
+                stationInformation.setDeviceNumber(collect.get(4));//设备编号
+                List<StationInformation> stationInformations = stationInformationMapper.selectStationInformationListByDEviceNumber(stationInformation);
+                materialsInventory1.setUpdateBy(stationInformations.get(0).getPersonnelName());//操作人
+                materialsInventory1.setUpdateById(Long.valueOf(stationInformations.get(0).getPersonnelId()));//操作人
+
+                ringScanInformation.setPersonnelName(stationInformations.get(0).getPersonnelName());//人员姓名
+                ringScanInformation.setProcess(stationInformations.get(0).getProcessId()); //工序id
+                ringScanInformation.setProcessName(stationInformations.get(0).getProcessName()); //工序名称
+                ringScanInformation.setStationId(stationInformations.get(0).getId().toString()); //工位id
+                ringScanInformation.setStationName(stationInformations.get(0).getStationName());//工位名称
+                //查询入库日志是否重复入库
+                StockInRecord stockInRecordCheck=new StockInRecord();
+                stockInRecordCheck.setInventoryId(materialsInventories.get(0).getId());
+                stockInRecordCheck.setDjIndex(collect.get(2));//单据序号
+                List<StockInRecord> stockInRecords = stockInRecordMapper.selectStockInRecordList(stockInRecordCheck);
+
+                StockInRecord stockInRecord2=new StockInRecord();
+                stockInRecord2.setDjh(indoorPlanInformation.getTaskId());
+                List<StockInRecord> stockInRecords22 = stockInRecordMapper.selectStockInRecordList(stockInRecord2);
+                int sum = stockInRecords22.stream().mapToInt(item -> Integer.parseInt(item.getInQuantity().toString())).sum();
+
+                if(stockInRecords.size()>0){
+                    return ringScanInformation.getStationName()+"-"+ringScanInformation.getProcessName()+"-不能重复入库扫描失败-"+indoorPlanInformation.getTaskId()+collect.get(2)+"-"+indoorPlanInformation.getTaskQuantity()+"-"+sum+"-"+0;
+                }
+
+                Integer newSl=Integer.parseInt(materialsInventory1.getStockQuantity().toString())+Integer.parseInt(collect.get(3).toString());
+                materialsInventory1.setStockQuantity(Long.parseLong(newSl.toString()));
+                materialsInventory1.setUpdateTime(new Date());//修改时间
+                materialsInventoryMapper.updateMaterialsInventory(materialsInventory1);
+
+                StockInRecord stockInRecord=new StockInRecord();
+                stockInRecord.setDjh(indoorPlanInformation.getTaskId());//单据号
+                stockInRecord.setDjIndex(collect.get(2));//单据序号
+                stockInRecord.setYtps(collect.get(3)); //当前托盘数量 qycn & 4 & 1 & 50 & aslkdjflaksdjfalkdjfasdf
+                stockInRecord.setTps(indoorPlanInformation.getOfPalletsTatal());//一共几个托盘
+                stockInRecord.setMaterialCode(indoorPlanInformation.getMaterialCode()); //物料编码
+                stockInRecord.setMaterialName(indoorPlanInformation.getMaterialName()); //物料名称
+                stockInRecord.setModel(indoorPlanInformation.getMaterialModel());//型号
+                stockInRecord.setSpecification(indoorPlanInformation.getMaterialSpecification());//规格
+                stockInRecord.setInQuantity(Long.valueOf(collect.get(3)));//入库数量
+                stockInRecord.setCreateTime(new Date());//创建时间
+                stockInRecord.setInventoryId(materialsInventories.get(0).getId());
+                stockInRecord.setCreateBy(stationInformations.get(0).getPersonnelName());//操作人
+                stockInRecord.setCreateById(Long.valueOf(stationInformations.get(0).getPersonnelId()));//操作人
+                //新增入库日志
+                stockInRecordMapper.insertStockInRecord(stockInRecord);
+            }
+
+             //查询出库日志完成数量
+            StockInRecord stockInRecord=new StockInRecord();
+            stockInRecord.setDjh(indoorPlanInformation.getTaskId());
+            List<StockInRecord> stockInRecords = stockInRecordMapper.selectStockInRecordList(stockInRecord);
+            int sum = stockInRecords.stream().mapToInt(item -> Integer.parseInt(item.getInQuantity().toString())).sum();
+
+
+            //记录信息
+            return ringScanInformation.getStationName()+"-"+ringScanInformation.getPersonnelName()+"-"+"扫描成功"+"-"+
+                    indoorPlanInformation.getTaskId()+collect.get(2)+"-"+indoorPlanInformation.getTaskQuantity()+"-"+sum+"-"+0;
+        }else if(contentString.contains("qycnc")) {
+
+            //先查询在不在 qycn & 4 & 1 & 50 & aslkdjflaksdjfalkdjfasdf
+            List<String> collect = Arrays.stream(contentString.split("&")).collect(Collectors.toList());
+            String s = collect.get(1);
+            //根据id查询半成品信息
+            IndoorPlanInformation indoorPlanInformation = indoorPlanInformationMapper.selectIndoorPlanInformationById(Long.valueOf(s));
+            MaterialsInventory materialsInventory=new MaterialsInventory();
+            materialsInventory.setMaterialCode(indoorPlanInformation.getMaterialCode());
+            List<MaterialsInventory> materialsInventories = materialsInventoryMapper.selectMaterialsInventoryList(materialsInventory);
+
+            //先查询有没有对应的出库日志
+            StockOutRecord stockOutRecord=new StockOutRecord();
+            stockOutRecord.setInventoryId(materialsInventories.get(0).getId());
+            stockOutRecord.setDjIndex(collect.get(2));//单据序号
+            List<StockOutRecord> stockOutRecords = stockOutRecordMapper.selectStockOutRecordList(stockOutRecord);
+
+            //先查询有没有对应的出库日志
+            StockOutRecord stockOutRecordTwo=new StockOutRecord();
+            stockOutRecordTwo.setInventoryId(materialsInventories.get(0).getId());
+            List<StockOutRecord> stockOutRecordsTwo = stockOutRecordMapper.selectStockOutRecordList(stockOutRecordTwo);
+
+            int sum = stockOutRecordsTwo.stream().mapToInt(item -> Integer.parseInt(item.getOutQuantity().toString())).sum();
+            RingScanInformation ringScanInformation =new RingScanInformation();
+
+            if(stockOutRecords.size()>0){
+                return ringScanInformation.getStationName()+"-"+ringScanInformation.getProcessName()+"-不能重复入库扫描失败-"+indoorPlanInformation.getTaskId()+collect.get(2)+"-"+indoorPlanInformation.getTaskQuantity()+"-"+sum+"-"+0;
+            }
+
+            if(materialsInventories.size()>=0){
+                //修改
+                MaterialsInventory materialsInventory1 = materialsInventories.get(0);
+
+                StationInformation stationInformation = new StationInformation();
+                stationInformation.setDeviceNumber(collect.get(4));//设备编号
+                List<StationInformation> stationInformations = stationInformationMapper.selectStationInformationListByDEviceNumber(stationInformation);
+                materialsInventory1.setUpdateBy(stationInformations.get(0).getPersonnelName());//操作人
+                materialsInventory1.setUpdateById(Long.valueOf(stationInformations.get(0).getPersonnelId()));//操作人
+
+                ringScanInformation.setPersonnelName(stationInformations.get(0).getPersonnelName());//人员姓名
+                ringScanInformation.setProcess(stationInformations.get(0).getProcessId()); //工序id
+                ringScanInformation.setProcessName(stationInformations.get(0).getProcessName()); //工序名称
+                ringScanInformation.setStationId(stationInformations.get(0).getId().toString()); //工位id
+                ringScanInformation.setStationName(stationInformations.get(0).getStationName());//工位名称
+
+                //修改库存数量
+                Integer newSl=Integer.parseInt(materialsInventory1.getStockQuantity().toString())-Integer.parseInt(collect.get(3).toString());
+                materialsInventory1.setStockQuantity(Long.parseLong(newSl.toString()));
+                materialsInventory1.setUpdateTime(new Date());//修改时间
+                materialsInventoryMapper.updateMaterialsInventory(materialsInventory1);
+
+                //记录日志信息
+                StockOutRecord stockInRecord=new StockOutRecord();
+                stockInRecord.setDjh(indoorPlanInformation.getTaskId());//单据号
+                stockInRecord.setDjIndex(collect.get(2));//单据序号
+                stockInRecord.setYtps(collect.get(3)); //当前托盘数量 qycn & 4 & 1 & 50 & aslkdjflaksdjfalkdjfasdf
+                stockInRecord.setTps(indoorPlanInformation.getOfPalletsTatal());//一共几个托盘
+                stockInRecord.setMaterialCode(indoorPlanInformation.getMaterialCode()); //物料编码
+                stockInRecord.setMaterialName(indoorPlanInformation.getMaterialName()); //物料名称
+                stockInRecord.setModel(indoorPlanInformation.getMaterialModel());//型号
+                stockInRecord.setSpecification(indoorPlanInformation.getMaterialSpecification());//规格
+                stockInRecord.setOutQuantity(Long.valueOf(collect.get(3)));//出库数量
+                stockInRecord.setCreateTime(new Date());//创建时间
+                stockInRecord.setInventoryId(materialsInventories.get(0).getId());
+                stockInRecord.setCreateBy(stationInformations.get(0).getPersonnelName());//操作人
+                stockInRecord.setCreateById(Long.valueOf(stationInformations.get(0).getPersonnelId()));//操作人
+                //新增入库日志
+                stockOutRecordMapper.insertStockOutRecord(stockInRecord);
+            }
+            //扫描信息
+            return ringScanInformation.getStationName()+"-"+ringScanInformation.getPersonnelName()+"-"+"扫描成功"+"-"+
+                    indoorPlanInformation.getTaskId()+collect.get(2)+"-"+indoorPlanInformation.getTaskQuantity()+"-"+sum+"-"+0;
         }else {
             //产品编码&mac地址
             String[] content = contentString.split("&");

+ 97 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/StockInOrderDetailServiceImpl.java

@@ -0,0 +1,97 @@
+package com.zkqy.amichi.service.impl;
+
+import java.util.List;
+
+import com.zkqy.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.zkqy.amichi.mapper.StockInOrderDetailMapper;
+import com.zkqy.amichi.domain.StockInOrderDetail;
+import com.zkqy.amichi.service.IStockInOrderDetailService;
+
+/**
+ * 半成品入库单明细Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@Service
+public class StockInOrderDetailServiceImpl implements IStockInOrderDetailService
+{
+    @Autowired
+    private StockInOrderDetailMapper stockInOrderDetailMapper;
+
+    /**
+     * 查询半成品入库单明细
+     *
+     * @param id 半成品入库单明细主键
+     * @return 半成品入库单明细
+     */
+    @Override
+    public StockInOrderDetail selectStockInOrderDetailById(Long id)
+    {
+        return stockInOrderDetailMapper.selectStockInOrderDetailById(id);
+    }
+
+    /**
+     * 查询半成品入库单明细列表
+     *
+     * @param stockInOrderDetail 半成品入库单明细
+     * @return 半成品入库单明细
+     */
+    @Override
+    public List<StockInOrderDetail> selectStockInOrderDetailList(StockInOrderDetail stockInOrderDetail)
+    {
+        return stockInOrderDetailMapper.selectStockInOrderDetailList(stockInOrderDetail);
+    }
+
+    /**
+     * 新增半成品入库单明细
+     *
+     * @param stockInOrderDetail 半成品入库单明细
+     * @return 结果
+     */
+    @Override
+    public int insertStockInOrderDetail(StockInOrderDetail stockInOrderDetail)
+    {
+        stockInOrderDetail.setCreateTime(DateUtils.getNowDate());
+        return stockInOrderDetailMapper.insertStockInOrderDetail(stockInOrderDetail);
+    }
+
+    /**
+     * 修改半成品入库单明细
+     *
+     * @param stockInOrderDetail 半成品入库单明细
+     * @return 结果
+     */
+    @Override
+    public int updateStockInOrderDetail(StockInOrderDetail stockInOrderDetail)
+    {
+        stockInOrderDetail.setUpdateTime(DateUtils.getNowDate());
+        return stockInOrderDetailMapper.updateStockInOrderDetail(stockInOrderDetail);
+    }
+
+    /**
+     * 批量删除半成品入库单明细
+     *
+     * @param ids 需要删除的半成品入库单明细主键
+     * @return 结果
+     */
+    @Override
+    public int deleteStockInOrderDetailByIds(List<Long> ids)
+    {
+        return stockInOrderDetailMapper.deleteStockInOrderDetailByIds(ids);
+    }
+
+    /**
+     * 删除半成品入库单明细信息
+     *
+     * @param id 半成品入库单明细主键
+     * @return 结果
+     */
+    @Override
+    public int deleteStockInOrderDetailById(Long id)
+    {
+        return stockInOrderDetailMapper.deleteStockInOrderDetailById(id);
+    }
+}

+ 306 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/StockInOrderServiceImpl.java

@@ -0,0 +1,306 @@
+package com.zkqy.amichi.service.impl;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import com.zkqy.amichi.domain.*;
+import com.zkqy.amichi.domain.vo.StockInOrderAndOrderDetail;
+import com.zkqy.amichi.mapper.MaterialsInventoryMapper;
+import com.zkqy.amichi.mapper.StockInOrderDetailMapper;
+import com.zkqy.amichi.mapper.StockInRecordMapper;
+import com.zkqy.common.core.domain.AjaxResult;
+import com.zkqy.common.utils.DateUtils;
+import com.zkqy.common.utils.SecurityUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.zkqy.amichi.mapper.StockInOrderMapper;
+import com.zkqy.amichi.service.IStockInOrderService;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 半成品入库单主Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@Service("StockInOrderServiceImpl")
+public class StockInOrderServiceImpl implements IStockInOrderService
+{
+
+    @Autowired
+    private StockInOrderMapper stockInOrderMapper;
+
+    @Autowired
+    private StockInOrderDetailMapper stockInOrderDetailMapper;
+
+    @Autowired
+    private MaterialsInventoryMapper materialsInventoryMapper;
+
+    @Autowired
+    private StockInRecordMapper stockInRecordMapper;
+
+    /**
+     * 查询半成品入库单主
+     *
+     * @param id 半成品入库单主主键
+     * @return 半成品入库单主
+     */
+    @Override
+    public StockInOrderAndOrderDetail selectStockInOrderById(Long id)
+    {
+        StockInOrderAndOrderDetail andOrderDetail=new StockInOrderAndOrderDetail();
+        StockInOrder stockInOrder = stockInOrderMapper.selectStockInOrderById(id);
+        BeanUtils.copyProperties(stockInOrder,andOrderDetail);
+        //根据入库单号查询入库单详情信息
+        StockInOrderDetail stockInOrderDetail=new StockInOrderDetail();
+        stockInOrderDetail.setStockInOrderId(id);
+        List<StockInOrderDetail> stockInOrderDetails = stockInOrderDetailMapper.selectStockInOrderDetailList(stockInOrderDetail);
+        andOrderDetail.setOrderDetailList(stockInOrderDetails);
+        return andOrderDetail;
+    }
+
+    /**
+     * 查询半成品入库单主列表
+     *
+     * @param stockInOrder 半成品入库单主
+     * @return 半成品入库单主
+     */
+    @Override
+    public List<StockInOrder> selectStockInOrderList(StockInOrder stockInOrder)
+    {
+        return stockInOrderMapper.selectStockInOrderList(stockInOrder);
+    }
+
+    /**
+     * 新增半成品入库单主
+     *
+     * @param stockInOrder 半成品入库单主
+     * @return 结果
+     */
+    @Override
+    public int insertStockInOrder(StockInOrder stockInOrder)
+    {
+        stockInOrder.setCreateTime(DateUtils.getNowDate());
+        return stockInOrderMapper.insertStockInOrder(stockInOrder);
+    }
+
+    /**
+     * 修改半成品入库单主
+     *
+     * @param stockInOrder 半成品入库单主
+     * @return 结果
+     */
+    @Override
+    @Transactional
+    public AjaxResult updateStockInOrder(StockInOrderAndOrderDetail stockInOrder)
+    {
+        stockInOrder.setUpdateTime(DateUtils.getNowDate());
+        //错误信息
+        List<String> errCode=new ArrayList<>();
+        //反审核先看物料够不够了
+        //先查询入库明细信息
+        stockInOrder.getDetailList().stream().forEach(item->{
+            //物料编码
+            String materialCode = item.getMaterialCode();
+            //查询物料信息
+            MaterialsInventory materialsInventory=new MaterialsInventory();
+            materialsInventory.setMaterialCode(materialCode);
+            List<MaterialsInventory> materialsInventories = materialsInventoryMapper.selectMaterialsInventoryList(materialsInventory);
+            if(materialsInventories.size()<=0){
+                errCode.add(materialCode);
+            }
+        });
+        if(errCode.size()>0){
+            return AjaxResult.error("编号为"+errCode.stream().collect(Collectors.joining(","))+"物料不足修改失败");
+        }
+
+        //先查询入库明细信息
+        stockInOrder.getDetailList().stream().forEach(item->{
+            //物料编码
+            String materialCode = item.getMaterialCode();
+            //查询物料信息
+            MaterialsInventory materialsInventory=new MaterialsInventory();
+            materialsInventory.setMaterialCode(materialCode);
+            List<MaterialsInventory> materialsInventories = materialsInventoryMapper.selectMaterialsInventoryList(materialsInventory);
+            if(materialsInventories.size()>0){
+                Long stockQuantity = materialsInventories.get(0).getStockQuantity();
+                Integer hfkc=Integer.parseInt(stockQuantity.toString())-Integer.parseInt(item.getInQuantity().toString());
+                MaterialsInventory materialsInventoryUpdate=new MaterialsInventory();
+                materialsInventoryUpdate.setMaterialCode(item.getMaterialCode());
+                materialsInventoryUpdate.setStockQuantity(hfkc.longValue());
+                //修正库存
+                materialsInventoryMapper.updateMaterialsInventoryByMaterialCode(materialsInventoryUpdate);
+            }
+        });
+
+        //先删除老的入库明细数据
+//        List<Long> collect = stockInOrder.getOrderDetailList().stream().map(StockInOrderDetail::getId).collect(Collectors.toList());
+        stockInOrderDetailMapper.deleteStockInOrderDetailByStockInOrderId(stockInOrder.getId());
+
+        //删除对应的入库日志数据
+        stockInRecordMapper.deleteStockInRecordByRkdbh(stockInOrder.getOrderNo());//入库单id
+
+        //新增入库明细数据
+        stockInOrder.getDetailList().forEach(item->{
+            //添加入库明细信息
+            stockInOrderDetailMapper.insertStockInOrderDetail(item);
+            //添加入库日志信息
+            StockInRecord stockInRecord=new StockInRecord();
+            stockInRecord.setMaterialCode(item.getMaterialCode());//物料编码
+            stockInRecord.setMaterialName(item.getMaterialName());//物料名称
+            stockInRecord.setModel(item.getModel());//型号
+            stockInRecord.setSpecification(item.getSpecification());//规格
+            stockInRecord.setInQuantity(item.getInQuantity());//入库数量
+            stockInRecord.setOperator(SecurityUtils.getUsername());//操作人
+            stockInRecord.setCreateTime(new Date());//时间
+            stockInRecord.setCreateBy(SecurityUtils.getUsername());
+            stockInRecord.setCreateById(SecurityUtils.getUserId());
+            stockInRecord.setInboundType("手动入库");
+            stockInRecord.setRkdbh(stockInOrder.getOrderNo());
+            stockInRecordMapper.insertStockInRecord(stockInRecord);
+
+            //更新库存信息
+            MaterialsInventory materialsInventory=new MaterialsInventory();
+            materialsInventory.setMaterialCode(item.getMaterialCode());
+            List<MaterialsInventory> materialsInventories = materialsInventoryMapper.selectMaterialsInventoryList(materialsInventory);
+            if(materialsInventories.size()<=0){
+                //新增库存产品信息
+                MaterialsInventory materialsInventoryInsert=new MaterialsInventory();
+                materialsInventoryInsert.setMaterialCode(item.getMaterialCode());
+                materialsInventoryInsert.setMaterialName(item.getMaterialName());
+                materialsInventoryInsert.setModel(item.getModel());
+                materialsInventoryInsert.setSpecification(item.getSpecification());
+                materialsInventoryInsert.setStockQuantity(item.getInQuantity());//入库数量
+                materialsInventoryMapper.insertMaterialsInventory(materialsInventoryInsert);
+            }else {
+                //修改库存数量
+                MaterialsInventory materialsInventoryUpdate = materialsInventories.get(0);
+                Integer newSl=Integer.parseInt(materialsInventoryUpdate.getStockQuantity().toString())+Integer.parseInt(item.getInQuantity().toString());
+                materialsInventoryUpdate.setStockQuantity(Long.parseLong(newSl.toString()));
+                materialsInventoryUpdate.setUpdateTime(new Date());//修改时间
+                materialsInventoryMapper.updateMaterialsInventory(materialsInventoryUpdate);
+            }
+        });
+
+        //更新入库单数据
+        int i = stockInOrderMapper.updateStockInOrder(stockInOrder);
+
+        if(i>0){
+          return   AjaxResult.success("修改入库单信息成功");
+        }else {
+           return AjaxResult.error("修改入库单信息失败");
+        }
+    }
+
+    /**
+     * 批量删除半成品入库单主
+     *
+     * @param ids 需要删除的半成品入库单主主键
+     * @return 结果
+     */
+    @Override
+    public int deleteStockInOrderByIds(Long[] ids)
+    {
+        return stockInOrderMapper.deleteStockInOrderByIds(ids);
+    }
+
+    /**
+     * 删除半成品入库单主信息
+     *
+     * @param id 半成品入库单主主键
+     * @return 结果
+     */
+    @Override
+    public int deleteStockInOrderById(Long id)
+    {
+        return stockInOrderMapper.deleteStockInOrderById(id);
+    }
+
+    /**
+     * 添加订单和订单明细
+     * @param stockInOrder
+     * @return
+     */
+    @Override
+    @Transactional
+    public int insertStockInOrderAndDetail(StockInOrderAndOrderDetail stockInOrder) {
+        StockInOrder stockInOrderCopy=new StockInOrder();
+        BeanUtils.copyProperties(stockInOrder,stockInOrderCopy);
+        int i = stockInOrderMapper.insertStockInOrder(stockInOrderCopy);//添加入库单信息
+//操作入库单明细信息
+        List<StockInOrderDetail> stockInOrderDetailList = stockInOrder.getOrderDetailList();
+        stockInOrderDetailList.forEach(item->{
+
+            item.setStockInOrderId(stockInOrderCopy.getId());
+            //添加入库单明细信息
+            stockInOrderDetailMapper.insertStockInOrderDetail(item);
+
+            //查询判断是这个入库是新增还是修改
+            MaterialsInventory materialsInventory=new MaterialsInventory();
+            materialsInventory.setMaterialCode(item.getMaterialCode());
+            List<MaterialsInventory> materialsInventories = materialsInventoryMapper.selectMaterialsInventoryList(materialsInventory);
+
+            if(materialsInventories.size()>0){
+                //修改入库产品库存数量
+                Long stockQuantity = materialsInventories.get(0).getStockQuantity();//老库存数量
+                Integer newStockQuantity=Integer.parseInt(stockQuantity.toString())+Integer.parseInt(item.getInQuantity().toString());
+                MaterialsInventory materialsInventoryUpdate=new MaterialsInventory();
+                materialsInventoryUpdate.setMaterialCode(materialsInventories.get(0).getMaterialCode());
+                materialsInventoryUpdate.setStockQuantity(Long.valueOf(newStockQuantity.toString()));
+                materialsInventoryMapper.updateMaterialsInventoryByMaterialCode(materialsInventoryUpdate);
+
+                StockInRecord stockInRecord=new StockInRecord();
+                stockInRecord.setMaterialCode(item.getMaterialCode()); //物料编码
+                stockInRecord.setMaterialName(item.getMaterialName()); //物料名称
+                stockInRecord.setModel(item.getModel());//型号
+                stockInRecord.setSpecification(item.getSpecification());//规格
+                stockInRecord.setInQuantity(item.getInQuantity());//入库数量
+                stockInRecord.setCreateTime(new Date());//创建时间
+                stockInRecord.setInventoryId(materialsInventories.get(0).getId());
+                stockInRecord.setCreateBy(SecurityUtils.getUsername());//操作人
+                stockInRecord.setCreateById(SecurityUtils.getUserId());//操作人
+                stockInRecord.setInboundType("手动入库");
+                stockInRecord.setRkdbh(stockInOrder.getOrderNo());
+
+                stockInRecordMapper.insertStockInRecord(stockInRecord);
+            }else {
+                //新增产品入库数量
+                MaterialsInventory materialsInventoryInsert=new MaterialsInventory();
+                materialsInventoryInsert.setMaterialCode(item.getMaterialCode());
+                materialsInventoryInsert.setMaterialName(item.getMaterialName());
+                materialsInventoryInsert.setModel(item.getModel());
+                materialsInventoryInsert.setSpecification(item.getSpecification());
+                materialsInventoryInsert.setStockQuantity(item.getInQuantity()); //入库数量
+                materialsInventoryInsert.setCreateById(SecurityUtils.getUserId());//入库人id
+                materialsInventoryInsert.setCreateTime(new Date());//入库时间
+                materialsInventoryInsert.setCreateBy(SecurityUtils.getUsername());//入库人信息
+                //新增入库信息
+                materialsInventoryMapper.insertMaterialsInventory(materialsInventoryInsert);
+
+                StockInRecord stockInRecord=new StockInRecord();
+                stockInRecord.setMaterialCode(item.getMaterialCode()); //物料编码
+                stockInRecord.setMaterialName(item.getMaterialName()); //物料名称
+                stockInRecord.setModel(item.getModel());//型号
+                stockInRecord.setSpecification(item.getSpecification());//规格
+                stockInRecord.setInQuantity(item.getInQuantity());//入库数量
+                stockInRecord.setCreateTime(new Date());//创建时间
+                stockInRecord.setInventoryId(stockInOrderCopy.getId());
+                stockInRecord.setCreateBy(SecurityUtils.getUsername());//操作人
+                stockInRecord.setCreateById(SecurityUtils.getUserId());//操作人
+                stockInRecord.setInboundType("手动入库");
+                stockInRecord.setRkdbh(stockInOrder.getOrderNo());
+                stockInRecordMapper.insertStockInRecord(stockInRecord);
+            }
+        });
+        return stockInOrder.getOrderDetailList().size();
+    }
+
+    @Override
+    public AjaxResult insertStockIOutOrderAndDetail(StockInOrderAndOrderDetail stockInOrder) {
+        return AjaxResult.success("入库没有出库操作");
+    }
+}

+ 97 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/StockInRecordServiceImpl.java

@@ -0,0 +1,97 @@
+package com.zkqy.amichi.service.impl;
+
+import java.util.List;
+
+import com.zkqy.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.zkqy.amichi.mapper.StockInRecordMapper;
+import com.zkqy.amichi.domain.StockInRecord;
+import com.zkqy.amichi.service.IStockInRecordService;
+
+/**
+ * 半成品入库记录Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@Service
+public class StockInRecordServiceImpl implements IStockInRecordService
+{
+    @Autowired
+    private StockInRecordMapper stockInRecordMapper;
+
+    /**
+     * 查询半成品入库记录
+     *
+     * @param id 半成品入库记录主键
+     * @return 半成品入库记录
+     */
+    @Override
+    public StockInRecord selectStockInRecordById(Long id)
+    {
+        return stockInRecordMapper.selectStockInRecordById(id);
+    }
+
+    /**
+     * 查询半成品入库记录列表
+     *
+     * @param stockInRecord 半成品入库记录
+     * @return 半成品入库记录
+     */
+    @Override
+    public List<StockInRecord> selectStockInRecordList(StockInRecord stockInRecord)
+    {
+        return stockInRecordMapper.selectStockInRecordList(stockInRecord);
+    }
+
+    /**
+     * 新增半成品入库记录
+     *
+     * @param stockInRecord 半成品入库记录
+     * @return 结果
+     */
+    @Override
+    public int insertStockInRecord(StockInRecord stockInRecord)
+    {
+        stockInRecord.setCreateTime(DateUtils.getNowDate());
+        return stockInRecordMapper.insertStockInRecord(stockInRecord);
+    }
+
+    /**
+     * 修改半成品入库记录
+     *
+     * @param stockInRecord 半成品入库记录
+     * @return 结果
+     */
+    @Override
+    public int updateStockInRecord(StockInRecord stockInRecord)
+    {
+        stockInRecord.setUpdateTime(DateUtils.getNowDate());
+        return stockInRecordMapper.updateStockInRecord(stockInRecord);
+    }
+
+    /**
+     * 批量删除半成品入库记录
+     *
+     * @param ids 需要删除的半成品入库记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteStockInRecordByIds(Long[] ids)
+    {
+        return stockInRecordMapper.deleteStockInRecordByIds(ids);
+    }
+
+    /**
+     * 删除半成品入库记录信息
+     *
+     * @param id 半成品入库记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteStockInRecordById(Long id)
+    {
+        return stockInRecordMapper.deleteStockInRecordById(id);
+    }
+}

+ 333 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/StockOutOrderServiceImpl.java

@@ -0,0 +1,333 @@
+package com.zkqy.amichi.service.impl;
+
+import com.zkqy.amichi.domain.*;
+import com.zkqy.amichi.domain.vo.StockInOrderAndOrderDetail;
+import com.zkqy.amichi.mapper.*;
+import com.zkqy.amichi.service.IStockInOrderService;
+import com.zkqy.common.core.domain.AjaxResult;
+import com.zkqy.common.utils.DateUtils;
+import com.zkqy.common.utils.SecurityUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 半成品入库单主Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@Service("StockOutOrderServiceImpl")
+public class StockOutOrderServiceImpl implements IStockInOrderService
+{
+
+    @Autowired
+    private StockInOrderMapper stockInOrderMapper;
+
+    @Autowired
+    private StockInOrderDetailMapper stockInOrderDetailMapper;
+
+    @Autowired
+    private MaterialsInventoryMapper materialsInventoryMapper;
+
+    @Autowired
+    private StockInRecordMapper stockInRecordMapper;
+
+    @Autowired
+    private StockOutRecordMapper stockOutRecordMapper;
+
+    /**
+     * 查询半成品入库单主
+     *
+     * @param id 半成品入库单主主键
+     * @return 半成品入库单主
+     */
+    @Override
+    public StockInOrderAndOrderDetail selectStockInOrderById(Long id)
+    {
+        StockInOrderAndOrderDetail andOrderDetail=new StockInOrderAndOrderDetail();
+        StockInOrder stockInOrder = stockInOrderMapper.selectStockInOrderById(id);
+        BeanUtils.copyProperties(stockInOrder,andOrderDetail);
+        //根据入库单号查询入库单详情信息
+        StockInOrderDetail stockInOrderDetail=new StockInOrderDetail();
+        stockInOrderDetail.setStockInOrderId(id);
+        List<StockInOrderDetail> stockInOrderDetails = stockInOrderDetailMapper.selectStockInOrderDetailList(stockInOrderDetail);
+        andOrderDetail.setOrderDetailList(stockInOrderDetails);
+        return andOrderDetail;
+    }
+
+    /**
+     * 查询半成品入库单主列表
+     *
+     * @param stockInOrder 半成品入库单主
+     * @return 半成品入库单主
+     */
+    @Override
+    public List<StockInOrder> selectStockInOrderList(StockInOrder stockInOrder)
+    {
+        return stockInOrderMapper.selectStockInOrderList(stockInOrder);
+    }
+
+    /**
+     * 新增半成品入库单主
+     *
+     * @param stockInOrder 半成品入库单主
+     * @return 结果
+     */
+    @Override
+    public int insertStockInOrder(StockInOrder stockInOrder)
+    {
+        stockInOrder.setCreateTime(DateUtils.getNowDate());
+        return stockInOrderMapper.insertStockInOrder(stockInOrder);
+    }
+
+    /**
+     * 修改半成品出库单主
+     *
+     * @param stockInOrder 半成品入库单主
+     * @return 结果
+     */
+    @Override
+    @Transactional
+    public AjaxResult updateStockInOrder(StockInOrderAndOrderDetail stockInOrder)
+    {
+        stockInOrder.setUpdateTime(DateUtils.getNowDate());
+        //先查询入库明细信息
+        stockInOrder.getDetailList().stream().forEach(item->{
+            //物料编码
+            String materialCode = item.getMaterialCode();
+            //查询物料信息
+            MaterialsInventory materialsInventory=new MaterialsInventory();
+            materialsInventory.setMaterialCode(materialCode);
+            List<MaterialsInventory> materialsInventories = materialsInventoryMapper.selectMaterialsInventoryList(materialsInventory);
+            if(materialsInventories.size()>0){
+                Long stockQuantity = materialsInventories.get(0).getStockQuantity();
+                Integer hfkc=Integer.parseInt(stockQuantity.toString())+Integer.parseInt(item.getInQuantity().toString());
+                MaterialsInventory materialsInventoryUpdate=new MaterialsInventory();
+                materialsInventoryUpdate.setMaterialCode(item.getMaterialCode());
+                materialsInventoryUpdate.setStockQuantity(hfkc.longValue());
+                //修正库存
+                materialsInventoryMapper.updateMaterialsInventoryByMaterialCode(materialsInventoryUpdate);
+            }//库存数为0但是不可能是删除的
+        });
+        //先删除老的出库明细数据
+//        List<Long> collect = stockInOrder.getOrderDetailList().stream().map(StockInOrderDetail::getId).collect(Collectors.toList());
+        stockInOrderDetailMapper.deleteStockInOrderDetailByStockInOrderId(stockInOrder.getId());
+
+        //删除对应的入库日志数据
+        stockOutRecordMapper.deleteStockInRecordByRkdbh(stockInOrder.getOrderNo());//入库单id
+
+        //新增入库明细数据
+        stockInOrder.getDetailList().forEach(item->{
+            //添加入库明细信息
+            stockInOrderDetailMapper.insertStockInOrderDetail(item);
+            //添加入库日志信息
+            StockOutRecord stockOutRecord=new StockOutRecord();
+            stockOutRecord.setMaterialCode(item.getMaterialCode());//物料编码
+            stockOutRecord.setMaterialName(item.getMaterialName());//物料名称
+            stockOutRecord.setModel(item.getModel());//型号
+            stockOutRecord.setSpecification(item.getSpecification());//规格
+            stockOutRecord.setOutQuantity(item.getInQuantity());//入库数量
+            stockOutRecord.setOperator(SecurityUtils.getUsername());//操作人
+            stockOutRecord.setCreateTime(new Date());//时间
+            stockOutRecord.setCreateBy(SecurityUtils.getUsername());
+            stockOutRecord.setCreateById(SecurityUtils.getUserId());
+            stockOutRecord.setInboundType("手动出库");
+            stockOutRecord.setRkdbh(stockInOrder.getOrderNo());
+            stockOutRecordMapper.insertStockOutRecord(stockOutRecord);
+
+            //更新库存信息
+            MaterialsInventory materialsInventory=new MaterialsInventory();
+            materialsInventory.setMaterialCode(item.getMaterialCode());
+            List<MaterialsInventory> materialsInventories = materialsInventoryMapper.selectMaterialsInventoryList(materialsInventory);
+            if(materialsInventories.size()>0) {
+                //修改库存数量
+                MaterialsInventory materialsInventoryUpdate = materialsInventories.get(0);
+                Integer newSl=Integer.parseInt(materialsInventoryUpdate.getStockQuantity().toString())-Integer.parseInt(item.getInQuantity().toString());
+                materialsInventoryUpdate.setStockQuantity(Long.parseLong(newSl.toString()));
+                materialsInventoryUpdate.setUpdateTime(new Date());//修改时间
+                materialsInventoryMapper.updateMaterialsInventory(materialsInventoryUpdate);
+            }
+        });
+
+        //更新入库单数据
+        int i = stockInOrderMapper.updateStockInOrder(stockInOrder);
+        if(i>0){
+          return   AjaxResult.success("修改出库单信息成功");
+        }else {
+           return AjaxResult.error("修改出库单信息失败");
+        }
+    }
+
+    /**
+     * 批量删除半成品入库单主
+     *
+     * @param ids 需要删除的半成品入库单主主键
+     * @return 结果
+     */
+    @Override
+    public int deleteStockInOrderByIds(Long[] ids)
+    {
+        return stockInOrderMapper.deleteStockInOrderByIds(ids);
+    }
+
+    /**
+     * 删除半成品入库单主信息
+     *
+     * @param id 半成品入库单主主键
+     * @return 结果
+     */
+    @Override
+    public int deleteStockInOrderById(Long id)
+    {
+        return stockInOrderMapper.deleteStockInOrderById(id);
+    }
+
+    /**
+     * 添加订单和订单明细
+     * @param stockInOrder
+     * @return
+     */
+    @Override
+    @Transactional
+    public int   insertStockInOrderAndDetail(StockInOrderAndOrderDetail stockInOrder) {
+        StockInOrder stockInOrderCopy=new StockInOrder();
+        BeanUtils.copyProperties(stockInOrder,stockInOrderCopy);
+        int i = stockInOrderMapper.insertStockInOrder(stockInOrderCopy);//添加入库单信息
+        List<String>  stringList=new ArrayList<>();
+
+        //操作入库单明细信息
+        List<StockInOrderDetail> stockInOrderDetailList = stockInOrder.getOrderDetailList();
+        stockInOrderDetailList.forEach(item->{
+
+            item.setStockInOrderId(stockInOrderCopy.getId());
+            //添加入库单明细信息
+            stockInOrderDetailMapper.insertStockInOrderDetail(item);
+
+            //查询判断是这个入库是新增还是修改
+            MaterialsInventory materialsInventory=new MaterialsInventory();
+            materialsInventory.setMaterialCode(item.getMaterialCode());
+            List<MaterialsInventory> materialsInventories = materialsInventoryMapper.selectMaterialsInventoryList(materialsInventory);
+
+            if(materialsInventories.size()>0){
+                //修改入库产品库存数量
+                Long stockQuantity = materialsInventories.get(0).getStockQuantity();//老库存数量
+                Integer newStockQuantity=Integer.parseInt(stockQuantity.toString())+Integer.parseInt(item.getInQuantity().toString());
+                MaterialsInventory materialsInventoryUpdate=new MaterialsInventory();
+                materialsInventoryUpdate.setMaterialCode(materialsInventories.get(0).getMaterialCode());
+                materialsInventoryUpdate.setStockQuantity(Long.valueOf(newStockQuantity.toString()));
+                materialsInventoryMapper.updateMaterialsInventoryByMaterialCode(materialsInventoryUpdate);
+
+                StockInRecord stockInRecord=new StockInRecord();
+                stockInRecord.setMaterialCode(item.getMaterialCode()); //物料编码
+                stockInRecord.setMaterialName(item.getMaterialName()); //物料名称
+                stockInRecord.setModel(item.getModel());//型号
+                stockInRecord.setSpecification(item.getSpecification());//规格
+                stockInRecord.setInQuantity(item.getInQuantity());//入库数量
+                stockInRecord.setCreateTime(new Date());//创建时间
+                stockInRecord.setInventoryId(materialsInventories.get(0).getId());
+                stockInRecord.setCreateBy(SecurityUtils.getUsername());//操作人
+                stockInRecord.setCreateById(SecurityUtils.getUserId());//操作人
+                stockInRecord.setInboundType("手动入库");
+                stockInRecord.setRkdbh(stockInOrder.getOrderNo());
+
+                stockInRecordMapper.insertStockInRecord(stockInRecord);
+            }else {
+                //新增产品入库数量
+                MaterialsInventory materialsInventoryInsert=new MaterialsInventory();
+                materialsInventoryInsert.setMaterialCode(item.getMaterialCode());
+                materialsInventoryInsert.setMaterialName(item.getMaterialName());
+                materialsInventoryInsert.setModel(item.getModel());
+                materialsInventoryInsert.setSpecification(item.getSpecification());
+                materialsInventoryInsert.setStockQuantity(item.getInQuantity()); //入库数量
+                materialsInventoryInsert.setCreateById(SecurityUtils.getUserId());//入库人id
+                materialsInventoryInsert.setCreateTime(new Date());//入库时间
+                materialsInventoryInsert.setCreateBy(SecurityUtils.getUsername());//入库人信息
+                //新增入库信息
+                materialsInventoryMapper.insertMaterialsInventory(materialsInventoryInsert);
+
+                StockInRecord stockInRecord=new StockInRecord();
+                stockInRecord.setMaterialCode(item.getMaterialCode()); //物料编码
+                stockInRecord.setMaterialName(item.getMaterialName()); //物料名称
+                stockInRecord.setModel(item.getModel());//型号
+                stockInRecord.setSpecification(item.getSpecification());//规格
+                stockInRecord.setInQuantity(item.getInQuantity());//入库数量
+                stockInRecord.setCreateTime(new Date());//创建时间
+                stockInRecord.setInventoryId(stockInOrderCopy.getId());
+                stockInRecord.setCreateBy(SecurityUtils.getUsername());//操作人
+                stockInRecord.setCreateById(SecurityUtils.getUserId());//操作人
+                stockInRecord.setInboundType("手动入库");
+                stockInRecord.setRkdbh(stockInOrder.getOrderNo());
+                stockInRecordMapper.insertStockInRecord(stockInRecord);
+            }
+        });
+        return stockInOrder.getOrderDetailList().size();
+    }
+
+    @Override
+    @Transactional
+    public AjaxResult insertStockIOutOrderAndDetail(StockInOrderAndOrderDetail stockInOrder) {
+        StockInOrder stockInOrderCopy=new StockInOrder();
+        BeanUtils.copyProperties(stockInOrder,stockInOrderCopy);
+        int i = stockInOrderMapper.insertStockInOrder(stockInOrderCopy);//添加入库单信息
+        List<String>  stringList=new ArrayList<>();
+        //查询当前要出库的产品信息
+        stockInOrder.getOrderDetailList().stream().forEach(item->{
+            MaterialsInventory materialsInventory=new MaterialsInventory();
+            materialsInventory.setMaterialCode(item.getMaterialCode());
+            List<MaterialsInventory> materialsInventories = materialsInventoryMapper.selectMaterialsInventoryList(materialsInventory);
+            if(materialsInventories.size()<=0){
+                stringList.add(item.getMaterialCode());
+            }
+        });
+        if(stringList.size()>0){
+            return  AjaxResult.error("物料明细中,物料编码为"+stringList.stream().collect(Collectors.joining(","))+"未存在对应的库存信息");
+        }
+        //操作入库单明细信息
+        List<StockInOrderDetail> stockInOrderDetailList = stockInOrder.getOrderDetailList();
+        stockInOrderDetailList.forEach(item->{
+
+            item.setStockInOrderId(stockInOrderCopy.getId());
+            //添加入库单明细信息
+            stockInOrderDetailMapper.insertStockInOrderDetail(item);
+
+            //查询判断是这个入库是新增还是修改
+            MaterialsInventory materialsInventory=new MaterialsInventory();
+            materialsInventory.setMaterialCode(item.getMaterialCode());
+            List<MaterialsInventory> materialsInventories = materialsInventoryMapper.selectMaterialsInventoryList(materialsInventory);
+
+            if(materialsInventories.size()>0){
+                //修改入库产品库存数量
+                Long stockQuantity = materialsInventories.get(0).getStockQuantity();//老库存数量
+                Integer newStockQuantity=Integer.parseInt(stockQuantity.toString())-Integer.parseInt(item.getInQuantity().toString());
+                MaterialsInventory materialsInventoryUpdate=new MaterialsInventory();
+                materialsInventoryUpdate.setMaterialCode(materialsInventories.get(0).getMaterialCode());
+                materialsInventoryUpdate.setStockQuantity(Long.valueOf(newStockQuantity.toString()));
+                materialsInventoryMapper.updateMaterialsInventoryByMaterialCode(materialsInventoryUpdate);
+
+                StockOutRecord stockOutRecord=new StockOutRecord();
+                stockOutRecord.setMaterialCode(item.getMaterialCode()); //物料编码
+                stockOutRecord.setMaterialName(item.getMaterialName()); //物料名称
+                stockOutRecord.setModel(item.getModel());//型号
+                stockOutRecord.setSpecification(item.getSpecification());//规格
+                stockOutRecord.setOutQuantity(item.getInQuantity());//入库数量
+                stockOutRecord.setCreateTime(new Date());//创建时间
+                stockOutRecord.setInventoryId(materialsInventories.get(0).getId());
+                stockOutRecord.setCreateBy(SecurityUtils.getUsername());//操作人
+                stockOutRecord.setOperator(SecurityUtils.getUsername());//操作人
+                stockOutRecord.setCreateById(SecurityUtils.getUserId());//操作人id
+                stockOutRecord.setInboundType("手动出库");
+                stockOutRecord.setRkdbh(stockInOrder.getOrderNo());
+
+                stockOutRecordMapper.insertStockOutRecord(stockOutRecord);
+            }
+        });
+        return AjaxResult.success("出库成功");
+    }
+}

+ 97 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/StockOutRecordServiceImpl.java

@@ -0,0 +1,97 @@
+package com.zkqy.amichi.service.impl;
+
+import java.util.List;
+
+import com.zkqy.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.zkqy.amichi.mapper.StockOutRecordMapper;
+import com.zkqy.amichi.domain.StockOutRecord;
+import com.zkqy.amichi.service.IStockOutRecordService;
+
+/**
+ * 半成品出库记录Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-05-14
+ */
+@Service
+public class StockOutRecordServiceImpl implements IStockOutRecordService
+{
+    @Autowired
+    private StockOutRecordMapper stockOutRecordMapper;
+
+    /**
+     * 查询半成品出库记录
+     *
+     * @param id 半成品出库记录主键
+     * @return 半成品出库记录
+     */
+    @Override
+    public StockOutRecord selectStockOutRecordById(Long id)
+    {
+        return stockOutRecordMapper.selectStockOutRecordById(id);
+    }
+
+    /**
+     * 查询半成品出库记录列表
+     *
+     * @param stockOutRecord 半成品出库记录
+     * @return 半成品出库记录
+     */
+    @Override
+    public List<StockOutRecord> selectStockOutRecordList(StockOutRecord stockOutRecord)
+    {
+        return stockOutRecordMapper.selectStockOutRecordList(stockOutRecord);
+    }
+
+    /**
+     * 新增半成品出库记录
+     *
+     * @param stockOutRecord 半成品出库记录
+     * @return 结果
+     */
+    @Override
+    public int insertStockOutRecord(StockOutRecord stockOutRecord)
+    {
+        stockOutRecord.setCreateTime(DateUtils.getNowDate());
+        return stockOutRecordMapper.insertStockOutRecord(stockOutRecord);
+    }
+
+    /**
+     * 修改半成品出库记录
+     *
+     * @param stockOutRecord 半成品出库记录
+     * @return 结果
+     */
+    @Override
+    public int updateStockOutRecord(StockOutRecord stockOutRecord)
+    {
+        stockOutRecord.setUpdateTime(DateUtils.getNowDate());
+        return stockOutRecordMapper.updateStockOutRecord(stockOutRecord);
+    }
+
+    /**
+     * 批量删除半成品出库记录
+     *
+     * @param ids 需要删除的半成品出库记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteStockOutRecordByIds(Long[] ids)
+    {
+        return stockOutRecordMapper.deleteStockOutRecordByIds(ids);
+    }
+
+    /**
+     * 删除半成品出库记录信息
+     *
+     * @param id 半成品出库记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteStockOutRecordById(Long id)
+    {
+        return stockOutRecordMapper.deleteStockOutRecordById(id);
+    }
+}

+ 31 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/utils/PaginationUtils.java

@@ -0,0 +1,31 @@
+package com.zkqy.amichi.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class PaginationUtils {
+    /**
+     * 手动对 List 进行分页
+     *
+     * @param list      原始数据列表
+     * @param pageNum   当前页码(从1开始)
+     * @param pageSize  每页大小
+     * @return 当前页数据
+     */
+    public static <T> List<T> getPage(List<T> list, int pageNum, int pageSize) {
+        if (list == null || list.isEmpty()) {
+            return new ArrayList<>();
+        }
+
+        // 起始索引
+        int fromIndex = (pageNum - 1) * pageSize;
+        // 结束索引(不能超过列表长度)
+        int toIndex = Math.min(pageNum * pageSize, list.size());
+
+        if (fromIndex > toIndex) {
+            return new ArrayList<>(); // 防止越界
+        }
+
+        return list.subList(fromIndex, toIndex);
+    }
+}

+ 64 - 0
zkqy-fujian-amichi/src/main/resources/mapper/ErOrderInfoMapper.xml

@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zkqy.amichi.mapper.ErOrderInfoMapper">
+
+    <resultMap type="com.zkqy.amichi.domain.ErOrderInfo" id="ErOrderInfoResult">
+        <result property="id"    column="id"    />
+        <result property="orderNumber"    column="order_number"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectErOrderInfoVo">
+        select id, order_number, create_time, update_time from fjqydb.er_order_info
+    </sql>
+
+    <select id="selectErOrderInfoList" parameterType="com.zkqy.amichi.domain.ErOrderInfo" resultMap="ErOrderInfoResult">
+        <include refid="selectErOrderInfoVo"/>
+        <where>
+            <if test="orderNumber != null  and orderNumber != ''"> and order_number = #{orderNumber}</if>
+        </where>
+    </select>
+
+    <select id="selectErOrderInfoById" parameterType="Long" resultMap="ErOrderInfoResult">
+        <include refid="selectErOrderInfoVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertErOrderInfo" parameterType="com.zkqy.amichi.domain.ErOrderInfo" useGeneratedKeys="true" keyProperty="id">
+        insert into fjqydb.er_order_info
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="orderNumber != null">order_number,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="orderNumber != null">#{orderNumber},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateErOrderInfo" parameterType="com.zkqy.amichi.domain.ErOrderInfo">
+        update fjqydb.er_order_info
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="orderNumber != null">order_number = #{orderNumber},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteErOrderInfoById" parameterType="Long">
+        delete from fjqydb.er_order_info where id = #{id}
+    </delete>
+
+    <delete id="deleteErOrderInfoByIds" parameterType="String">
+        delete from fjqydb.er_order_info where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 8 - 5
zkqy-fujian-amichi/src/main/resources/mapper/IndoorMaterialInformationMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zkqy.amichi.mapper.IndoorMaterialInformationMapper">
-    
+
     <resultMap type="com.zkqy.amichi.domain.IndoorMaterialInformation" id="IndoorMaterialInformationResult">
         <result property="id" column="id"></result>
         <result property="materialCode"    column="material_code"    />
@@ -17,21 +17,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectIndoorMaterialInformationVo">
-        select material_code, material_name, model, specification, description, unit, group_id,group_name from fjqydb.indoor_material_information
+        select id,material_code, material_name, model, specification, description, unit, group_id,group_name from fjqydb.indoor_material_information
     </sql>
 
     <select id="selectIndoorMaterialInformationList" parameterType="com.zkqy.amichi.domain.IndoorMaterialInformation" resultMap="IndoorMaterialInformationResult">
         <include refid="selectIndoorMaterialInformationVo"/>
-        <where>  
+        <where>
             <if test="materialName != null  and materialName != ''"> and material_name like concat('%', #{materialName}, '%')</if>
+            <if test="materialType != null  and materialType != ''"> and material_name like concat('%', #{materialType}, '%')</if>
             <if test="model != null  and model != ''"> and model = #{model}</if>
             <if test="specification != null  and specification != ''"> and specification = #{specification}</if>
             <if test="description != null  and description != ''"> and description = #{description}</if>
             <if test="unit != null  and unit != ''"> and unit = #{unit}</if>
             <if test="groupId != null "> and group_id = #{groupId}</if>
+            <if test="groupName != null "> and group_name = #{groupName}</if>
         </where>
     </select>
-    
+
     <select id="selectIndoorMaterialInformationByMaterialCode" parameterType="String" resultMap="IndoorMaterialInformationResult">
         <include refid="selectIndoorMaterialInformationVo"/>
         where material_code = #{materialCode}
@@ -99,6 +101,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="materialCode != null">#{materialCode},</if>
+            <if test="materialName != null and materialName != ''">#{materialName},</if>
             <if test="model != null">#{model},</if>
             <if test="specification != null">#{specification},</if>
             <if test="description != null">#{description},</if>
@@ -158,4 +161,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{materialCode}
         </foreach>
     </delete>
-</mapper>
+</mapper>

+ 19 - 6
zkqy-fujian-amichi/src/main/resources/mapper/IndoorPlanInformationMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zkqy.amichi.mapper.IndoorPlanInformationMapper">
-    
+
     <resultMap type="com.zkqy.amichi.domain.IndoorPlanInformation" id="IndoorPlanInformationResult">
         <result property="id"    column="id"    />
         <result property="taskId"    column="task_id"    />
@@ -19,12 +19,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectIndoorPlanInformationVo">
-        select id, task_id, material_code, material_name, material_model, material_specification, production_time, task_quantity, plan_status, product_description, remarks from fjqydb.indoor_plan_information
+        select id, task_id, material_code, material_name, material_model, material_specification, production_time, task_quantity, plan_status, product_description, remarks,quantityOfPallets,ofPalletsTatal from fjqydb.indoor_plan_information
     </sql>
 
     <select id="selectIndoorPlanInformationList" parameterType="com.zkqy.amichi.domain.IndoorPlanInformation" resultMap="IndoorPlanInformationResult">
         <include refid="selectIndoorPlanInformationVo"/>
-        <where>  
+        <where>
             <if test="taskId != null  and taskId != ''"> and task_id = #{taskId}</if>
             <if test="materialCode != null  and materialCode != ''"> and material_code = #{materialCode}</if>
             <if test="materialName != null  and materialName != ''"> and material_name like concat('%', #{materialName}, '%')</if>
@@ -37,12 +37,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="remarks != null  and remarks != ''"> and remarks = #{remarks}</if>
         </where>
     </select>
-    
+
     <select id="selectIndoorPlanInformationById" parameterType="Long" resultMap="IndoorPlanInformationResult">
         <include refid="selectIndoorPlanInformationVo"/>
         where id = #{id}
     </select>
-        
+    <select id="selectIndoorPlanInformationByIdList" resultType="com.zkqy.amichi.domain.IndoorPlanInformation">
+        <include refid="selectIndoorPlanInformationVo"/>
+        where id in
+        <foreach item="id" collection="list" open="(" separator="," close=")">
+          #{id}
+        </foreach>
+    </select>
+
     <insert id="insertIndoorPlanInformation" parameterType="com.zkqy.amichi.domain.IndoorPlanInformation" useGeneratedKeys="true" keyProperty="id">
         insert into fjqydb.indoor_plan_information
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -56,6 +63,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="planStatus != null and planStatus != ''">plan_status,</if>
             <if test="productDescription != null">product_description,</if>
             <if test="remarks != null">remarks,</if>
+            <if test="quantityOfPallets!=null">quantityOfPallets,</if>
+            <if test="ofPalletsTatal!=null">ofPalletsTatal</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="taskId != null and taskId != ''">#{taskId},</if>
@@ -68,6 +77,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="planStatus != null and planStatus != ''">#{planStatus},</if>
             <if test="productDescription != null">#{productDescription},</if>
             <if test="remarks != null">#{remarks},</if>
+            <if test="quantityOfPallets!=null">#{quantityOfPallets},</if>
+            <if test="ofPalletsTatal!=null">#{ofPalletsTatal}</if>
          </trim>
     </insert>
 
@@ -84,6 +95,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="planStatus != null and planStatus != ''">plan_status = #{planStatus},</if>
             <if test="productDescription != null">product_description = #{productDescription},</if>
             <if test="remarks != null">remarks = #{remarks},</if>
+            <if test="quantityOfPallets!=null">quantityOfPallets=#{quantityOfPallets},</if>
+            <if test="ofPalletsTatal!=null">ofPalletsTatal=#{ofPalletsTatal}</if>
         </trim>
         where id = #{id}
     </update>
@@ -98,4 +111,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{id}
         </foreach>
     </delete>
-</mapper>
+</mapper>

+ 7 - 5
zkqy-fujian-amichi/src/main/resources/mapper/IndoorProductionGroupInformationMapper.xml

@@ -3,7 +3,7 @@
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zkqy.amichi.mapper.IndoorProductionGroupInformationMapper">
-    
+
     <resultMap type="com.zkqy.amichi.domain.IndoorProductionGroupInformation" id="IndoorProductionGroupInformationResult">
         <result property="id"    column="id"    />
         <result property="groupName"    column="group_name"    />
@@ -16,24 +16,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectIndoorProductionGroupInformationList" parameterType="com.zkqy.amichi.domain.IndoorProductionGroupInformation" resultMap="IndoorProductionGroupInformationResult">
         <include refid="selectIndoorProductionGroupInformationVo"/>
-        <where>  
+        <where>
             <if test="groupName != null  and groupName != ''"> and group_name like concat('%', #{groupName}, '%')</if>
             <if test="parentId != null  and parentId != ''"> and parent_id = #{parentId}</if>
         </where>
     </select>
-    
+
     <select id="selectIndoorProductionGroupInformationById" parameterType="Long" resultMap="IndoorProductionGroupInformationResult">
         <include refid="selectIndoorProductionGroupInformationVo"/>
         where id = #{id}
     </select>
-        
+
     <insert id="insertIndoorProductionGroupInformation" parameterType="com.zkqy.amichi.domain.IndoorProductionGroupInformation" useGeneratedKeys="true" keyProperty="id">
         insert into fjqydb.indoor_production_group_information
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="groupName != null and groupName != ''">group_name,</if>
+            <if test="parentId != null and parentId != ''">parent_id,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="groupName != null and groupName != ''">#{groupName},</if>
+            <if test="parentId != null and parentId != ''">#{parentId},</if>
          </trim>
     </insert>
 
@@ -70,4 +72,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{id}
         </foreach>
     </delete>
-</mapper>
+</mapper>

+ 5 - 5
zkqy-fujian-amichi/src/main/resources/mapper/MaterialInfoMapper.xml

@@ -145,7 +145,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <insert id="batchInsert" parameterType="java.util.List">
         <!-- 使用foreach遍历list中的每一个元素 -->
         <foreach item="item"  collection="list"  separator =";">
-            insert into {DBNAME}.materialInfo
+            insert into fjqydb.materialInfo
             <trim prefix="(" suffix=")" suffixOverrides=",">
                 <if test="item.materialCode != null">material_code,</if>
                 <if test="item.materialName != null">material_name,</if>
@@ -273,7 +273,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </insert>
 
     <update id="updateMaterialInfo" parameterType="com.zkqy.amichi.domain.MaterialInfo">
-        update {DBNAME}.materialInfo
+        update fjqydb.materialInfo
         <trim prefix="SET" suffixOverrides=",">
             <if test="materialCode != null and materialCode != ''">material_code = #{materialCode},</if>
             <if test="materialName != null and materialName != ''">material_name = #{materialName},</if>
@@ -306,7 +306,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where id = #{id}
     </update>
     <update id="updateMaterialInfoByCode">
-        update {DBNAME}.materialInfo
+        update fjqydb.materialInfo
         <trim prefix="SET" suffixOverrides=",">
             <if test="materialCode != null and materialCode != ''">material_code = #{materialCode},</if>
             <if test="materialName != null and materialName != ''">material_name = #{materialName},</if>
@@ -355,9 +355,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteMaterialInfoByIds" parameterType="String">
-        delete from {DBNAME}.materialInfo where id in
+        delete from fjqydb.materialInfo where id in
         <foreach item="id" collection="array" open="(" separator="," close=")">
             #{id}
         </foreach>
     </delete>
-</mapper>
+</mapper>

+ 129 - 0
zkqy-fujian-amichi/src/main/resources/mapper/MaterialsInventoryMapper.xml

@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zkqy.amichi.mapper.MaterialsInventoryMapper">
+
+    <resultMap type="com.zkqy.amichi.domain.MaterialsInventory" id="MaterialsInventoryResult">
+        <result property="id"    column="id"    />
+        <result property="materialCode"    column="material_code"    />
+        <result property="materialName"    column="material_name"    />
+        <result property="model"    column="model"    />
+        <result property="specification"    column="specification"    />
+        <result property="stockQuantity"    column="stock_quantity"    />
+        <result property="remark"    column="remark"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createById"    column="create_by_id"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateById"    column="update_by_id"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectMaterialsInventoryVo">
+        select id, material_code, material_name, model, specification, stock_quantity, remark, create_by, create_by_id, create_time, update_by, update_by_id, update_time
+        from fjqydb.materials_inventory
+    </sql>
+
+    <select id="selectMaterialsInventoryList" parameterType="com.zkqy.amichi.domain.MaterialsInventory" resultMap="MaterialsInventoryResult">
+        <include refid="selectMaterialsInventoryVo"/>
+        <where>
+            <if test="materialCode != null  and materialCode != ''"> and material_code = #{materialCode}</if>
+            <if test="materialName != null  and materialName != ''"> and material_name like concat('%', #{materialName}, '%')</if>
+            <if test="model != null  and model != ''"> and model = #{model}</if>
+            <if test="specification != null  and specification != ''"> and specification = #{specification}</if>
+            <if test="stockQuantity != null "> and stock_quantity = #{stockQuantity}</if>
+            <if test="createById != null "> and create_by_id = #{createById}</if>
+            <if test="updateById != null "> and update_by_id = #{updateById}</if>
+            <if test="createBy != null "> and create_by = #{createBy}</if>
+            <if test="updateBy != null "> and update_by = #{updateBy}</if>
+            <if test="excitationType!=null">and material_name like concat('%', #{excitationType}, '%')</if>
+            <if test="dyl!=null">and stock_quantity>0</if>
+        </where>
+    </select>
+
+    <select id="selectMaterialsInventoryById" parameterType="Long" resultMap="MaterialsInventoryResult">
+        <include refid="selectMaterialsInventoryVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertMaterialsInventory" parameterType="com.zkqy.amichi.domain.MaterialsInventory" useGeneratedKeys="true" keyProperty="id">
+        insert into fjqydb.materials_inventory
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="materialCode != null and materialCode != ''">material_code,</if>
+            <if test="materialName != null and materialName != ''">material_name,</if>
+            <if test="model != null">model,</if>
+            <if test="specification != null">specification,</if>
+            <if test="stockQuantity != null">stock_quantity,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createById != null">create_by_id,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateById != null">update_by_id,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="materialCode != null and materialCode != ''">#{materialCode},</if>
+            <if test="materialName != null and materialName != ''">#{materialName},</if>
+            <if test="model != null">#{model},</if>
+            <if test="specification != null">#{specification},</if>
+            <if test="stockQuantity != null">#{stockQuantity},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createById != null">#{createById},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateById != null">#{updateById},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateMaterialsInventory" parameterType="com.zkqy.amichi.domain.MaterialsInventory">
+        update fjqydb.materials_inventory
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="materialCode != null and materialCode != ''">material_code = #{materialCode},</if>
+            <if test="materialName != null and materialName != ''">material_name = #{materialName},</if>
+            <if test="model != null">model = #{model},</if>
+            <if test="specification != null">specification = #{specification},</if>
+            <if test="stockQuantity != null">stock_quantity = #{stockQuantity},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createById != null">create_by_id = #{createById},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateById != null">update_by_id = #{updateById},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+    <update id="updateMaterialsInventoryByMaterialCode">
+        update fjqydb.materials_inventory
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="materialCode != null and materialCode != ''">material_code = #{materialCode},</if>
+            <if test="materialName != null and materialName != ''">material_name = #{materialName},</if>
+            <if test="model != null">model = #{model},</if>
+            <if test="specification != null">specification = #{specification},</if>
+            <if test="stockQuantity != null">stock_quantity = #{stockQuantity},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createById != null">create_by_id = #{createById},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateById != null">update_by_id = #{updateById},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where material_code = #{materialCode}
+    </update>
+
+    <delete id="deleteMaterialsInventoryById" parameterType="Long">
+        delete from fjqydb.materials_inventory where id = #{id}
+    </delete>
+
+    <delete id="deleteMaterialsInventoryByIds" parameterType="String">
+        delete from fjqydb.materials_inventory where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 8 - 8
zkqy-fujian-amichi/src/main/resources/mapper/MaterialtransactionlogMapper.xml

@@ -36,12 +36,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectMaterialtransactionlogVo">
-        select id, materialCode, material_name, model, specification, unit, attribute, type_of_operation, quantity, transactionDate,warehousing_time, operator, batchNumber, remark, create_by_id, create_by, create_time, update_by_id, update_by, update_time, del_flag, data_approval_status, process_key, task_process_key, task_node_key, sparea, spareb, sparec from  {DBNAME}.materialtransactionlog
+        select id, materialCode, material_name, model, specification, unit, attribute, type_of_operation, quantity, transactionDate,warehousing_time, operator, batchNumber, remark, create_by_id, create_by, create_time, update_by_id, update_by, update_time, del_flag, data_approval_status, process_key, task_process_key, task_node_key, sparea, spareb, sparec from  fjqydb.materialtransactionlog
     </sql>
 
     <select id="selectMaterialtransactionlogList" parameterType="com.zkqy.amichi.domain.Materialtransactionlog" resultMap="MaterialtransactionlogResult">
         <include refid="selectMaterialtransactionlogVo"/>
-        <where>  
+        <where>
             <if test="materialCode != null  and materialCode != ''"> and materialCode = #{materialCode}</if>
             <if test="materialName != null  and materialName != ''"> and material_name like concat('%', #{materialName}, '%')</if>
             <if test="model != null  and model != ''"> and model = #{model}</if>
@@ -65,7 +65,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="sparec != null  and sparec != ''"> and sparec = #{sparec}</if>
         </where>
     </select>
-    
+
     <select id="selectMaterialtransactionlogById" parameterType="Long" resultMap="MaterialtransactionlogResult">
         <include refid="selectMaterialtransactionlogVo"/>
         where id = #{id}
@@ -79,7 +79,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
     <insert id="insertMaterialtransactionlog" parameterType="com.zkqy.amichi.domain.Materialtransactionlog" useGeneratedKeys="true" keyProperty="id">
-        insert into  {DBNAME}.materialtransactionlog
+        insert into  fjqydb.materialtransactionlog
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="materialCode != null and materialCode != ''">materialCode,</if>
             <if test="materialName != null and materialName != ''">material_name,</if>
@@ -141,7 +141,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </insert>
 
     <update id="updateMaterialtransactionlog" parameterType="com.zkqy.amichi.domain.Materialtransactionlog">
-        update  {DBNAME}.materialtransactionlog
+        update  fjqydb.materialtransactionlog
         <trim prefix="SET" suffixOverrides=",">
             <if test="materialCode != null and materialCode != ''">materialCode = #{materialCode},</if>
             <if test="materialName != null and materialName != ''">material_name = #{materialName},</if>
@@ -174,13 +174,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </update>
 
     <delete id="deleteMaterialtransactionlogById" parameterType="Long">
-        delete from  {DBNAME}.materialtransactionlog where id = #{id}
+        delete from fjqydb.materialtransactionlog where id = #{id}
     </delete>
 
     <delete id="deleteMaterialtransactionlogByIds" parameterType="String">
-        delete from {DBNAME}.materialtransactionlog where id in
+        delete from fjqydb.materialtransactionlog where id in
         <foreach item="id" collection="array" open="(" separator="," close=")">
             #{id}
         </foreach>
     </delete>
-</mapper>
+</mapper>

+ 6 - 6
zkqy-fujian-amichi/src/main/resources/mapper/PocurementdetailsMapper.xml

@@ -2,8 +2,8 @@
 <!DOCTYPE mapper
 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.zkqy.mapper.PocurementdetailsMapper">
-    
+<mapper namespace="com.zkqy.amichi.mapper.PocurementdetailsMapper">
+
     <resultMap type="com.zkqy.amichi.domain.Pocurementdetails" id="PocurementdetailsResult">
         <result property="id"    column="id"    />
         <result property="purchaseId"    column="purchase_id"    />
@@ -38,7 +38,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectPocurementdetailsList" parameterType="com.zkqy.amichi.domain.Pocurementdetails" resultMap="PocurementdetailsResult">
         <include refid="selectPocurementdetailsVo"/>
-        <where>  
+        <where>
             <if test="purchaseId != null  and purchaseId != ''"> and purchase_id = #{purchaseId}</if>
             <if test="organization != null  and organization != ''"> and organization = #{organization}</if>
             <if test="demand != null  and demand != ''"> and demand = #{demand}</if>
@@ -49,12 +49,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="state != null  and state != ''"> and `state` = #{state}</if>
         </where>
     </select>
-    
+
     <select id="selectPocurementdetailsById" parameterType="Long" resultMap="PocurementdetailsResult">
         <include refid="selectPocurementdetailsVo"/>
         where id = #{id}
     </select>
-        
+
     <insert id="insertPocurementdetails" parameterType="com.zkqy.amichi.domain.Pocurementdetails" useGeneratedKeys="true" keyProperty="id">
         insert into  {DBNAME}.pocurementdetails
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -228,4 +228,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{id}
         </foreach>
     </delete>
-</mapper>
+</mapper>

+ 29 - 25
zkqy-fujian-amichi/src/main/resources/mapper/RingScanInformationMapper.xml

@@ -27,6 +27,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         fjqydb.ring_scan_information
         <where>
             <if test="deviceNumber != null  and deviceNumber != ''"> and device_number = #{deviceNumber}</if>
+            and DATE(scanning_time) = CURDATE()
             order by scanning_time desc limit #{offset},#{pageSize}
         </where>
     </select>
@@ -245,18 +246,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         LEFT JOIN fjqydb.procedure_list AS pl ON pl.procedur_name = rsi.process_name
         WHERE
         rsi.execution_mark = '1'
+        <if test="list != null and list.size()>0">
+            and rsi.order_number IN
+            <foreach item="id" collection="list" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
         GROUP BY
         rsi.order_number,rsi.process_name,rsi.native_numbering
         ) AS sub
         LEFT JOIN fjqydb.ring_scan_information_first AS rsif ON ( sub.production_order_number = rsif.production_order_number )
 
         <where>
-            <if test="list != null and list.size()>0">
-                sub.order_number IN
-                <foreach item="id" collection="list" open="(" separator="," close=")">
-                    #{id}
-                </foreach>
-            </if>
+
             <if test="list == null or list.size() == 0">
                 rsi.order_number = 'X'
             </if>
@@ -454,27 +456,28 @@ SELECT
 
     <select id="handHeldJournal" resultType="map" parameterType="com.zkqy.amichi.domain.RingScanInformation">
         SELECT
-            rsif.total_quantity as Dcount,
-            concat(rsi.order_number,'/' ,ptd.model_number) as Dorder,
-            rsi.order_number as DorderName,
-            rsi.production_order_number ,
-            rsi.personnel_name as Uname,
-            rsi.station_name as Ugw,
-            rsi.process_name as processName,
-            SUM( CASE WHEN rsi.execution_mark = 1 THEN 1 ELSE 0 END ) AS dsCount,
-            SUM( CASE WHEN rsi.execution_mark = 2 THEN 1 ELSE 0 END ) As  dfCount
+        rsif.total_quantity as Dcount,
+        concat(rsi.order_number,'/' ,ptd.model_number) as Dorder,
+        rsi.order_number as DorderName,
+        rsi.production_order_number ,
+        rsi.personnel_name as Uname,
+        rsi.station_name as Ugw,
+        rsi.process_name as processName,
+        SUM( CASE WHEN rsi.execution_mark = 1 THEN 1 ELSE 0 END ) AS dsCount,
+        SUM( CASE WHEN rsi.execution_mark = 2 THEN 1 ELSE 0 END ) As  dfCount
         FROM
-            fjqydb.ring_scan_information AS rsi
-                LEFT JOIN fjqydb.ring_scan_information_first AS rsif ON rsi.production_order_number = rsif.production_order_number
-                left join fjqydb.plan_task_details as ptd on rsi.production_order_number=ptd.demand_document
---         where DATE(rsi.scanning_time) = CURDATE() and
-        where
-            rsi.execution_message !='失败-未同步ERP' and  rsi.execution_message !='未绑定-人员-扫描失败' and rsi.execution_message !='失败-已结案'
-           <if test="deviceNumber != null  and deviceNumber != ''"> and device_number = #{deviceNumber}</if>
+        fjqydb.ring_scan_information AS rsi
+        LEFT JOIN fjqydb.ring_scan_information_first AS rsif ON rsi.production_order_number = rsif.production_order_number
+        left join fjqydb.plan_task_details as ptd on rsi.production_order_number=ptd.demand_document
+        where DATE(rsi.scanning_time) = CURDATE() and
+        rsi.execution_message !='失败-未同步ERP' and  rsi.execution_message !='未绑定-人员-扫描失败' and rsi.execution_message !='失败-已结案'
+        <if test="deviceNumber != null  and deviceNumber != ''"> and device_number = #{deviceNumber}</if>
+        <if test="personnelName != null  and personnelName != ''"> and personnel_name = #{personnelName}
+        </if>
         GROUP BY
-            rsi.order_number,
-            rsi.personnel_name,
-            rsi.station_name
+        rsi.order_number,
+        rsi.personnel_name,
+        rsi.station_name
     </select>
     <select id="selectRingScanInformationListisNotNull"
             resultType="com.zkqy.amichi.domain.RingScanInformation">
@@ -497,6 +500,7 @@ SELECT
             </if>
              and order_number is not null
              AND execution_message !='失败-已结案'
+             AND execution_message !='重复扫描'
         </where>
         order by  scanning_time,process_name
     </select>

+ 4 - 12
zkqy-fujian-amichi/src/main/resources/mapper/StationInformationMapper.xml

@@ -64,14 +64,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         si.device_number,
         si.bluetooth_name,
         si.process_id,
-        si.process_name,
-        rt.handheld_terminal_name as device_name
+        si.process_name
         from fjqydb.station_information as si
-        left join fjqydb.ring_terminal as rt
-        on (si.device_number=rt.handheld_terminal_number)
         <where>
-            <if test="stationCode != null  and stationCode != ''"> and si.station_code = #{stationCode}</if>
-            <if test="stationName != null  and stationName != ''"> and si.station_name like concat('%', #{stationName}, '%')</if>
             <if test="personnelId != null  and personnelId != ''"> and si.personnel_id = #{personnelId}</if>
             <if test="personnelName != null  and personnelName != ''"> and si.personnel_name like concat('%', #{personnelName}, '%')</if>
             <if test="deviceId != null  and deviceId != ''"> and si.device_id = #{deviceId}</if>
@@ -82,14 +77,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="processKey != null  and processKey != ''"> and si.process_key = #{processKey}</if>
             <if test="taskProcessKey != null  and taskProcessKey != ''"> and si.task_process_key = #{taskProcessKey}</if>
             <if test="taskNodeKey != null  and taskNodeKey != ''"> and si.task_node_key = #{taskNodeKey}</if>
-            <if test="teamName != null  and teamName != ''"> and ti.team_name = #{teamName}</if>
+            <if test="teamName != null  and teamName != ''"> and si.team_name = #{teamName}</if>
             <if test="teamCode != null  and teamCode != ''"> and si.team_code = #{teamCode}</if>
             <if test="stationType!=null and stationType!=''">and si.station_type=#{stationType}</if>
-            <if test="deviceNumber != null  and deviceNumber != ''"> and   si.device_number = #{deviceNumber}</if>
+            <if test="deviceNumber != null  and deviceNumber != ''"> and si.device_number = #{deviceNumber}</if>
             <if test="bluetoothName!=null and bluetoothName!=''">and si.bluetooth_name=#{bluetoothName}</if>
-            <if test="deviceNumber != null  and deviceNumber != ''"> and   si.device_number = #{deviceNumber}</if>
-            <if test="bluetoothName!=null and bluetoothName!=''">and si.bluetooth_name=#{bluetoothName}</if>
-            <if test="bluetoothName!=null and bluetoothName!=''">and si.process_name=#{processName}</if>
             <if test="processId!=null and processId!=''">and si.process_id=#{processId}</if>
             <if test="processName!=null and processName!=''">and si.process_name=#{processName}</if>
         </where>
@@ -116,7 +108,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
     <insert id="insertStationInformation" parameterType="com.zkqy.amichi.domain.StationInformation" useGeneratedKeys="true" keyProperty="id">
-        insert into {DBNAME}.station_information
+        insert into fjqydb.station_information
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="stationCode != null">station_code,</if>
             <if test="stationName != null">station_name,</if>

+ 117 - 0
zkqy-fujian-amichi/src/main/resources/mapper/StockInOrderDetailMapper.xml

@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zkqy.amichi.mapper.StockInOrderDetailMapper">
+
+    <resultMap type="com.zkqy.amichi.domain.StockInOrderDetail" id="StockInOrderDetailResult">
+        <result property="id"    column="id"    />
+        <result property="stockInOrderId"    column="stock_in_order_id"    />
+        <result property="materialCode"    column="material_code"    />
+        <result property="materialName"    column="material_name"    />
+        <result property="model"    column="model"    />
+        <result property="specification"    column="specification"    />
+        <result property="inQuantity"    column="in_quantity"    />
+        <result property="remark"    column="remark"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createById"    column="create_by_id"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateById"    column="update_by_id"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
+    <sql id="selectStockInOrderDetailVo">
+        select id, stock_in_order_id, material_code, material_name, model, specification, in_quantity,
+               remark, create_by, create_by_id, create_time, update_by, update_by_id, update_time from fjqydb.stock_in_order_detail
+    </sql>
+
+    <select id="selectStockInOrderDetailList" parameterType="com.zkqy.amichi.domain.StockInOrderDetail" resultMap="StockInOrderDetailResult">
+        <include refid="selectStockInOrderDetailVo"/>
+        <where>
+            <if test="stockInOrderId != null "> and stock_in_order_id = #{stockInOrderId}</if>
+            <if test="materialCode != null  and materialCode != ''"> and material_code = #{materialCode}</if>
+            <if test="materialName != null  and materialName != ''"> and material_name like concat('%', #{materialName}, '%')</if>
+            <if test="model != null  and model != ''"> and model = #{model}</if>
+            <if test="specification != null  and specification != ''"> and specification = #{specification}</if>
+            <if test="inQuantity != null "> and in_quantity = #{inQuantity}</if>
+            <if test="createById != null "> and create_by_id = #{createById}</if>
+            <if test="updateById != null "> and update_by_id = #{updateById}</if>
+        </where>
+    </select>
+
+    <select id="selectStockInOrderDetailById" parameterType="Long" resultMap="StockInOrderDetailResult">
+        <include refid="selectStockInOrderDetailVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertStockInOrderDetail" parameterType="com.zkqy.amichi.domain.StockInOrderDetail" useGeneratedKeys="true" keyProperty="id">
+        insert into fjqydb.stock_in_order_detail
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="stockInOrderId != null">stock_in_order_id,</if>
+            <if test="materialCode != null and materialCode != ''">material_code,</if>
+            <if test="materialName != null and materialName != ''">material_name,</if>
+            <if test="model != null">model,</if>
+            <if test="specification != null">specification,</if>
+            <if test="inQuantity != null">in_quantity,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createById != null">create_by_id,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateById != null">update_by_id,</if>
+            <if test="updateTime != null">update_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="stockInOrderId != null">#{stockInOrderId},</if>
+            <if test="materialCode != null and materialCode != ''">#{materialCode},</if>
+            <if test="materialName != null and materialName != ''">#{materialName},</if>
+            <if test="model != null">#{model},</if>
+            <if test="specification != null">#{specification},</if>
+            <if test="inQuantity != null">#{inQuantity},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createById != null">#{createById},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateById != null">#{updateById},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateStockInOrderDetail" parameterType="com.zkqy.amichi.domain.StockInOrderDetail">
+        update fjqydb.stock_in_order_detail
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="stockInOrderId != null">stock_in_order_id = #{stockInOrderId},</if>
+            <if test="materialCode != null and materialCode != ''">material_code = #{materialCode},</if>
+            <if test="materialName != null and materialName != ''">material_name = #{materialName},</if>
+            <if test="model != null">model = #{model},</if>
+            <if test="specification != null">specification = #{specification},</if>
+            <if test="inQuantity != null">in_quantity = #{inQuantity},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createById != null">create_by_id = #{createById},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateById != null">update_by_id = #{updateById},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteStockInOrderDetailById" parameterType="Long">
+        delete from fjqydb.stock_in_order_detail where id = #{id}
+    </delete>
+
+    <delete id="deleteStockInOrderDetailByIds" parameterType="String">
+        delete from fjqydb.stock_in_order_detail where id in
+        <foreach item="id" collection="list" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <delete id="deleteStockInOrderDetailByStockInOrderId">
+        delete from fjqydb.stock_in_order_detail where stock_in_order_id = #{id}
+    </delete>
+
+</mapper>

+ 90 - 0
zkqy-fujian-amichi/src/main/resources/mapper/StockInOrderMapper.xml

@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zkqy.amichi.mapper.StockInOrderMapper">
+
+    <resultMap type="com.zkqy.amichi.domain.StockInOrder" id="StockInOrderResult">
+        <result property="id"    column="id"    />
+        <result property="orderNo"    column="order_no"    />
+        <result property="remark"    column="remark"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createById"    column="create_by_id"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateById"    column="update_by_id"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="type"    column="type"    />
+    </resultMap>
+
+    <sql id="selectStockInOrderVo">
+        select id, order_no, remark, create_by, create_by_id, create_time, update_by, update_by_id, update_time,type from fjqydb.stock_in_out_order
+    </sql>
+
+    <select id="selectStockInOrderList" parameterType="com.zkqy.amichi.domain.StockInOrder" resultMap="StockInOrderResult">
+        <include refid="selectStockInOrderVo"/>
+        <where>
+            <if test="orderNo != null  and orderNo != ''"> and order_no = #{orderNo}</if>
+            <if test="createById != null "> and create_by_id = #{createById}</if>
+            <if test="updateById != null "> and update_by_id = #{updateById}</if>
+            <if test="type!=null">and `type`=#{type}</if>
+        </where>
+    </select>
+
+    <select id="selectStockInOrderById" parameterType="Long" resultMap="StockInOrderResult">
+        <include refid="selectStockInOrderVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertStockInOrder" parameterType="com.zkqy.amichi.domain.StockInOrder" useGeneratedKeys="true" keyProperty="id">
+        insert into fjqydb.stock_in_out_order
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="orderNo != null and orderNo != ''">order_no,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createById != null">create_by_id,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateById != null">update_by_id,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="type!=null"> `type`</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="orderNo != null and orderNo != ''">#{orderNo},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createById != null">#{createById},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateById != null">#{updateById},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="type!=null">#{type}</if>
+         </trim>
+    </insert>
+
+    <update id="updateStockInOrder" parameterType="com.zkqy.amichi.domain.StockInOrder">
+        update fjqydb.stock_in_out_order
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="orderNo != null and orderNo != ''">order_no = #{orderNo},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createById != null">create_by_id = #{createById},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateById != null">update_by_id = #{updateById},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteStockInOrderById" parameterType="Long">
+        delete from fjqydb.stock_in_out_order where id = #{id}
+    </delete>
+
+    <delete id="deleteStockInOrderByIds" parameterType="String">
+        delete from fjqydb.stock_in_out_order where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 148 - 0
zkqy-fujian-amichi/src/main/resources/mapper/StockInRecordMapper.xml

@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zkqy.amichi.mapper.StockInRecordMapper">
+
+    <resultMap type="com.zkqy.amichi.domain.StockInRecord" id="StockInRecordResult">
+        <result property="id"    column="id"    />
+        <result property="inventoryId"    column="inventory_id"    />
+        <result property="materialCode"    column="material_code"    />
+        <result property="materialName"    column="material_name"    />
+        <result property="model"    column="model"    />
+        <result property="specification"    column="specification"    />
+        <result property="inQuantity"    column="in_quantity"    />
+        <result property="operator"    column="operator"    />
+        <result property="djh"    column="djh"    />
+        <result property="djIndex"    column="dj_index"    />
+        <result property="ytps"    column="ytps"    />
+        <result property="tps"    column="tps"    />
+        <result property="remark"    column="remark"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createById"    column="create_by_id"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateById"    column="update_by_id"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="inboundType"    column="Inbound_type"    />
+        <result property="rkdbh" column="rkdbh"></result>
+    </resultMap>
+
+    <sql id="selectStockInRecordVo">
+        select id, inventory_id, material_code, material_name, model, specification,
+               in_quantity, operator, djh, dj_index, ytps, tps, remark, create_by, create_by_id, create_time, update_by, update_by_id, update_time,Inbound_type,rkdbh from
+                                                                                                                                                       fjqydb.stock_in_record
+    </sql>
+
+    <select id="selectStockInRecordList" parameterType="com.zkqy.amichi.domain.StockInRecord" resultMap="StockInRecordResult">
+        <include refid="selectStockInRecordVo"/>
+        <where>
+            <if test="inventoryId != null "> and inventory_id = #{inventoryId}</if>
+            <if test="materialCode != null  and materialCode != ''"> and material_code = #{materialCode}</if>
+            <if test="materialName != null  and materialName != ''"> and material_name like concat('%', #{materialName}, '%')</if>
+            <if test="model != null  and model != ''"> and model = #{model}</if>
+            <if test="specification != null  and specification != ''"> and specification = #{specification}</if>
+            <if test="inQuantity != null "> and in_quantity = #{inQuantity}</if>
+            <if test="operator != null  and operator != ''"> and operator = #{operator}</if>
+            <if test="djh != null  and djh != ''"> and djh = #{djh}</if>
+            <if test="djIndex != null  and djIndex != ''"> and dj_index = #{djIndex}</if>
+            <if test="ytps != null  and ytps != ''"> and ytps = #{ytps}</if>
+            <if test="tps != null  and tps != ''"> and tps = #{tps}</if>
+            <if test="createById != null "> and create_by_id = #{createById}</if>
+            <if test="updateById != null "> and update_by_id = #{updateById}</if>
+            <if test="InboundType!=null"> and Inbound_type = #{InboundType}</if>
+        </where>
+    </select>
+
+    <select id="selectStockInRecordById" parameterType="Long" resultMap="StockInRecordResult">
+        <include refid="selectStockInRecordVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertStockInRecord" parameterType="com.zkqy.amichi.domain.StockInRecord" useGeneratedKeys="true" keyProperty="id">
+        insert into fjqydb.stock_in_record
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="inventoryId != null">inventory_id,</if>
+            <if test="materialCode != null and materialCode != ''">material_code,</if>
+            <if test="materialName != null and materialName != ''">material_name,</if>
+            <if test="model != null">model,</if>
+            <if test="specification != null">specification,</if>
+            <if test="inQuantity != null">in_quantity,</if>
+            <if test="operator != null and operator != ''">operator,</if>
+            <if test="djh != null and djh != ''">djh,</if>
+            <if test="djIndex != null and djIndex != ''">dj_index,</if>
+            <if test="ytps != null and ytps != ''">ytps,</if>
+            <if test="tps != null and tps != ''">tps,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createById != null">create_by_id,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateById != null">update_by_id,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="InboundType!=null">Inbound_type,</if>
+            <if test="rkdbh!=null">rkdbh</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="inventoryId != null">#{inventoryId},</if>
+            <if test="materialCode != null and materialCode != ''">#{materialCode},</if>
+            <if test="materialName != null and materialName != ''">#{materialName},</if>
+            <if test="model != null">#{model},</if>
+            <if test="specification != null">#{specification},</if>
+            <if test="inQuantity != null">#{inQuantity},</if>
+            <if test="operator != null and operator != ''">#{operator},</if>
+            <if test="djh != null and djh != ''">#{djh},</if>
+            <if test="djIndex != null and djIndex != ''">#{djIndex},</if>
+            <if test="ytps != null and ytps != ''">#{ytps},</if>
+            <if test="tps != null and tps != ''">#{tps},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createById != null">#{createById},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateById != null">#{updateById},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="InboundType!=null">#{InboundType},</if>
+            <if test="rkdbh!=null">#{rkdbh}</if>
+         </trim>
+    </insert>
+
+    <update id="updateStockInRecord" parameterType="com.zkqy.amichi.domain.StockInRecord">
+        update fjqydb.stock_in_record
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="inventoryId != null">inventory_id = #{inventoryId},</if>
+            <if test="materialCode != null and materialCode != ''">material_code = #{materialCode},</if>
+            <if test="materialName != null and materialName != ''">material_name = #{materialName},</if>
+            <if test="model != null">model = #{model},</if>
+            <if test="specification != null">specification = #{specification},</if>
+            <if test="inQuantity != null">in_quantity = #{inQuantity},</if>
+            <if test="operator != null and operator != ''">operator = #{operator},</if>
+            <if test="djh != null and djh != ''">djh = #{djh},</if>
+            <if test="djIndex != null and djIndex != ''">dj_index = #{djIndex},</if>
+            <if test="ytps != null and ytps != ''">ytps = #{ytps},</if>
+            <if test="tps != null and tps != ''">tps = #{tps},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createById != null">create_by_id = #{createById},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateById != null">update_by_id = #{updateById},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteStockInRecordById" parameterType="Long">
+        delete from fjqydb.stock_in_record where id = #{id}
+    </delete>
+
+    <delete id="deleteStockInRecordByIds" parameterType="String">
+        delete from fjqydb.stock_in_record where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+    <delete id="deleteStockInRecordByRkdbh" parameterType="String">
+        delete from fjqydb.stock_in_record where rkdbh=#{id}
+    </delete>
+</mapper>

+ 148 - 0
zkqy-fujian-amichi/src/main/resources/mapper/StockOutRecordMapper.xml

@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zkqy.amichi.mapper.StockOutRecordMapper">
+
+    <resultMap type="com.zkqy.amichi.domain.StockOutRecord" id="StockOutRecordResult">
+        <result property="id"    column="id"    />
+        <result property="inventoryId"    column="inventory_id"    />
+        <result property="materialCode"    column="material_code"    />
+        <result property="materialName"    column="material_name"    />
+        <result property="model"    column="model"    />
+        <result property="specification"    column="specification"    />
+        <result property="outQuantity"    column="out_quantity"    />
+        <result property="operator"    column="operator"    />
+        <result property="djh"    column="djh"    />
+        <result property="djIndex"    column="dj_index"    />
+        <result property="ytps"    column="ytps"    />
+        <result property="tps"    column="tps"    />
+        <result property="remark"    column="remark"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createById"    column="create_by_id"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateById"    column="update_by_id"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="rkdbh" column="rkdbh"/>
+        <result property="inboundType" column="Inbound_type"/>
+    </resultMap>
+
+    <sql id="selectStockOutRecordVo">
+        select id, inventory_id, material_code, material_name, model, specification, out_quantity, operator, djh,Inbound_type,rkdbh,
+               dj_index, ytps, tps, remark, create_by, create_by_id, create_time, update_by, update_by_id, update_time from fjqydb.stock_out_record
+    </sql>
+
+    <select id="selectStockOutRecordList" parameterType="StockOutRecord" resultMap="StockOutRecordResult">
+        <include refid="selectStockOutRecordVo"/>
+        <where>
+            <if test="inventoryId != null "> and inventory_id = #{inventoryId}</if>
+            <if test="materialCode != null  and materialCode != ''"> and material_code = #{materialCode}</if>
+            <if test="materialName != null  and materialName != ''"> and material_name like concat('%', #{materialName}, '%')</if>
+            <if test="model != null  and model != ''"> and model = #{model}</if>
+            <if test="specification != null  and specification != ''"> and specification = #{specification}</if>
+            <if test="outQuantity != null "> and out_quantity = #{outQuantity}</if>
+            <if test="operator != null  and operator != ''"> and operator = #{operator}</if>
+            <if test="djh != null  and djh != ''"> and djh = #{djh}</if>
+            <if test="djIndex != null  and djIndex != ''"> and dj_index = #{djIndex}</if>
+            <if test="ytps != null  and ytps != ''"> and ytps = #{ytps}</if>
+            <if test="tps != null  and tps != ''"> and tps = #{tps}</if>
+            <if test="createById != null "> and create_by_id = #{createById}</if>
+            <if test="updateById != null "> and update_by_id = #{updateById}</if>
+             <if test="inboundType!=null">and  Inbound_type=#{inboundType}</if>
+            <if test="rkdbh!=null">and  rkdbh=#{rkdbh}</if>
+        </where>
+    </select>
+
+    <select id="selectStockOutRecordById" parameterType="Long" resultMap="StockOutRecordResult">
+        <include refid="selectStockOutRecordVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertStockOutRecord" parameterType="StockOutRecord" useGeneratedKeys="true" keyProperty="id">
+        insert into fjqydb.stock_out_record
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="inventoryId != null">inventory_id,</if>
+            <if test="materialCode != null and materialCode != ''">material_code,</if>
+            <if test="materialName != null and materialName != ''">material_name,</if>
+            <if test="model != null">model,</if>
+            <if test="specification != null">specification,</if>
+            <if test="outQuantity != null">out_quantity,</if>
+            <if test="operator != null and operator != ''">operator,</if>
+            <if test="djh != null and djh != ''">djh,</if>
+            <if test="djIndex != null and djIndex != ''">dj_index,</if>
+            <if test="ytps != null and ytps != ''">ytps,</if>
+            <if test="tps != null and tps != ''">tps,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createById != null">create_by_id,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateById != null">update_by_id,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="inboundType!=null">Inbound_type,</if>
+            <if test="rkdbh!=null">rkdbh</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="inventoryId != null">#{inventoryId},</if>
+            <if test="materialCode != null and materialCode != ''">#{materialCode},</if>
+            <if test="materialName != null and materialName != ''">#{materialName},</if>
+            <if test="model != null">#{model},</if>
+            <if test="specification != null">#{specification},</if>
+            <if test="outQuantity != null">#{outQuantity},</if>
+            <if test="operator != null and operator != ''">#{operator},</if>
+            <if test="djh != null and djh != ''">#{djh},</if>
+            <if test="djIndex != null and djIndex != ''">#{djIndex},</if>
+            <if test="ytps != null and ytps != ''">#{ytps},</if>
+            <if test="tps != null and tps != ''">#{tps},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createById != null">#{createById},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateById != null">#{updateById},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="inboundType!=null">#{inboundType},</if>
+            <if test="rkdbh!=null">#{rkdbh}</if>
+         </trim>
+    </insert>
+
+    <update id="updateStockOutRecord" parameterType="StockOutRecord">
+        update fjqydb.stock_out_record
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="inventoryId != null">inventory_id = #{inventoryId},</if>
+            <if test="materialCode != null and materialCode != ''">material_code = #{materialCode},</if>
+            <if test="materialName != null and materialName != ''">material_name = #{materialName},</if>
+            <if test="model != null">model = #{model},</if>
+            <if test="specification != null">specification = #{specification},</if>
+            <if test="outQuantity != null">out_quantity = #{outQuantity},</if>
+            <if test="operator != null and operator != ''">operator = #{operator},</if>
+            <if test="djh != null and djh != ''">djh = #{djh},</if>
+            <if test="djIndex != null and djIndex != ''">dj_index = #{djIndex},</if>
+            <if test="ytps != null and ytps != ''">ytps = #{ytps},</if>
+            <if test="tps != null and tps != ''">tps = #{tps},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createById != null">create_by_id = #{createById},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateById != null">update_by_id = #{updateById},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteStockOutRecordById" parameterType="Long">
+        delete from fjqydb.stock_out_record where id = #{id}
+    </delete>
+
+    <delete id="deleteStockOutRecordByIds" parameterType="String">
+        delete from fjqydb.stock_out_record where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+    <delete id="deleteStockInRecordByRkdbh">
+        delete from fjqydb.stock_out_record where rkdbh = #{id}
+    </delete>
+</mapper>

+ 207 - 0
zkqy-system/src/main/java/com/zkqy/system/domain/SysMessage.java

@@ -0,0 +1,207 @@
+package com.zkqy.system.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zkqy.common.annotation.Excel;
+import com.zkqy.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+
+/**
+ * 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。对象 sys_message
+ *
+ * @author hmc
+ * @date 2025-06-30
+ */
+public class SysMessage extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private Long id;
+
+    /**1发送或者 2接收 **/
+    private String fsOrJs= "2";
+
+    public String getFsOrJs() {
+        return fsOrJs;
+    }
+
+    public void setFsOrJs(String fsOrJs) {
+        this.fsOrJs = fsOrJs;
+    }
+
+    /** 接收用户id */
+    @Excel(name = "接收用户id")
+    private Long receiveUserId;
+
+    /** 接收用户id */
+    @Excel(name = "接收用户id")
+    private String receiveUserName;
+
+    /** 发送人id */
+    @Excel(name = "发送人id")
+    private Long sendUserId;
+
+    /** 发送人姓名 */
+    @Excel(name = "发送人姓名")
+    private String sendUserName;
+
+    /** 消息类型(普通消息,告警消息) */
+    @Excel(name = "消息类型(普通消息,告警消息)")
+    private String type;
+
+    /** 消息标题 */
+    @Excel(name = "消息标题")
+    private String title;
+
+    /** 消息内容 */
+    @Excel(name = "消息内容")
+    private String content;
+
+    /** 是否已读 0未读 1已读 */
+    @Excel(name = "是否已读 0未读 1已读")
+    private Integer isRead;
+
+    /** 状态 0正常 1删除 */
+    @Excel(name = "状态 0正常 1删除")
+    private Integer status;
+
+    /** 阅读时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "阅读时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date readTime;
+
+    /** 扩展字段(如跳转链接、相关业务ID等) */
+    @Excel(name = "扩展字段", readConverterExp = "如=跳转链接、相关业务ID等")
+    private String extra;
+
+    public void setId(Long id)
+    {
+        this.id = id;
+    }
+
+    public Long getId()
+    {
+        return id;
+    }
+    public void setReceiveUserId(Long receiveUserId)
+    {
+        this.receiveUserId = receiveUserId;
+    }
+
+    public Long getReceiveUserId()
+    {
+        return receiveUserId;
+    }
+    public void setReceiveUserName(String receiveUserName)
+    {
+        this.receiveUserName = receiveUserName;
+    }
+
+    public String getReceiveUserName()
+    {
+        return receiveUserName;
+    }
+    public void setSendUserId(Long sendUserId)
+    {
+        this.sendUserId = sendUserId;
+    }
+
+    public Long getSendUserId()
+    {
+        return sendUserId;
+    }
+    public void setSendUserName(String sendUserName)
+    {
+        this.sendUserName = sendUserName;
+    }
+
+    public String getSendUserName()
+    {
+        return sendUserName;
+    }
+    public void setType(String type)
+    {
+        this.type = type;
+    }
+
+    public String getType()
+    {
+        return type;
+    }
+    public void setTitle(String title)
+    {
+        this.title = title;
+    }
+
+    public String getTitle()
+    {
+        return title;
+    }
+    public void setContent(String content)
+    {
+        this.content = content;
+    }
+
+    public String getContent()
+    {
+        return content;
+    }
+    public void setIsRead(Integer isRead)
+    {
+        this.isRead = isRead;
+    }
+
+    public Integer getIsRead()
+    {
+        return isRead;
+    }
+    public void setStatus(Integer status)
+    {
+        this.status = status;
+    }
+
+    public Integer getStatus()
+    {
+        return status;
+    }
+    public void setReadTime(Date readTime)
+    {
+        this.readTime = readTime;
+    }
+
+    public Date getReadTime()
+    {
+        return readTime;
+    }
+    public void setExtra(String extra)
+    {
+        this.extra = extra;
+    }
+
+    public String getExtra()
+    {
+        return extra;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("receiveUserId", getReceiveUserId())
+            .append("receiveUserName", getReceiveUserName())
+            .append("sendUserId", getSendUserId())
+            .append("sendUserName", getSendUserName())
+            .append("type", getType())
+            .append("title", getTitle())
+            .append("content", getContent())
+            .append("isRead", getIsRead())
+            .append("status", getStatus())
+            .append("createTime", getCreateTime())
+            .append("readTime", getReadTime())
+            .append("extra", getExtra())
+            .toString();
+    }
+}

+ 61 - 0
zkqy-system/src/main/java/com/zkqy/system/mapper/SysMessageMapper.java

@@ -0,0 +1,61 @@
+package com.zkqy.system.mapper;
+
+import java.util.List;
+import com.zkqy.system.domain.SysMessage;
+
+/**
+ * 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。Mapper接口
+ * 
+ * @author hmc
+ * @date 2025-06-30
+ */
+public interface SysMessageMapper 
+{
+    /**
+     * 查询系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     * 
+     * @param id 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。主键
+     * @return 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     */
+    public SysMessage selectSysMessageById(Long id);
+
+    /**
+     * 查询系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。列表
+     * 
+     * @param sysMessage 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     * @return 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。集合
+     */
+    public List<SysMessage> selectSysMessageList(SysMessage sysMessage);
+
+    /**
+     * 新增系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     * 
+     * @param sysMessage 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     * @return 结果
+     */
+    public int insertSysMessage(SysMessage sysMessage);
+
+    /**
+     * 修改系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     * 
+     * @param sysMessage 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     * @return 结果
+     */
+    public int updateSysMessage(SysMessage sysMessage);
+
+    /**
+     * 删除系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     * 
+     * @param id 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。主键
+     * @return 结果
+     */
+    public int deleteSysMessageById(Long id);
+
+    /**
+     * 批量删除系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteSysMessageByIds(Long[] ids);
+}

+ 61 - 0
zkqy-system/src/main/java/com/zkqy/system/service/ISysMessageService.java

@@ -0,0 +1,61 @@
+package com.zkqy.system.service;
+
+import java.util.List;
+import com.zkqy.system.domain.SysMessage;
+
+/**
+ * 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。Service接口
+ * 
+ * @author hmc
+ * @date 2025-06-30
+ */
+public interface ISysMessageService 
+{
+    /**
+     * 查询系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     * 
+     * @param id 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。主键
+     * @return 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     */
+    public SysMessage selectSysMessageById(Long id);
+
+    /**
+     * 查询系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。列表
+     * 
+     * @param sysMessage 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     * @return 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。集合
+     */
+    public List<SysMessage> selectSysMessageList(SysMessage sysMessage);
+
+    /**
+     * 新增系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     * 
+     * @param sysMessage 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     * @return 结果
+     */
+    public int insertSysMessage(SysMessage sysMessage);
+
+    /**
+     * 修改系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     * 
+     * @param sysMessage 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     * @return 结果
+     */
+    public int updateSysMessage(SysMessage sysMessage);
+
+    /**
+     * 批量删除系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     * 
+     * @param ids 需要删除的系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。主键集合
+     * @return 结果
+     */
+    public int deleteSysMessageByIds(Long[] ids);
+
+    /**
+     * 删除系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。信息
+     * 
+     * @param id 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。主键
+     * @return 结果
+     */
+    public int deleteSysMessageById(Long id);
+}

+ 108 - 0
zkqy-system/src/main/java/com/zkqy/system/service/impl/SysMessageServiceImpl.java

@@ -0,0 +1,108 @@
+package com.zkqy.system.service.impl;
+
+import java.util.Date;
+import java.util.List;
+
+import com.zkqy.common.core.domain.entity.SysUser;
+import com.zkqy.common.utils.DateUtils;
+import com.zkqy.common.utils.SecurityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.zkqy.system.mapper.SysMessageMapper;
+import com.zkqy.system.domain.SysMessage;
+import com.zkqy.system.service.ISysMessageService;
+
+/**
+ * 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。Service业务层处理
+ *
+ * @author hmc
+ * @date 2025-06-30
+ */
+@Service
+public class SysMessageServiceImpl implements ISysMessageService
+{
+    @Autowired
+    private SysMessageMapper sysMessageMapper;
+
+    @Autowired
+    private  SysUserServiceImpl userService;
+
+    /**
+     * 查询系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     *
+     * @param id 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。主键
+     * @return 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     */
+    @Override
+    public SysMessage selectSysMessageById(Long id)
+    {
+        return sysMessageMapper.selectSysMessageById(id);
+    }
+
+    /**
+     * 查询系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。列表
+     *
+     * @param sysMessage 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     * @return 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     */
+    @Override
+    public List<SysMessage> selectSysMessageList(SysMessage sysMessage)
+    {
+        return sysMessageMapper.selectSysMessageList(sysMessage);
+    }
+
+    /**
+     * 新增系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     *
+     * @param sysMessage 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     * @return 结果
+     */
+    @Override
+    public int insertSysMessage(SysMessage sysMessage)
+    {
+        sysMessage.setCreateTime(DateUtils.getNowDate());
+        sysMessage.setSendUserId(SecurityUtils.getUserId());//发送人
+        sysMessage.setSendUserName(SecurityUtils.getUsername());//发送人姓名
+//        sysMessage.setReceiveUserName(SecurityUtils.);
+        SysUser sysUser = userService.selectUserById(sysMessage.getReceiveUserId());
+        sysMessage.setReceiveUserName(sysUser.getUserName());//接收人姓名
+        return sysMessageMapper.insertSysMessage(sysMessage);
+    }
+
+    /**
+     * 修改系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     *
+     * @param sysMessage 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     * @return 结果
+     */
+    @Override
+    public int updateSysMessage(SysMessage sysMessage)
+    {
+        sysMessage.setReadTime(new Date());//阅读时间
+        return sysMessageMapper.updateSysMessage(sysMessage);
+    }
+
+    /**
+     * 批量删除系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。
+     *
+     * @param ids 需要删除的系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。主键
+     * @return 结果
+     */
+    @Override
+    public int deleteSysMessageByIds(Long[] ids)
+    {
+        return sysMessageMapper.deleteSysMessageByIds(ids);
+    }
+
+    /**
+     * 删除系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。信息
+     *
+     * @param id 系统消息,这张没有必要区分是哪个租户的,因为用户id是唯一的。主键
+     * @return 结果
+     */
+    @Override
+    public int deleteSysMessageById(Long id)
+    {
+        return sysMessageMapper.deleteSysMessageById(id);
+    }
+}

+ 110 - 0
zkqy-system/src/main/resources/mapper/system/SysMessageMapper.xml

@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zkqy.system.mapper.SysMessageMapper">
+    
+    <resultMap type="SysMessage" id="SysMessageResult">
+        <result property="id"    column="id"    />
+        <result property="receiveUserId"    column="receive_user_id"    />
+        <result property="receiveUserName"    column="receive_user_name"    />
+        <result property="sendUserId"    column="send_user_id"    />
+        <result property="sendUserName"    column="send_user_name"    />
+        <result property="type"    column="type"    />
+        <result property="title"    column="title"    />
+        <result property="content"    column="content"    />
+        <result property="isRead"    column="is_read"    />
+        <result property="status"    column="status"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="readTime"    column="read_time"    />
+        <result property="extra"    column="extra"    />
+    </resultMap>
+
+    <sql id="selectSysMessageVo">
+        select id, receive_user_id, receive_user_name, send_user_id, send_user_name, type, title, content, is_read, status, create_time, read_time, extra from sys_message
+    </sql>
+
+    <select id="selectSysMessageList" parameterType="SysMessage" resultMap="SysMessageResult">
+        <include refid="selectSysMessageVo"/>
+        <where>  
+            <if test="receiveUserId != null "> and receive_user_id = #{receiveUserId}</if>
+            <if test="receiveUserName != null "> and receive_user_name like concat('%', #{receiveUserName}, '%')</if>
+            <if test="sendUserId != null "> and send_user_id = #{sendUserId}</if>
+            <if test="sendUserName != null "> and send_user_name like concat('%', #{sendUserName}, '%')</if>
+            <if test="type != null  and type != ''"> and type = #{type}</if>
+            <if test="title != null  and title != ''"> and title = #{title}</if>
+            <if test="content != null  and content != ''"> and content = #{content}</if>
+            <if test="isRead != null "> and is_read = #{isRead}</if>
+            <if test="status != null "> and status = #{status}</if>
+            <if test="readTime != null "> and read_time = #{readTime}</if>
+            <if test="extra != null  and extra != ''"> and extra = #{extra}</if>
+        </where>
+    </select>
+    
+    <select id="selectSysMessageById" parameterType="Long" resultMap="SysMessageResult">
+        <include refid="selectSysMessageVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertSysMessage" parameterType="SysMessage" useGeneratedKeys="true" keyProperty="id">
+        insert into sys_message
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="receiveUserId != null">receive_user_id,</if>
+            <if test="receiveUserName != null">receive_user_name,</if>
+            <if test="sendUserId != null">send_user_id,</if>
+            <if test="sendUserName != null">send_user_name,</if>
+            <if test="type != null and type != ''">type,</if>
+            <if test="title != null and title != ''">title,</if>
+            <if test="content != null and content != ''">content,</if>
+            <if test="isRead != null">is_read,</if>
+            <if test="status != null">status,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="readTime != null">read_time,</if>
+            <if test="extra != null">extra,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="receiveUserId != null">#{receiveUserId},</if>
+            <if test="receiveUserName != null">#{receiveUserName},</if>
+            <if test="sendUserId != null">#{sendUserId},</if>
+            <if test="sendUserName != null">#{sendUserName},</if>
+            <if test="type != null and type != ''">#{type},</if>
+            <if test="title != null and title != ''">#{title},</if>
+            <if test="content != null and content != ''">#{content},</if>
+            <if test="isRead != null">#{isRead},</if>
+            <if test="status != null">#{status},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="readTime != null">#{readTime},</if>
+            <if test="extra != null">#{extra},</if>
+         </trim>
+    </insert>
+
+    <update id="updateSysMessage" parameterType="SysMessage">
+        update sys_message
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="receiveUserId != null">receive_user_id = #{receiveUserId},</if>
+            <if test="receiveUserName != null">receive_user_name = #{receiveUserName},</if>
+            <if test="sendUserId != null">send_user_id = #{sendUserId},</if>
+            <if test="sendUserName != null">send_user_name = #{sendUserName},</if>
+            <if test="type != null and type != ''">type = #{type},</if>
+            <if test="title != null and title != ''">title = #{title},</if>
+            <if test="content != null and content != ''">content = #{content},</if>
+            <if test="isRead != null">is_read = #{isRead},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="readTime != null">read_time = #{readTime},</if>
+            <if test="extra != null">extra = #{extra},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteSysMessageById" parameterType="Long">
+        delete from sys_message where id = #{id}
+    </delete>
+
+    <delete id="deleteSysMessageByIds" parameterType="String">
+        delete from sys_message where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 10 - 9
zkqy-system/src/main/resources/mapper/system/SysTenantMapper.xml

@@ -4,7 +4,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.zkqy.system.mapper.SysTenantMapper">
 
-    <resultMap type="SysTenant" id="SysTenantResult">
+    <resultMap type="com.zkqy.common.core.domain.entity.SysTenant" id="SysTenantResult">
         <result property="tenantId" column="tenant_id"/>
         <result property="tenantName" column="tenant_name"/>
         <result property="tenantCode" column="tenant_code"/>
@@ -21,7 +21,7 @@
         <result property="tenantClientLoginUrl" column="tenant_client_login_url"/>
         <result property="tenantWechatIndexUrl" column="tenant_wechat_index_url"/>
         <result property="tenantGrade" column="tenant_grade"/>
-
+        <result property="machineCode" column="machine_code"/>
     </resultMap>
 
     <sql id="selectSysTenantVo">
@@ -40,12 +40,13 @@
                tenant_tool_login_url,
                tenant_client_login_url,
                tenant_wechat_index_url,
-               tenant_grade
+               tenant_grade,
+               machine_code
         from sys_tenant
         where is_del = '0'
     </sql>
 
-    <select id="selectSysTenantList" parameterType="SysTenant" resultMap="SysTenantResult">
+    <select id="selectSysTenantList" parameterType="com.zkqy.common.core.domain.entity.SysTenant" resultMap="SysTenantResult">
         <include refid="selectSysTenantVo"/>
         and tenant_parent_id = 0
         <if test="tenantName != null  and tenantName != ''">and tenant_name like concat('%', #{tenantName}, '%')</if>
@@ -56,7 +57,7 @@
         <if test="isDel != null  and isDel != ''">and is_del = #{isDel}</if>
         order by tenant_id desc
     </select>
-    <select id="selectSysTenantAllList" parameterType="SysTenant" resultMap="SysTenantResult">
+    <select id="selectSysTenantAllList" parameterType="com.zkqy.common.core.domain.entity.SysTenant" resultMap="SysTenantResult">
         <include refid="selectSysTenantVo"/>
         <if test="tenantParentId != null  and tenantParentId != ''">and tenant_parent_id = #{tenantParentId}</if>
         <if test="tenantName != null  and tenantName != ''">and tenant_name like concat('%', #{tenantName}, '%')</if>
@@ -75,13 +76,13 @@
     <select id="selectSysTenantByTenantCode" parameterType="string" resultMap="SysTenantResult">
         <include refid="selectSysTenantVo"/>
         and tenant_code = #{tenantCode}
-    </select> 
+    </select>
     <select id="selectSysTenantChildrenInfoByTenantId" parameterType="Long" resultMap="SysTenantResult">
         <include refid="selectSysTenantVo"/>
         and tenant_parent_id = #{tenantId}
     </select>
 
-    <insert id="insertSysTenant" parameterType="SysTenant" useGeneratedKeys="true" keyProperty="tenantId">
+    <insert id="insertSysTenant" parameterType="com.zkqy.common.core.domain.entity.SysTenant" useGeneratedKeys="true" keyProperty="tenantId">
         insert into sys_tenant
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="tenantName != null and tenantName != ''">tenant_name,</if>
@@ -117,7 +118,7 @@
         </trim>
     </insert>
 
-    <update id="updateSysTenant" parameterType="SysTenant">
+    <update id="updateSysTenant" parameterType="com.zkqy.common.core.domain.entity.SysTenant">
         update sys_tenant
         <trim prefix="SET" suffixOverrides=",">
             <if test="tenantName != null and tenantName != ''">tenant_name = #{tenantName},</if>
@@ -150,4 +151,4 @@
             #{tenantId}
         </foreach>
     </update>
-</mapper>
+</mapper>

+ 2 - 2
zkqy-ui/.env.production

@@ -12,13 +12,13 @@ VUE_APP_BASE_API = '/prod-api'
 #VUE_APP_BASE_API1 = 'http://192.168.2.135:8066/'
 #VUE_APP_BASE_API1 = 'http://192.168.3.17:8066/'
 #VUE_APP_BASE_API1 = 'http://192.168.110.83:8066/'
-VUE_APP_BASE_API1 = 'http://175.27.169.173:8066/'
+VUE_APP_BASE_API1 = 'http://192.168.3.17:8066/'
 
 
 # 图片路径
 #VUE_APP_BASE_IMG_API = 'http://192.168.3.17:1024/prod-api'
 #VUE_APP_BASE_IMG_API = 'http://192.168.110.83:1025/prod-api'
-VUE_APP_BASE_IMG_API = 'http://175.27.169.173:1025/prod-api'
+VUE_APP_BASE_IMG_API = 'http://192.168.3.17:1025/prod-api'
 
 # ws地址
 VUE_APP_BASE_WS_API = '//127.0.0.1:8721'

BIN
zkqy-ui/public/notify.mp3


+ 44 - 0
zkqy-ui/src/api/amichi/ercsm/info.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询towScan列表
+export function listInfo(query) {
+  return request({
+    url: '/ercsm/info/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询towScan详细
+export function getInfo(id) {
+  return request({
+    url: '/ercsm/info/' + id,
+    method: 'get'
+  })
+}
+
+// 新增towScan
+export function addInfo(data) {
+  return request({
+    url: '/ercsm/info',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改towScan
+export function updateInfo(data) {
+  return request({
+    url: '/ercsm/info',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除towScan
+export function delInfo(id) {
+  return request({
+    url: '/ercsm/info/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
zkqy-ui/src/api/amichi/indoor/ckRecord.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询半成品出库记录列表
+export function listRecord(query) {
+  return request({
+    url: '/indoor/record/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询半成品出库记录详细
+export function getRecord(id) {
+  return request({
+    url: '/indoor/record/' + id,
+    method: 'get'
+  })
+}
+
+// 新增半成品出库记录
+export function addRecord(data) {
+  return request({
+    url: '/indoor/record',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改半成品出库记录
+export function updateRecord(data) {
+  return request({
+    url: '/indoor/record',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除半成品出库记录
+export function delRecord(id) {
+  return request({
+    url: '/indoor/record/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
zkqy-ui/src/api/amichi/indoor/detail.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询半成品入库单明细列表
+export function listDetail(query) {
+  return request({
+    url: '/indoor/detail/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询半成品入库单明细详细
+export function getDetail(id) {
+  return request({
+    url: '/indoor/detail/' + id,
+    method: 'get'
+  })
+}
+
+// 新增半成品入库单明细
+export function addDetail(data) {
+  return request({
+    url: '/indoor/detail',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改半成品入库单明细
+export function updateDetail(data) {
+  return request({
+    url: '/indoor/detail',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除半成品入库单明细
+export function delDetail(id) {
+  return request({
+    url: '/indoor/detail/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
zkqy-ui/src/api/amichi/indoor/inventory.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询半成品库存列表
+export function listInventory(query) {
+  return request({
+    url: '/indoor/inventory/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询半成品库存详细
+export function getInventory(id) {
+  return request({
+    url: '/indoor/inventory/' + id,
+    method: 'get'
+  })
+}
+
+// 新增半成品库存
+export function addInventory(data) {
+  return request({
+    url: '/indoor/inventory',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改半成品库存
+export function updateInventory(data) {
+  return request({
+    url: '/indoor/inventory',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除半成品库存
+export function delInventory(id) {
+  return request({
+    url: '/indoor/inventory/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
zkqy-ui/src/api/amichi/indoor/material.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询场内物料信息列表
+export function listIndoorMaterial(query) {
+  return request({
+    url: '/indoorMaterialInformation/information/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询场内物料信息详细
+export function getIndoorMaterial(id) {
+  return request({
+    url: '/indoorMaterialInformation/information/' + id,
+    method: 'get'
+  })
+}
+
+// 新增场内物料信息
+export function addIndoorMaterial(data) {
+  return request({
+    url: '/indoorMaterialInformation/information',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改场内物料信息
+export function updateIndoorMaterial(data) {
+  return request({
+    url: '/indoorMaterialInformation/information',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除场内物料信息
+export function delIndoorMaterial(id) {
+  return request({
+    url: '/indoorMaterialInformation/information/' + id,
+    method: 'delete'
+  })
+} 

+ 52 - 0
zkqy-ui/src/api/amichi/indoor/order.js

@@ -0,0 +1,52 @@
+import request from '@/utils/request'
+
+// 查询半成品入库单主列表
+export function listOrder(query) {
+  return request({
+    url: '/indoor/order/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询半成品入库单主详细
+export function getOrder(id) {
+  return request({
+    url: '/indoor/order/' + id,
+    method: 'get'
+  })
+}
+
+// 新增半成品入库单主
+export function addOrder(data) {
+  return request({
+    url: '/indoor/order',
+    method: 'post',
+    data: data
+  })
+}
+
+export function stockInOrderAndOrderDetail(data) {
+  return request({
+    url: '/indoor/order/stockInOrderAndOrderDetail',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改半成品入库单主
+export function updateOrder(data) {
+  return request({
+    url: '/indoor/order',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除半成品入库单主
+export function delOrder(id) {
+  return request({
+    url: '/indoor/order/' + id,
+    method: 'delete'
+  })
+}

+ 54 - 0
zkqy-ui/src/api/amichi/indoor/outOrder.js

@@ -0,0 +1,54 @@
+import request from '@/utils/request'
+
+// 查询半成品入库单主列表
+export function listOrder(query) {
+  return request({
+    url: '/indoor/order/out/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询半成品入库单主详细
+export function getOrder(id) {
+  return request({
+    url: '/indoor/order/out/' + id,
+    method: 'get'
+  })
+}
+
+// 新增半成品入库单主
+export function addOrder(data) {
+  return request({
+    url: '/indoor/order/out/',
+    method: 'post',
+    data: data
+  })
+}
+
+export function stockInOrderAndOrderDetail(data) {
+  return request({
+    url: '/indoor/order/out/stockInOrderAndOrderDetail',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改半成品入库单主
+export function updateOrder(data) {
+  return request({
+    url: '/indoor/order/out/',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除半成品入库单主
+export function delOrder(id) {
+  return request({
+    url: '/indoor/order/out/' + id,
+    method: 'delete'
+  })
+}
+
+//

+ 44 - 0
zkqy-ui/src/api/amichi/indoor/rkRecord.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询半成品入库记录列表
+export function listRecord(query) {
+  return request({
+    url: '/indoor/cnjh/record/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询半成品入库记录详细
+export function getRecord(id) {
+  return request({
+    url: '/indoor/cnjh/record/' + id,
+    method: 'get'
+  })
+}
+
+// 新增半成品入库记录
+export function addRecord(data) {
+  return request({
+    url: '/indoor/cnjh/record',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改半成品入库记录
+export function updateRecord(data) {
+  return request({
+    url: '/indoor/cnjh/record',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除半成品入库记录
+export function delRecord(id) {
+  return request({
+    url: '/indoor/cnjh/record/' + id,
+    method: 'delete'
+  })
+}

+ 2 - 1
zkqy-ui/src/api/amichi/indoorMaterialInformation/information.js

@@ -47,8 +47,9 @@ export function queryMaterialCode(query) {
 
 export function treeList(query) {
   return request({
-    url: "/indoorProductionGroupInfo/information/treeList/"+query.id,
+    url: "/indoorProductionGroupInfo/information/treeList/",
     method: 'get',
+    params: query
   })
 }
 

+ 8 - 0
zkqy-ui/src/api/amichi/indoorPlanInformation/information.js

@@ -42,3 +42,11 @@ export function delInformation(id) {
     method: 'delete'
   })
 }
+export function generateCodeListInformation(query) {
+  return request({
+    url: '/indoorPlanInformation/information/generateCodeListInformation',
+    method: 'get',
+    params: query
+  })
+}
+

+ 5 - 5
zkqy-ui/src/api/amichi/indoorProductionGroupInfo/information.js

@@ -1,7 +1,7 @@
 import request from '@/utils/request'
 
 // 查询分组信息:用于记录各个分组的基本信息列表
-export function listInformation(query) {
+export function listInformationGroup(query) {
   return request({
     url: '/indoorProductionGroupInfo/information/list',
     method: 'get',
@@ -10,7 +10,7 @@ export function listInformation(query) {
 }
 
 // 查询分组信息:用于记录各个分组的基本信息详细
-export function getInformation(id) {
+export function getInformationGroup(id) {
   return request({
     url: '/indoorProductionGroupInfo/information/' + id,
     method: 'get'
@@ -18,7 +18,7 @@ export function getInformation(id) {
 }
 
 // 新增分组信息:用于记录各个分组的基本信息
-export function addInformation(data) {
+export function addInformationGroup(data) {
   return request({
     url: '/indoorProductionGroupInfo/information',
     method: 'post',
@@ -27,7 +27,7 @@ export function addInformation(data) {
 }
 
 // 修改分组信息:用于记录各个分组的基本信息
-export function updateInformation(data) {
+export function updateInformationGroup(data) {
   return request({
     url: '/indoorProductionGroupInfo/information',
     method: 'put',
@@ -36,7 +36,7 @@ export function updateInformation(data) {
 }
 
 // 删除分组信息:用于记录各个分组的基本信息
-export function delInformation(id) {
+export function delInformationGroup(id) {
   return request({
     url: '/indoorProductionGroupInfo/information/' + id,
     method: 'delete'

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно