diff --git a/.idea/encodings.xml b/.idea/encodings.xml index f20d44b..a21b0f0 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -2,6 +2,7 @@ <project version="4"> <component name="Encoding" native2AsciiForPropertiesFiles="true" defaultCharsetForPropertiesFiles="UTF-8"> <file url="file://$PROJECT_DIR$" charset="UTF-8" /> + <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" /> <file url="PROJECT" charset="UTF-8" /> </component> </project> \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 5b5276e..65a5aa1 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,11 +5,61 @@ </component> <component name="ChangeListManager"> <list default="true" id="baeae966-16bb-4f97-a411-22fe5a65cefd" name="Default Changelist" comment=""> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/download/ApkController.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/download/ApkInfo.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/download/Constant.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/general/CompanyInfo.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/general/MobileUserController.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/invenory/InventoryDetails.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/invenory/MobileInventory.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/invenory/MobileInventoryController.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/invenory/ShipmentDetail.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/invenory/TaskIds.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/receipt/MaterialInfo.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/receipt/MobileBatchReceiptController.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/receipt/MobileOneByOneReceiptController.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/receipt/MobilePutawayController.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/receipt/ReceiptBill.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/receipt/ReceiptResult.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/shipment/Materialforecast.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/shipment/MobileShipmentController.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/shipment/MobileTaskForASRSController.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/shipment/Shipment.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/shipment/ShipmentBill.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/shipment/ShipmentTaskModel.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/common/mapper/ApkMapper.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/domain/ReceiptContainerView.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/task/taskHeader/domain/MobileTask.java" afterDir="false" /> + <change afterPath="$PROJECT_DIR$/src/main/resources/mybatis/download/DownloadMapper.xml" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/.idea/compiler.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/compiler.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> - <change beforePath="$PROJECT_DIR$/src/main/resources/templates/config/material/print.html" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/templates/config/material/print.html" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/framework/config/ShiroConfig.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/framework/config/ShiroConfig.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/location/mapper/LocationMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/location/mapper/LocationMapper.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/location/service/LocationService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/location/service/LocationService.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/location/service/LocationServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/location/service/LocationServiceImpl.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/material/mapper/MaterialMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/material/mapper/MaterialMapper.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/material/service/MaterialService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/material/service/MaterialService.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/material/service/MaterialServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/material/service/MaterialServiceImpl.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderService.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderServiceImpl.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderService.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderServiceImpl.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailService.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptHeader/mapper/ReceiptHeaderMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptHeader/mapper/ReceiptHeaderMapper.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderService.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/resources/application-dev.yml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/application-dev.yml" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/resources/mybatis/config/LocationMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/mybatis/config/LocationMapper.xml" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/resources/mybatis/config/MaterialMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/mybatis/config/MaterialMapper.xml" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/resources/mybatis/config/WcsscanbarcodeMapper.xml" beforeDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/resources/mybatis/receipt/ReceiptHeaderMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/mybatis/receipt/ReceiptHeaderMapper.xml" afterDir="false" /> + <change beforePath="$PROJECT_DIR$/src/main/resources/mybatis/xinyi/TokenMapper.xml" beforeDir="false" /> </list> <ignored path="$PROJECT_DIR$/target/" /> <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> + <option name="TRACKING_ENABLED" value="true" /> <option name="SHOW_DIALOG" value="false" /> <option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> @@ -50,33 +100,11 @@ </component> <component name="FileEditorManager"> <leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> - <file pinned="false" current-in-tab="true"> - <entry file="file://$PROJECT_DIR$/src/main/resources/templates/config/material/print.html"> + <file leaf-file-name="MobileBatchReceiptController.java" pinned="false" current-in-tab="true"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/mobile/receipt/MobileBatchReceiptController.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="133"> - <caret line="64" column="29" lean-forward="true" selection-start-line="64" selection-start-column="29" selection-end-line="64" selection-end-column="29" /> - <folding> - <element signature="n#style#0;n#input#0;n#td#1;n#tr#4;n#tbody#0;n#table#0;n#div#0;n#div#1;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#input#0;n#td#1;n#tr#4;n#tbody#0;n#table#0;n#div#0;n#div#1;n#body#0;n#html#0;n#!!top" expanded="true" /> - </folding> - </state> - </provider> - </entry> - </file> - <file pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/src/main/resources/templates/config/material/material.html"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-3041"> - <caret line="67" column="12" selection-start-line="67" selection-start-column="12" selection-end-line="67" selection-end-column="12" /> - </state> - </provider> - </entry> - </file> - <file pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/material/controller/MaterialController.java"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="113"> - <caret line="193" column="28" lean-forward="true" selection-start-line="193" selection-start-column="28" selection-end-line="193" selection-end-column="28" /> + <state relative-caret-position="-1234"> + <caret line="404" column="51" selection-start-line="404" selection-start-column="40" selection-end-line="404" selection-end-column="51" /> </state> </provider> </entry> @@ -96,6 +124,18 @@ <component name="FindBugs-IDEA-Workspace"> <toolWindowEditorPreview>false</toolWindowEditorPreview> </component> + <component name="FindInProjectRecents"> + <findStrings> + <find>materialService</find> + <find>mobileCheckLocationCode</find> + <find>inventoryDetailService</find> + <find>getCompany</find> + <find>getCompanyInfo</find> + <find></insert></find> + <find></insert></find> + <find>insertApkInfo</find> + </findStrings> + </component> <component name="Git.Settings"> <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> <option name="RECENT_BRANCH_BY_REPOSITORY"> @@ -107,30 +147,73 @@ <component name="IdeDocumentHistory"> <option name="CHANGED_PATHS"> <list> - <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/controller/ReceiptApi.java" /> - <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/service/ReceiptApiService.java" /> - <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/shipment/shipmentDetail/service/ShipmentDetailServiceImpl.java" /> - <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/service/ShipmentApiService.java" /> - <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/system/user/service/UserServiceImpl.java" /> - <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/system/user/service/IUserService.java" /> - <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/controller/BasicDataApi.java" /> - <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/domain/InventoryDomain.java" /> - <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/service/BasicDataApiService.java" /> - <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/container/controller/ContainerController.java" /> - <option value="$PROJECT_DIR$/src/main/resources/templates/config/container/container.html" /> - <option value="$USER_HOME$/Desktop/boot/boot/打印二维码 - 多个组2.html" /> - <option value="$PROJECT_DIR$/src/main/resources/static/css/style.css" /> - <option value="$PROJECT_DIR$/src/main/resources/templates/config/container/print.html" /> - <option value="$PROJECT_DIR$/src/main/resources/templates/config/location/location.html" /> - <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/location/controller/LocationController.java" /> - <option value="$PROJECT_DIR$/src/main/resources/templates/config/location/print.html" /> - <option value="$PROJECT_DIR$/src/main/resources/templates/config/material/material.html" /> - <option value="$PROJECT_DIR$/src/main/resources/templates/config/material/report.html" /> <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/material/controller/MaterialController.java" /> <option value="$PROJECT_DIR$/src/main/resources/templates/config/material/print.html" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/inventory/cycleCountHeader/controller/CycleCountHeaderController.java" /> + <option value="$PROJECT_DIR$/src/main/resources/templates/inventory/cycleCountHeader/add.html" /> + <option value="$PROJECT_DIR$/src/main/resources/templates/shipment/shipmentHeader/report.html" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/service/CycleCountService.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/domain/CycCountDomain.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/inventory/cycleCountDetail/controller/CycleCountDetailController.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/controller/CycleCountApi.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/domain/AdjustDomain.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/controller/AdjustApi.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/inventory/adjustDetail/controller/adjustDetailController.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/service/AdjustService.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/service/ReceiptApiService.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/api/general/controller/ReceiptApi.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/general/MobileUserController.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderService.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderServiceImpl.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/invenory/MobileInventoryController.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/task/taskHeader/domain/MobileTask.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/location/mapper/LocationMapper.java" /> + <option value="$PROJECT_DIR$/src/main/resources/mybatis/config/LocationMapper.xml" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailService.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderServiceImpl.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/material/mapper/MaterialMapper.java" /> + <option value="$PROJECT_DIR$/src/main/resources/mybatis/config/MaterialMapper.xml" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderService.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptHeader/mapper/ReceiptHeaderMapper.java" /> + <option value="$PROJECT_DIR$/src/main/resources/mybatis/receipt/ReceiptHeaderMapper.xml" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/location/service/LocationService.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/location/service/LocationServiceImpl.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/shipment/MobileShipmentController.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/receipt/MobilePutawayController.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderService.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/material/service/MaterialService.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/material/service/MaterialServiceImpl.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/wcsScanBarcode/WcsScanBarcodeController.java" /> + <option value="$PROJECT_DIR$/src/main/resources/application-dev.yml" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/download/ApkInfo.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/download/ret/ServiceException.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/download/Constant.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/download/ApkMapper.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/download/mapper/ApkMapper.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/framework/config/ShiroConfig.java" /> + <option value="$PROJECT_DIR$/src/main/resources/mybatis/download/DownloadMapper.xml" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/pc/common/mapper/ApkMapper.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/download/ApkController.java" /> + <option value="$PROJECT_DIR$/src/main/java/com/huaheng/mobile/receipt/MobileBatchReceiptController.java" /> </list> </option> </component> + <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" /> + <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" /> + <component name="JsGulpfileManager"> + <detection-done>true</detection-done> + <sorting>DEFINITION_ORDER</sorting> + </component> + <component name="MavenImportPreferences"> + <option name="importingSettings"> + <MavenImportingSettings> + <option name="importAutomatically" value="true" /> + </MavenImportingSettings> + </option> + </component> <component name="MavenProjectNavigator"> <treeState> <expand> @@ -142,10 +225,14 @@ <select /> </treeState> </component> + <component name="NodePackageJsonFileManager"> + <packageJsonPaths /> + </component> <component name="ProjectFrameBounds" extendedState="6"> - <option name="x" value="470" /> - <option name="width" value="980" /> - <option name="height" value="1030" /> + <option name="x" value="-10" /> + <option name="y" value="-10" /> + <option name="width" value="1400" /> + <option name="height" value="780" /> </component> <component name="ProjectId" id="1QOzUtfkdeRmYuw3MIDHXXMLsFH" /> <component name="ProjectLevelVcsManager"> @@ -156,8 +243,7 @@ <foldersAlwaysOnTop value="true" /> </navigator> <panes> - <pane id="Scope" /> - <pane id="PackagesPane" /> + <pane id="AndroidView" /> <pane id="ProjectPane"> <subPane> <expand> @@ -208,53 +294,7 @@ <item name="java" type="462c0819:PsiDirectoryNode" /> <item name="com" type="462c0819:PsiDirectoryNode" /> <item name="huaheng" type="462c0819:PsiDirectoryNode" /> - <item name="api" type="462c0819:PsiDirectoryNode" /> - </path> - <path> - <item name="wms2" type="b2602c69:ProjectViewProjectNode" /> - <item name="wms2" type="462c0819:PsiDirectoryNode" /> - <item name="src" type="462c0819:PsiDirectoryNode" /> - <item name="main" type="462c0819:PsiDirectoryNode" /> - <item name="java" type="462c0819:PsiDirectoryNode" /> - <item name="com" type="462c0819:PsiDirectoryNode" /> - <item name="huaheng" type="462c0819:PsiDirectoryNode" /> - <item name="pc" type="462c0819:PsiDirectoryNode" /> - </path> - <path> - <item name="wms2" type="b2602c69:ProjectViewProjectNode" /> - <item name="wms2" type="462c0819:PsiDirectoryNode" /> - <item name="src" type="462c0819:PsiDirectoryNode" /> - <item name="main" type="462c0819:PsiDirectoryNode" /> - <item name="java" type="462c0819:PsiDirectoryNode" /> - <item name="com" type="462c0819:PsiDirectoryNode" /> - <item name="huaheng" type="462c0819:PsiDirectoryNode" /> - <item name="pc" type="462c0819:PsiDirectoryNode" /> - <item name="config" type="462c0819:PsiDirectoryNode" /> - </path> - <path> - <item name="wms2" type="b2602c69:ProjectViewProjectNode" /> - <item name="wms2" type="462c0819:PsiDirectoryNode" /> - <item name="src" type="462c0819:PsiDirectoryNode" /> - <item name="main" type="462c0819:PsiDirectoryNode" /> - <item name="java" type="462c0819:PsiDirectoryNode" /> - <item name="com" type="462c0819:PsiDirectoryNode" /> - <item name="huaheng" type="462c0819:PsiDirectoryNode" /> - <item name="pc" type="462c0819:PsiDirectoryNode" /> - <item name="config" type="462c0819:PsiDirectoryNode" /> - <item name="location" type="462c0819:PsiDirectoryNode" /> - </path> - <path> - <item name="wms2" type="b2602c69:ProjectViewProjectNode" /> - <item name="wms2" type="462c0819:PsiDirectoryNode" /> - <item name="src" type="462c0819:PsiDirectoryNode" /> - <item name="main" type="462c0819:PsiDirectoryNode" /> - <item name="java" type="462c0819:PsiDirectoryNode" /> - <item name="com" type="462c0819:PsiDirectoryNode" /> - <item name="huaheng" type="462c0819:PsiDirectoryNode" /> - <item name="pc" type="462c0819:PsiDirectoryNode" /> - <item name="config" type="462c0819:PsiDirectoryNode" /> - <item name="location" type="462c0819:PsiDirectoryNode" /> - <item name="controller" type="462c0819:PsiDirectoryNode" /> + <item name="mobile" type="462c0819:PsiDirectoryNode" /> </path> <path> <item name="wms2" type="b2602c69:ProjectViewProjectNode" /> @@ -264,92 +304,8 @@ <item name="java" type="462c0819:PsiDirectoryNode" /> <item name="com" type="462c0819:PsiDirectoryNode" /> <item name="huaheng" type="462c0819:PsiDirectoryNode" /> - <item name="pc" type="462c0819:PsiDirectoryNode" /> - <item name="config" type="462c0819:PsiDirectoryNode" /> - <item name="material" type="462c0819:PsiDirectoryNode" /> - </path> - <path> - <item name="wms2" type="b2602c69:ProjectViewProjectNode" /> - <item name="wms2" type="462c0819:PsiDirectoryNode" /> - <item name="src" type="462c0819:PsiDirectoryNode" /> - <item name="main" type="462c0819:PsiDirectoryNode" /> - <item name="java" type="462c0819:PsiDirectoryNode" /> - <item name="com" type="462c0819:PsiDirectoryNode" /> - <item name="huaheng" type="462c0819:PsiDirectoryNode" /> - <item name="pc" type="462c0819:PsiDirectoryNode" /> - <item name="config" type="462c0819:PsiDirectoryNode" /> - <item name="material" type="462c0819:PsiDirectoryNode" /> - <item name="controller" type="462c0819:PsiDirectoryNode" /> - </path> - <path> - <item name="wms2" type="b2602c69:ProjectViewProjectNode" /> - <item name="wms2" type="462c0819:PsiDirectoryNode" /> - <item name="src" type="462c0819:PsiDirectoryNode" /> - <item name="main" type="462c0819:PsiDirectoryNode" /> - <item name="java" type="462c0819:PsiDirectoryNode" /> - <item name="com" type="462c0819:PsiDirectoryNode" /> - <item name="huaheng" type="462c0819:PsiDirectoryNode" /> - <item name="pc" type="462c0819:PsiDirectoryNode" /> - <item name="inventory" type="462c0819:PsiDirectoryNode" /> - </path> - <path> - <item name="wms2" type="b2602c69:ProjectViewProjectNode" /> - <item name="wms2" type="462c0819:PsiDirectoryNode" /> - <item name="src" type="462c0819:PsiDirectoryNode" /> - <item name="main" type="462c0819:PsiDirectoryNode" /> - <item name="java" type="462c0819:PsiDirectoryNode" /> - <item name="com" type="462c0819:PsiDirectoryNode" /> - <item name="huaheng" type="462c0819:PsiDirectoryNode" /> - <item name="pc" type="462c0819:PsiDirectoryNode" /> - <item name="inventory" type="462c0819:PsiDirectoryNode" /> - <item name="inventoryTransaction" type="462c0819:PsiDirectoryNode" /> - </path> - <path> - <item name="wms2" type="b2602c69:ProjectViewProjectNode" /> - <item name="wms2" type="462c0819:PsiDirectoryNode" /> - <item name="src" type="462c0819:PsiDirectoryNode" /> - <item name="main" type="462c0819:PsiDirectoryNode" /> - <item name="java" type="462c0819:PsiDirectoryNode" /> - <item name="com" type="462c0819:PsiDirectoryNode" /> - <item name="huaheng" type="462c0819:PsiDirectoryNode" /> - <item name="pc" type="462c0819:PsiDirectoryNode" /> - <item name="inventory" type="462c0819:PsiDirectoryNode" /> - <item name="inventoryTransaction" type="462c0819:PsiDirectoryNode" /> - <item name="controller" type="462c0819:PsiDirectoryNode" /> - </path> - <path> - <item name="wms2" type="b2602c69:ProjectViewProjectNode" /> - <item name="wms2" type="462c0819:PsiDirectoryNode" /> - <item name="src" type="462c0819:PsiDirectoryNode" /> - <item name="main" type="462c0819:PsiDirectoryNode" /> - <item name="resources" type="462c0819:PsiDirectoryNode" /> - </path> - <path> - <item name="wms2" type="b2602c69:ProjectViewProjectNode" /> - <item name="wms2" type="462c0819:PsiDirectoryNode" /> - <item name="src" type="462c0819:PsiDirectoryNode" /> - <item name="main" type="462c0819:PsiDirectoryNode" /> - <item name="resources" type="462c0819:PsiDirectoryNode" /> - <item name="templates" type="462c0819:PsiDirectoryNode" /> - </path> - <path> - <item name="wms2" type="b2602c69:ProjectViewProjectNode" /> - <item name="wms2" type="462c0819:PsiDirectoryNode" /> - <item name="src" type="462c0819:PsiDirectoryNode" /> - <item name="main" type="462c0819:PsiDirectoryNode" /> - <item name="resources" type="462c0819:PsiDirectoryNode" /> - <item name="templates" type="462c0819:PsiDirectoryNode" /> - <item name="config" type="462c0819:PsiDirectoryNode" /> - </path> - <path> - <item name="wms2" type="b2602c69:ProjectViewProjectNode" /> - <item name="wms2" type="462c0819:PsiDirectoryNode" /> - <item name="src" type="462c0819:PsiDirectoryNode" /> - <item name="main" type="462c0819:PsiDirectoryNode" /> - <item name="resources" type="462c0819:PsiDirectoryNode" /> - <item name="templates" type="462c0819:PsiDirectoryNode" /> - <item name="config" type="462c0819:PsiDirectoryNode" /> - <item name="material" type="462c0819:PsiDirectoryNode" /> + <item name="mobile" type="462c0819:PsiDirectoryNode" /> + <item name="receipt" type="462c0819:PsiDirectoryNode" /> </path> <path> <item name="wms2" type="b2602c69:ProjectViewProjectNode" /> @@ -357,8 +313,6 @@ <item name="src" type="462c0819:PsiDirectoryNode" /> <item name="main" type="462c0819:PsiDirectoryNode" /> <item name="resources" type="462c0819:PsiDirectoryNode" /> - <item name="templates" type="462c0819:PsiDirectoryNode" /> - <item name="inventory" type="462c0819:PsiDirectoryNode" /> </path> <path> <item name="wms2" type="b2602c69:ProjectViewProjectNode" /> @@ -366,14 +320,14 @@ <item name="src" type="462c0819:PsiDirectoryNode" /> <item name="main" type="462c0819:PsiDirectoryNode" /> <item name="resources" type="462c0819:PsiDirectoryNode" /> - <item name="templates" type="462c0819:PsiDirectoryNode" /> - <item name="inventory" type="462c0819:PsiDirectoryNode" /> - <item name="inventoryTransaction" type="462c0819:PsiDirectoryNode" /> + <item name="mybatis" type="462c0819:PsiDirectoryNode" /> </path> </expand> <select /> </subPane> </pane> + <pane id="PackagesPane" /> + <pane id="Scope" /> </panes> </component> <component name="PropertiesComponent"> @@ -383,11 +337,12 @@ <property name="RequestMappingsPanelOrder1" value="1" /> <property name="RequestMappingsPanelWidth0" value="75" /> <property name="RequestMappingsPanelWidth1" value="75" /> + <property name="SearchEverywhereHistoryKey" value="Shiro	PSI	JAVA://com.huaheng.framework.config.ShiroConfig LocationSer	PSI	JAVA://com.huaheng.pc.config.location.service.LocationService" /> <property name="WebServerToolWindowFactoryState" value="false" /> <property name="aspect.path.notification.shown" value="true" /> - <property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1578455422696" /> + <property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1579247661958" /> <property name="full.screen.before.presentation.mode" value="false" /> - <property name="last_opened_file_path" value="$PROJECT_DIR$/src/main/resources/static/ajax/libs/bootstrap-table/extensions/editable" /> + <property name="last_opened_file_path" value="$PROJECT_DIR$" /> <property name="node.js.detected.package.eslint" value="true" /> <property name="node.js.detected.package.tslint" value="true" /> <property name="node.js.path.for.package.eslint" value="project" /> @@ -402,17 +357,22 @@ <property name="settings.editor.selected.configurable" value="preferences.pluginManager" /> </component> <component name="RecentsManager"> - <key name="MoveFile.RECENT_KEYS"> - <recent name="E:\code\wms2\src\main\resources\templates\config\configWarning" /> + <key name="CopyFile.RECENT_KEYS"> + <recent name="E:\web\wms2\src\main\resources\mybatis\download" /> + <recent name="E:\web\wms2\src\main\java\com\huaheng\mobile\download" /> + <recent name="E:\web\wms2\src\main\java\com\huaheng" /> + <recent name="D:\wms2\src\main\resources\templates\shipment\shipmentHeader" /> + <recent name="D:\wms2\src\main\resources\templates\config\material" /> </key> <key name="CopyClassDialog.RECENTS_KEY"> - <recent name="com.huaheng.api.general.domain" /> + <recent name="com.huaheng.pc.common.mapper" /> + <recent name="com.huaheng.mobile.download" /> + <recent name="com.huaheng.pc.receipt.receiptContainerHeader.domain" /> + <recent name="com.huaheng.pc.task.taskHeader.domain" /> + <recent name="com.huaheng.api.general.service" /> </key> - <key name="CopyFile.RECENT_KEYS"> - <recent name="D:\wms2\src\main\resources\templates\config\material" /> - <recent name="D:\wms2\src\main\resources\templates\config\location" /> - <recent name="D:\wms2\src\main\resources\templates\config\container" /> - <recent name="E:\code\wms2\src\main\resources\static\ajax\libs\bootstrap-table\extensions\editable" /> + <key name="MoveFile.RECENT_KEYS"> + <recent name="E:\code\wms2\src\main\resources\templates\config\configWarning" /> </key> </component> <component name="RunAnythingCache"> @@ -438,7 +398,7 @@ </option> <option name="contentProportion" value="0.012987013" /> </component> - <component name="RunManager" selected="Spring Boot.HuaHengApplication (1)"> + <component name="RunManager" selected="Spring Boot.HuaHengApplication"> <configuration name="EncryptPassword" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true"> <option name="MAIN_CLASS_NAME" value="com.huaheng.test.EncryptPassword" /> <module name="huaheng" /> @@ -448,9 +408,6 @@ <option name="ENABLED" value="true" /> </pattern> </extension> - <method v="2"> - <option name="Make" enabled="true" /> - </method> </configuration> <configuration name="MqTest.send" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true"> <module name="huaheng" /> @@ -460,13 +417,20 @@ <option name="ENABLED" value="true" /> </pattern> </extension> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> <option name="PACKAGE_NAME" value="com.huaheng.test" /> <option name="MAIN_CLASS_NAME" value="com.huaheng.test.MqTest" /> <option name="METHOD_NAME" value="send" /> <option name="TEST_OBJECT" value="method" /> - <method v="2"> - <option name="Make" enabled="true" /> - </method> + <option name="VM_PARAMETERS" /> + <option name="PARAMETERS" /> + <option name="WORKING_DIRECTORY" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <option name="TEST_SEARCH_SCOPE"> + <value defaultName="singleModule" /> + </option> + <patterns /> </configuration> <configuration name="ServiceTest.sendSimpleMail" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true"> <module name="huaheng" /> @@ -476,13 +440,20 @@ <option name="ENABLED" value="true" /> </pattern> </extension> + <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> + <option name="ALTERNATIVE_JRE_PATH" /> <option name="PACKAGE_NAME" value="com.huaheng.test" /> <option name="MAIN_CLASS_NAME" value="com.huaheng.test.ServiceTest" /> <option name="METHOD_NAME" value="sendSimpleMail" /> <option name="TEST_OBJECT" value="method" /> - <method v="2"> - <option name="Make" enabled="true" /> - </method> + <option name="VM_PARAMETERS" /> + <option name="PARAMETERS" /> + <option name="WORKING_DIRECTORY" /> + <option name="PASS_PARENT_ENVS" value="true" /> + <option name="TEST_SEARCH_SCOPE"> + <value defaultName="singleModule" /> + </option> + <patterns /> </configuration> <configuration name="HuaHengApplication (1)" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true"> <module name="wms2" /> @@ -493,9 +464,6 @@ </pattern> </extension> <option name="SPRING_BOOT_MAIN_CLASS" value="com.huaheng.HuaHengApplication" /> - <method v="2"> - <option name="Make" enabled="true" /> - </method> </configuration> <configuration name="HuaHengApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot" temporary="true" nameIsGenerated="true"> <module name="huaheng" /> @@ -509,9 +477,6 @@ <option name="ALTERNATIVE_JRE_PATH" /> <option name="UPDATE_ACTION_UPDATE_POLICY" value="UpdateResources" /> <option name="FRAME_DEACTIVATION_UPDATE_POLICY" value="UpdateClassesAndResources" /> - <method v="2"> - <option name="Make" enabled="true" /> - </method> </configuration> <list> <item itemvalue="Application.EncryptPassword" /> @@ -522,8 +487,8 @@ </list> <recent_temporary> <list> - <item itemvalue="Spring Boot.HuaHengApplication (1)" /> <item itemvalue="Spring Boot.HuaHengApplication" /> + <item itemvalue="Spring Boot.HuaHengApplication (1)" /> <item itemvalue="JUnit.ServiceTest.sendSimpleMail" /> <item itemvalue="JUnit.MqTest.send" /> <item itemvalue="Application.EncryptPassword" /> @@ -742,14 +707,17 @@ <workItem from="1578293993555" duration="9808000" /> <workItem from="1578358115196" duration="1507000" /> <workItem from="1578379653786" duration="11257000" /> - <workItem from="1578444006015" duration="7109000" /> - </task> - <task id="LOCAL-00026" summary="添加自动生成容器编码"> - <created>1569484931952</created> - <option name="number" value="00026" /> - <option name="presentableId" value="LOCAL-00026" /> - <option name="project" value="LOCAL" /> - <updated>1569484931952</updated> + <workItem from="1578444006015" duration="19976000" /> + <workItem from="1578529843067" duration="14401000" /> + <workItem from="1578563682646" duration="32000" /> + <workItem from="1578620227025" duration="6145000" /> + <workItem from="1578880033342" duration="15319000" /> + <workItem from="1578962187281" duration="17339000" /> + <workItem from="1579048372056" duration="1299000" /> + <workItem from="1579135252936" duration="19097000" /> + <workItem from="1579221601177" duration="15358000" /> + <workItem from="1582509082347" duration="14821000" /> + <workItem from="1582590353002" duration="16210000" /> </task> <task id="LOCAL-00027" summary="修改入库首选项页面,规则查询使用数据字典值,表格值显示修改"> <created>1569553028716</created> @@ -1087,50 +1055,58 @@ <option name="project" value="LOCAL" /> <updated>1578455348001</updated> </task> - <option name="localTasksCounter" value="75" /> + <task id="LOCAL-00075" summary="物料打印"> + <created>1578455439194</created> + <option name="number" value="00075" /> + <option name="presentableId" value="LOCAL-00075" /> + <option name="project" value="LOCAL" /> + <updated>1578455439194</updated> + </task> + <option name="localTasksCounter" value="76" /> <servers /> </component> <component name="TimeTrackingManager"> - <option name="totallyTimeSpent" value="158484000" /> + <option name="totallyTimeSpent" value="291372000" /> </component> <component name="ToolWindowManager"> <frame x="-7" y="-7" width="1550" height="838" extended-state="6" /> - <editor active="true" /> <layout> - <window_info content_ui="combo" id="Project" order="0" sideWeight="0.4978903" visible="true" weight="0.23391421" /> - <window_info id="Structure" order="1" side_tool="true" weight="0.25" /> - <window_info id="Designer" order="2" /> - <window_info id="Image Layers" order="3" /> + <window_info anchor="right" id="Palette" order="4" /> + <window_info anchor="bottom" id="Event Log" order="10" sideWeight="0.08847185" side_tool="true" weight="0.43909347" /> + <window_info anchor="right" id="Maven Projects" order="5" weight="0.3297587" /> + <window_info anchor="bottom" id="Database Changes" order="12" /> <window_info id="Capture Tool" order="4" /> + <window_info id="Designer" order="2" /> + <window_info anchor="bottom" id="Statistic" order="11" /> + <window_info anchor="right" id="Database" order="6" /> + <window_info id="Structure" order="1" side_tool="true" weight="0.25" /> + <window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> <window_info id="UI Designer" order="5" /> - <window_info id="Favorites" order="6" sideWeight="0.5021097" side_tool="true" weight="0.308311" /> - <window_info id="Web" order="7" side_tool="true" /> - <window_info anchor="bottom" id="Message" order="0" /> - <window_info anchor="bottom" id="Find" order="1" /> - <window_info anchor="bottom" id="Run" order="2" /> <window_info anchor="bottom" id="Debug" order="3" weight="0.4" /> - <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> - <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> <window_info anchor="bottom" id="TODO" order="6" /> + <window_info anchor="bottom" id="Messages" order="15" sideWeight="0.49932975" weight="0.3281027" /> + <window_info anchor="right" id="Palette	" order="7" /> + <window_info id="Image Layers" order="3" /> + <window_info anchor="bottom" id="Java Enterprise" order="11" /> + <window_info anchor="right" id="Capture Analysis" order="5" /> + <window_info active="true" anchor="bottom" id="Run Dashboard" order="14" sideWeight="0.91152817" visible="true" weight="0.33808845" /> + <window_info anchor="bottom" id="Version Control" order="13" sideWeight="0.91152817" weight="0.32719547" /> + <window_info anchor="bottom" id="Run" order="2" /> <window_info anchor="bottom" id="Spring" order="7" /> <window_info anchor="bottom" id="Terminal" order="8" /> - <window_info anchor="bottom" id="Docker" order="9" show_stripe_button="false" /> - <window_info anchor="bottom" id="Event Log" order="10" sideWeight="0.09048257" side_tool="true" weight="0.44192636" /> - <window_info anchor="bottom" id="Java Enterprise" order="11" /> - <window_info anchor="bottom" id="Database Changes" order="12" /> - <window_info anchor="bottom" id="Version Control" order="13" sideWeight="0.91152817" weight="0.3281471" /> - <window_info active="true" anchor="bottom" id="Run Dashboard" order="14" sideWeight="0.9095174" visible="true" weight="0.43342775" /> - <window_info anchor="bottom" id="Messages" order="15" sideWeight="0.49932975" weight="0.3286119" /> + <window_info content_ui="combo" id="Project" order="0" sideWeight="0.4978903" visible="true" weight="0.3069705" /> + <window_info anchor="right" id="Bean Validation" order="9" weight="0.3297587" /> + <window_info id="Web" order="7" side_tool="true" /> + <window_info anchor="bottom" id="Find" order="1" weight="0.32952926" /> + <window_info anchor="right" id="Theme Preview" order="8" /> + <window_info id="Favorites" order="6" sideWeight="0.5021097" side_tool="true" weight="0.308311" /> + <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" /> - <window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> - <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> + <window_info anchor="bottom" id="Docker" order="9" show_stripe_button="false" /> + <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> + <window_info anchor="bottom" id="Message" order="0" /> <window_info anchor="right" id="Maven" order="3" weight="0.3297587" /> - <window_info anchor="right" id="Palette" order="4" /> - <window_info anchor="right" id="Capture Analysis" order="5" /> - <window_info anchor="right" id="Database" order="6" /> - <window_info anchor="right" id="Palette	" order="7" /> - <window_info anchor="right" id="Theme Preview" order="8" /> - <window_info anchor="right" id="Bean Validation" order="9" weight="0.3297587" /> + <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> </layout> </component> <component name="TypeScriptGeneratedFilesManager"> @@ -1154,20 +1130,9 @@ </entry> </map> </option> - <option name="RECENT_FILTERS"> - <map> - <entry key="Branch"> - <value> - <list /> - </value> - </entry> - <entry key="User"> - <value> - <list /> - </value> - </entry> - </map> - </option> + </component> + <component name="VcsContentAnnotationSettings"> + <option name="myLimit" value="2678400000" /> </component> <component name="VcsManagerConfiguration"> <MESSAGE value="修改接口实体类" /> @@ -1199,92 +1164,10 @@ </component> <component name="XDebuggerManager"> <breakpoint-manager> - <breakpoints> - <line-breakpoint enabled="true" type="java-line"> - <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/bom/controller/BomHeaderController.java</url> - <line>164</line> - <properties /> - <option name="timeStamp" value="24" /> - </line-breakpoint> - <line-breakpoint enabled="true" type="java-line"> - <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/check/checkingRegister/controller/CheckingRegisterController.java</url> - <line>179</line> - <properties /> - <option name="timeStamp" value="28" /> - </line-breakpoint> - <line-breakpoint enabled="true" type="java-line"> - <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/configValue/controller/ConfigValueController.java</url> - <line>141</line> - <properties /> - <option name="timeStamp" value="66" /> - </line-breakpoint> - <line-breakpoint enabled="true" type="java-line"> - <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java</url> - <line>190</line> - <properties /> - <option name="timeStamp" value="87" /> - </line-breakpoint> - <line-breakpoint enabled="true" type="java-line"> - <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationServiceImpl.java</url> - <line>194</line> - <properties> - <option name="lambda-ordinal" value="-1" /> - </properties> - <option name="timeStamp" value="112" /> - </line-breakpoint> - <line-breakpoint enabled="true" type="java-line"> - <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/location/service/LocationServiceImpl.java</url> - <line>107</line> - <properties /> - <option name="timeStamp" value="121" /> - </line-breakpoint> - <line-breakpoint enabled="true" type="java-line"> - <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/configWarning/service/ConfigWarningService.java</url> - <line>110</line> - <properties /> - <option name="timeStamp" value="124" /> - </line-breakpoint> - <line-breakpoint enabled="true" type="java-line"> - <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/configWarning/service/ConfigWarningService.java</url> - <line>140</line> - <properties /> - <option name="timeStamp" value="125" /> - </line-breakpoint> - <line-breakpoint enabled="true" type="java-line"> - <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/configWarning/service/ConfigWarningService.java</url> - <line>118</line> - <properties /> - <option name="timeStamp" value="126" /> - </line-breakpoint> - <line-breakpoint enabled="true" type="java-line"> - <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/configWarning/service/ConfigWarningService.java</url> - <line>109</line> - <properties /> - <option name="timeStamp" value="127" /> - </line-breakpoint> - <line-breakpoint enabled="true" type="java-line"> - <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java</url> - <line>709</line> - <properties /> - <option name="timeStamp" value="135" /> - </line-breakpoint> - <line-breakpoint enabled="true" type="java-line"> - <url>file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptHeader/controller/ReceiptHeaderController.java</url> - <line>198</line> - <properties /> - <option name="timeStamp" value="139" /> - </line-breakpoint> - <line-breakpoint enabled="true" type="javascript"> - <url>file://$PROJECT_DIR$/src/main/resources/templates/check/checkingRegister/checkingRegister.html</url> - <line>308</line> - <option name="timeStamp" value="29" /> - </line-breakpoint> - <line-breakpoint enabled="true" type="javascript"> - <url>file://$PROJECT_DIR$/src/main/resources/templates/config/waveFlowHeader/waveFlowHeader.html</url> - <line>71</line> - <option name="timeStamp" value="43" /> - </line-breakpoint> - </breakpoints> + <breakpoints-dialog> + <breakpoints-dialog /> + </breakpoints-dialog> + <option name="time" value="8" /> </breakpoint-manager> <watches-manager> <configuration name="SpringBootApplicationConfigurationType"> @@ -1298,399 +1181,351 @@ </SUITE> </component> <component name="editorHistoryManager"> - <entry file="file://$PROJECT_DIR$/src/main/resources/static/js/qrcode/qrcode.min.js"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderService.java"> <provider selected="true" editor-type-id="text-editor"> - <state> - <caret column="4" selection-start-column="4" selection-end-column="4" /> + <state relative-caret-position="268"> + <caret line="63" column="34" selection-start-line="63" selection-start-column="15" selection-end-line="63" selection-end-column="34" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/templates/receipt/receiptHeader/receiptHeader.html"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="152"> - <caret line="675" column="43" lean-forward="true" selection-start-line="675" selection-start-column="43" selection-end-line="675" selection-end-column="43" /> + <state relative-caret-position="28823"> + <caret line="1593" column="40" selection-start-line="1593" selection-start-column="40" selection-end-line="1593" selection-end-column="40" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/templates/receipt/receiptHeader/add.html"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/mobile/receipt/MaterialInfo.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-962" /> + <state relative-caret-position="57"> + <caret line="3" column="2" lean-forward="true" selection-start-line="3" selection-start-column="2" selection-end-line="3" selection-end-column="2" /> + </state> </provider> </entry> - <entry file="file://$USER_HOME$/Desktop/长沙华恒企网2.0_new/答题HTML/答题HTML/answer.html"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/mobile/receipt/MobilePutawayController.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-171" /> + <state relative-caret-position="513"> + <caret line="46" column="7" selection-start-line="46" selection-start-column="7" selection-end-line="46" selection-end-column="7" /> + </state> </provider> </entry> - <entry file="jar://$MAVEN_REPOSITORY$/com/alibaba/druid/1.1.18/druid-1.1.18.jar!/support/http/resources/css/bootstrap.min.css"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/mobile/shipment/MobileShipmentController.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="152"> - <caret line="8" column="25402" selection-start-line="8" selection-start-column="25402" selection-end-line="8" selection-end-column="25402" /> + <state relative-caret-position="950"> + <caret line="76" column="69" selection-start-line="76" selection-start-column="69" selection-end-line="76" selection-end-column="69" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/static/css/main/style.min862f.css"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/mobile/shipment/MobileTaskForASRSController.java"> <provider selected="true" editor-type-id="text-editor"> - <state> - <caret column="49663" selection-start-column="49663" selection-end-column="49663" /> + <state relative-caret-position="399"> + <caret line="35" column="16" selection-start-line="35" selection-start-column="16" selection-end-line="35" selection-end-column="16" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/static/css/bootstrap.min.css"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/material/service/MaterialService.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="127"> - <caret line="2721" column="1" selection-start-line="2721" selection-start-column="1" selection-end-line="2721" selection-end-column="1" /> + <state relative-caret-position="589"> + <caret line="36" selection-start-line="36" selection-end-line="36" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/static/css/style.css"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/mobile/wcsScanBarcode/WcsScanBarcodeController.java" /> + <entry file="file://$PROJECT_DIR$/src/main/resources/application-prd.yml"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="241"> - <caret line="3360" column="17" lean-forward="true" selection-start-line="3360" selection-start-column="17" selection-end-line="3360" selection-end-column="17" /> + <state relative-caret-position="209"> + <caret line="11" column="10" selection-start-line="11" selection-start-column="10" selection-end-line="11" selection-end-column="10" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/templates/receipt/receiptHeader/report.html"> + <entry file="file://$PROJECT_DIR$/src/main/resources/application-dev.yml"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="1330"> - <caret line="70" column="4" lean-forward="true" selection-start-line="70" selection-start-column="4" selection-end-line="70" selection-end-column="22" /> - <folding> - <element signature="n#style#0;n#span#1;n#td#0;n#tr#0;n#thead#0;n#table#0;n#div#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - </folding> + <state relative-caret-position="1292"> + <caret line="68" column="19" selection-start-line="68" selection-start-column="19" selection-end-line="68" selection-end-column="19" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/templates/config/container/print.html"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/material/service/MaterialServiceImpl.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="551"> - <caret line="29" column="24" lean-forward="true" selection-start-line="29" selection-start-column="24" selection-end-line="29" selection-end-column="24" /> - <folding> - <element signature="n#style#0;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#div#0;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#table#0;n#div#0;n#div#0;n#div#0;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#table#0;n#div#1;n#div#0;n#div#0;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - </folding> + <state relative-caret-position="271"> + <caret line="160" column="5" selection-start-line="160" selection-start-column="5" selection-end-line="160" selection-end-column="5" /> </state> </provider> </entry> - <entry file="file://$USER_HOME$/Desktop/boot/boot/打印二维码 - 多个组2.html"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/shipment/shippingCombination/domain/ShippingSearch.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="19"> - <caret line="47" column="36" selection-start-line="47" selection-start-column="36" selection-end-line="47" selection-end-column="36" /> + <state relative-caret-position="145"> + <caret line="46" column="18" selection-start-line="46" selection-start-column="18" selection-end-line="46" selection-end-column="18" /> <folding> - <element signature="n#style#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#div#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#caption#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#td#1;n#tr#0;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#tr#1;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#td#1;n#tr#1;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#td#2;n#tr#1;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#img#0;n#td#2;n#tr#1;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#td#1;n#tr#2;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#td#1;n#tr#3;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#input#0;n#td#1;n#tr#3;n#tbody#0;n#table#0;n#div#1;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#caption#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#td#1;n#tr#0;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#tr#1;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#td#1;n#tr#1;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#td#2;n#tr#1;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#img#0;n#td#2;n#tr#1;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#td#1;n#tr#2;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="e#3995#4001#0" expanded="true" /> - <element signature="e#4001#4007#0" expanded="true" /> - <element signature="e#4007#4013#0" expanded="true" /> - <element signature="e#4013#4019#0" expanded="true" /> - <element signature="n#style#0;n#td#1;n#tr#3;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#input#0;n#td#1;n#tr#3;n#tbody#0;n#table#0;n#div#2;n#div#1;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> + <element signature="e#990#991#0" expanded="true" /> + <element signature="e#1024#1025#0" expanded="true" /> </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/wcs/service/taskFinish/TaskFinishServiceImpl.java"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/mobile/general/MobileUserController.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="149"> - <caret line="27" column="22" selection-start-line="27" selection-start-column="22" selection-end-line="27" selection-end-column="22" /> + <state relative-caret-position="304"> + <caret line="111" column="5" selection-start-line="111" selection-start-column="5" selection-end-line="111" selection-end-column="5" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/wcs/service/taskFinish/TaskFinishService.java"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="133"> - <caret line="8" column="15" selection-start-line="8" selection-start-column="15" selection-end-line="8" selection-end-column="15" /> - </state> - </provider> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/mobile/download/ret/RetCode.java"> + <provider selected="true" editor-type-id="text-editor" /> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/wcs/controller/EmptyOutHandle.java"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="149"> - <caret line="24" column="13" selection-start-line="24" selection-start-column="13" selection-end-line="24" selection-end-column="13" /> - </state> - </provider> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/mobile/download/ret/RetResponse.java"> + <provider selected="true" editor-type-id="text-editor" /> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/wcs/controller/OverrideHandle.java"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/mobile/download/ret/ServiceException.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="149"> - <caret line="23" column="13" selection-start-line="23" selection-start-column="13" selection-end-line="23" selection-end-column="13" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/wcs/controller/WarecellAllocation.java"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-70"> - <caret line="41" column="67" selection-start-line="41" selection-start-column="60" selection-end-line="41" selection-end-column="67" /> + <state relative-caret-position="285"> + <caret line="19" column="1" lean-forward="true" selection-start-line="19" selection-start-column="1" selection-end-line="19" selection-end-column="1" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/wcs/service/taskCancel/TaskCancelServiceImpl.java"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/mobile/download/ret/RetResult.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="209"> - <caret line="19" column="11" selection-start-line="19" selection-start-column="7" selection-end-line="19" selection-end-column="11" /> + <state relative-caret-position="95"> + <caret line="7" column="13" selection-start-line="7" selection-start-column="13" selection-end-line="7" selection-end-column="13" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/wcs/service/taskCancel/TaskCancelService.java"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/mobile/download/Constant.java"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="133"> - <caret line="7" column="15" selection-start-line="7" selection-start-column="15" selection-end-line="7" selection-end-column="15" /> + <caret line="7" selection-start-line="7" selection-end-line="7" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/wcs/controller/TaskInfoController.java"> + <entry file="file://$PROJECT_DIR$/src/main/resources/application.yml"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="296"> - <caret line="24" column="34" lean-forward="true" selection-start-line="24" selection-start-column="34" selection-end-line="24" selection-end-column="34" /> + <state relative-caret-position="95"> + <caret line="5" column="3" selection-start-line="5" selection-start-column="3" selection-end-line="5" selection-end-column="3" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/wcs/controller/TaskFinish.java"> + <entry file="file://$PROJECT_DIR$/src/main/resources/application-druid.properties"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="310"> - <caret line="35" column="59" lean-forward="true" selection-start-line="35" selection-start-column="59" selection-end-line="35" selection-end-column="59" /> + <state relative-caret-position="437"> + <caret line="23" column="15" selection-start-line="23" selection-start-column="15" selection-end-line="23" selection-end-column="15" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/general/controller/BasicDataApi.java"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/domain/ReceiptDetail.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="291"> - <caret line="170" column="1" selection-start-line="170" selection-start-column="1" selection-end-line="170" selection-end-column="1" /> + <state relative-caret-position="-437"> + <caret line="15" column="13" selection-start-line="15" selection-start-column="13" selection-end-line="15" selection-end-column="13" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/wcs/domain/WcsTask.java"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="149"> - <caret line="14" column="13" selection-start-line="14" selection-start-column="13" selection-end-line="14" selection-end-column="13" /> + <state relative-caret-position="494"> + <caret line="67" column="31" selection-start-line="67" selection-start-column="12" selection-end-line="67" selection-end-column="31" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/general/service/ReceiptApiService.java"> + <entry file="file://$PROJECT_DIR$/src/main/resources/mybatis/task/TaskDetailMapper.xml"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="247"> - <caret line="44" column="13" selection-start-line="44" selection-start-column="13" selection-end-line="44" selection-end-column="13" /> + <state relative-caret-position="171"> + <caret line="9" column="32" lean-forward="true" selection-start-line="9" selection-start-column="32" selection-end-line="9" selection-end-column="32" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/general/controller/ReceiptController.java"> + <entry file="file://$PROJECT_DIR$/src/main/resources/mybatis/task/TaskHeaderMapper.xml"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="494"> - <caret line="35" column="51" selection-start-line="35" selection-start-column="51" selection-end-line="35" selection-end-column="51" /> + <state relative-caret-position="-95"> + <caret line="13" column="25" lean-forward="true" selection-start-line="13" selection-start-column="25" selection-end-line="13" selection-end-column="25" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/general/service/ReceiptService.java"> + <entry file="file://$PROJECT_DIR$/src/main/resources/mybatis/task/TaskPreferenceMapper.xml"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="665"> - <caret line="64" column="42" selection-start-line="64" selection-start-column="33" selection-end-line="64" selection-end-column="42" /> - </state> + <state relative-caret-position="-342" /> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/HuaHengServletInitializer.java"> + <entry file="file://$PROJECT_DIR$/src/main/resources/mybatis/system/DeptMapper.xml"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="150"> - <caret line="10" column="13" selection-start-line="10" selection-start-column="13" selection-end-line="10" selection-end-column="13" /> + <state relative-caret-position="266"> + <caret line="14" column="26" selection-start-line="14" selection-start-column="26" selection-end-line="14" selection-end-column="26" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/application-dev.yml"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptDetail/mapper/ReceiptDetailMapper.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="189"> - <caret line="66" column="12" lean-forward="true" selection-start-line="66" selection-start-column="12" selection-end-line="66" selection-end-column="12" /> + <state relative-caret-position="76"> + <caret line="4" column="56" lean-forward="true" selection-start-line="4" selection-start-column="56" selection-end-line="4" selection-end-column="56" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/application.yml"> + <entry file="file://$PROJECT_DIR$/src/main/resources/mybatis/receipt/ReceiptDetailMapper.xml"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-824" /> + <state relative-caret-position="-576"> + <caret line="70" column="5" lean-forward="true" selection-start-line="70" selection-start-column="5" selection-end-line="70" selection-end-column="5" /> + </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/HuaHengApplication.java"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/mobile/invenory/MobileInventoryController.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-26"> - <caret line="15" column="13" selection-start-line="15" selection-start-column="13" selection-end-line="15" selection-end-column="13" /> + <state relative-caret-position="157"> + <caret line="46" column="13" lean-forward="true" selection-start-line="46" selection-start-column="3" selection-end-line="46" selection-end-column="13" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/inventory/adjustHeader/controller/adjustHeaderController.java"> + <entry file="file://$PROJECT_DIR$/src/main/resources/logback.xml"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="202"> - <caret line="156" lean-forward="true" selection-start-line="156" selection-end-line="156" /> + <state relative-caret-position="266"> + <caret line="14" column="17" lean-forward="true" selection-start-line="14" selection-start-column="17" selection-end-line="14" selection-end-column="17" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/inventory/cycleCountHeader/controller/CycleCountHeaderController.java"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/mobile/download/mapper/ApkMapper.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="317"> - <caret line="71" selection-start-line="71" selection-end-line="71" /> + <state relative-caret-position="266"> + <caret line="22" selection-start-line="22" selection-end-line="23" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/check/checkHeader/controller/CheckHeaderController.java"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/framework/config/ShiroConfig.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="190"> - <caret line="38" column="13" selection-start-line="38" selection-start-column="13" selection-end-line="38" selection-end-column="13" /> + <state relative-caret-position="791"> + <caret line="267" column="71" lean-forward="true" selection-start-line="267" selection-start-column="71" selection-end-line="267" selection-end-column="71" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/general/controller/ReceiptApi.java"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/mobile/invenory/MobileInventory.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="304"> - <caret line="25" column="7" selection-start-line="25" selection-start-column="7" selection-end-line="25" selection-end-column="7" /> + <state relative-caret-position="259"> + <caret line="18" column="15" lean-forward="true" selection-start-line="18" selection-start-column="15" selection-end-line="18" selection-end-column="15" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/api/general/domain/ReceiptDomain.java"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/check/checkDetail/mapper/CheckDetailMapper.java"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="95"> - <caret line="10" column="13" selection-start-line="10" selection-start-column="13" selection-end-line="10" selection-end-column="13" /> + <caret line="6" column="1" lean-forward="true" selection-start-line="6" selection-start-column="1" selection-end-line="6" selection-end-column="1" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/container/controller/ContainerController.java"> + <entry file="file://$PROJECT_DIR$/src/main/resources/mybatis/check/CheckHeaderMapper.xml"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="2812"> - <caret line="181" selection-start-line="181" selection-end-line="195" selection-end-column="5" /> + <state relative-caret-position="-57"> + <caret line="21" column="71" lean-forward="true" selection-start-line="21" selection-start-column="71" selection-end-line="21" selection-end-column="71" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/templates/config/container/container.html"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/check/checkingRegister/mapper/CheckingRegisterMapper.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="61"> - <caret line="202" selection-start-line="202" selection-end-line="214" selection-end-column="9" /> + <state relative-caret-position="76"> + <caret line="5" column="17" selection-start-line="5" selection-start-column="17" selection-end-line="5" selection-end-column="17" /> </state> </provider> </entry> - <entry file="file://$APPLICATION_HOME_DIR$/plugins/JavaScriptLanguage/jsLanguageServicesImpl/external/lib.es5.d.ts"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptContainerDetail/mapper/ReceiptContainerDetailMapper.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="166"> - <caret line="1215" column="4" selection-start-line="1215" selection-start-column="4" selection-end-line="1215" selection-end-column="4" /> + <state relative-caret-position="76"> + <caret line="5" column="17" selection-start-line="5" selection-start-column="17" selection-end-line="5" selection-end-column="17" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/static/js/echarts/echarts.js"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/mapper/ReceiptContainerHeaderMapper.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="190"> - <caret line="11245" column="4" selection-start-line="11245" selection-start-column="4" selection-end-line="11245" selection-end-column="4" /> + <state relative-caret-position="76"> + <caret line="5" column="17" selection-start-line="5" selection-start-column="17" selection-end-line="5" selection-end-column="17" /> </state> </provider> </entry> - <entry file="file://$USER_HOME$/Desktop/HttpPrinter3.0.0.5_20200103_014305_%E5%90%ABhtml%E7%A4%BA%E4%BE%8B/调用示例/Http协议示例/html/http_test_fastreport.html"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptHeader/mapper/ReceiptHeaderMapper.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-3819"> - <caret line="207" column="42" selection-start-line="207" selection-start-column="27" selection-end-line="207" selection-end-column="42" /> + <state relative-caret-position="114"> + <caret line="9" column="32" lean-forward="true" selection-start-line="9" selection-start-column="32" selection-end-line="9" selection-end-column="32" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/static/js/jquery.jqprint-0.3.js"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/receipt/receiptHeaderHistory/mapper/ReceiptHeaderHistoryMapper.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="126"> - <caret line="60" column="104" selection-start-line="60" selection-start-column="104" selection-end-line="60" selection-end-column="104" /> + <state relative-caret-position="95"> + <caret line="6" column="1" lean-forward="true" selection-start-line="6" selection-start-column="1" selection-end-line="6" selection-end-column="1" /> </state> </provider> </entry> - <entry file="file://$APPLICATION_HOME_DIR$/plugins/JavaScriptLanguage/jsLanguageServicesImpl/external/browser.d.ts"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/check/checkHeader/mapper/CheckHeaderMapper.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="240"> - <caret line="46" column="7" selection-start-line="46" selection-start-column="7" selection-end-line="46" selection-end-column="7" /> + <state relative-caret-position="209"> + <caret line="12" column="1" lean-forward="true" selection-start-line="12" selection-start-column="1" selection-end-line="12" selection-end-column="1" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/templates/inventory/inventoryTransaction/report.html"> + <entry file="file://$PROJECT_DIR$/src/main/resources/mybatis/system/ConfigMapper.xml"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="665"> - <caret line="47" column="29" lean-forward="true" selection-start-line="47" selection-start-column="29" selection-end-line="47" selection-end-column="29" /> - <folding> - <element signature="n#style#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#span#0;n#div#0;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#div#1;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#td#1;n#tr#2;n#tbody#0;n#table#0;n#div#0;n#div#1;n#body#0;n#html#0;n#!!top" expanded="true" /> - </folding> + <state relative-caret-position="251"> + <caret line="71" column="73" lean-forward="true" selection-start-line="71" selection-start-column="73" selection-end-line="71" selection-end-column="73" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/templates/config/location/print.html"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/mobile/download/ApkInfo.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="146"> - <caret line="113" lean-forward="true" selection-start-line="113" selection-end-line="113" /> + <state relative-caret-position="171"> + <caret line="9" column="23" lean-forward="true" selection-start-line="9" selection-start-column="23" selection-end-line="9" selection-end-column="23" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/templates/config/location/location.html"> + <entry file="file://$PROJECT_DIR$/src/main/resources/mybatis/config/WarehouseMapper.xml"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="285"> - <caret line="75" column="45" selection-start-line="75" selection-start-column="45" selection-end-line="75" selection-end-column="45" /> + <state relative-caret-position="1380"> + <caret line="144" column="34" lean-forward="true" selection-start-line="144" selection-start-column="34" selection-end-line="144" selection-end-column="34" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/templates/inventory/inventoryTransaction/inventoryTransaction.html"> + <entry file="file://$PROJECT_DIR$/src/main/resources/mybatis/config/ZoneMapper.xml"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="179"> - <caret line="310" selection-start-line="310" selection-end-line="322" selection-end-column="10" /> + <state relative-caret-position="189"> + <caret line="32" lean-forward="true" selection-start-line="32" selection-end-line="32" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/inventory/inventoryTransaction/controller/InventoryTransactionController.java"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/zone/mapper/ZoneMapper.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="241"> - <caret line="105" column="28" lean-forward="true" selection-start-line="105" selection-start-column="28" selection-end-line="105" selection-end-column="28" /> + <state relative-caret-position="133"> + <caret line="9" column="44" lean-forward="true" selection-start-line="9" selection-start-column="17" selection-end-line="9" selection-end-column="44" /> </state> </provider> </entry> - <entry file="file://$USER_HOME$/Desktop/demo.html"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/common/mapper/ApkMapper.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="19"> - <caret line="1" column="6" lean-forward="true" selection-start-line="1" selection-start-column="6" selection-end-line="1" selection-end-column="6" /> + <state relative-caret-position="167"> + <caret line="16" column="8" selection-start-line="16" selection-start-column="8" selection-end-line="16" selection-end-column="8" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/location/controller/LocationController.java"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/system/config/mapper/ConfigMapper.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="208"> - <caret line="317" column="50" lean-forward="true" selection-start-line="317" selection-start-column="50" selection-end-line="317" selection-end-column="50" /> + <state relative-caret-position="164"> + <caret line="40" column="17" lean-forward="true" selection-start-line="40" selection-start-column="17" selection-end-line="40" selection-end-column="17" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/templates/config/material/material.html"> + <entry file="file://$PROJECT_DIR$/src/main/resources/mybatis/download/DownloadMapper.xml"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="-3041"> - <caret line="67" column="12" selection-start-line="67" selection-start-column="12" selection-end-line="67" selection-end-column="12" /> + <state relative-caret-position="114"> + <caret line="6" column="4" selection-start-line="6" selection-start-column="4" selection-end-line="6" selection-end-column="4" /> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/pc/config/material/controller/MaterialController.java"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/mobile/download/ApkController.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="113"> - <caret line="193" column="28" lean-forward="true" selection-start-line="193" selection-start-column="28" selection-end-line="193" selection-end-column="28" /> + <state relative-caret-position="1381"> + <caret line="86" column="13" lean-forward="true" selection-start-line="86" selection-start-column="13" selection-end-line="86" selection-end-column="13" /> + <folding> + <element signature="imports" expanded="true" /> + </folding> </state> </provider> </entry> - <entry file="file://$PROJECT_DIR$/src/main/resources/templates/config/material/print.html"> + <entry file="file://$PROJECT_DIR$/src/main/java/com/huaheng/mobile/receipt/MobileBatchReceiptController.java"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="133"> - <caret line="64" column="29" lean-forward="true" selection-start-line="64" selection-start-column="29" selection-end-line="64" selection-end-column="29" /> - <folding> - <element signature="n#style#0;n#input#0;n#td#1;n#tr#4;n#tbody#0;n#table#0;n#div#0;n#div#1;n#body#0;n#html#0;n#!!top" expanded="true" /> - <element signature="n#style#0;n#input#0;n#td#1;n#tr#4;n#tbody#0;n#table#0;n#div#0;n#div#1;n#body#0;n#html#0;n#!!top" expanded="true" /> - </folding> + <state relative-caret-position="-1234"> + <caret line="404" column="51" selection-start-line="404" selection-start-column="40" selection-end-line="404" selection-end-column="51" /> </state> </provider> </entry> diff --git a/src/main/java/com/huaheng/api/general/controller/AdjustApi.java b/src/main/java/com/huaheng/api/general/controller/AdjustApi.java new file mode 100644 index 0000000..bb27e16 --- /dev/null +++ b/src/main/java/com/huaheng/api/general/controller/AdjustApi.java @@ -0,0 +1,39 @@ +package com.huaheng.api.general.controller; + + +import com.huaheng.api.general.domain.AdjustDomain; +import com.huaheng.api.general.domain.CycCountDomain; +import com.huaheng.api.general.service.AdjustService; +import com.huaheng.api.general.service.CycleCountService; +import com.huaheng.framework.aspectj.lang.annotation.Log; +import com.huaheng.framework.aspectj.lang.constant.BusinessType; +import com.huaheng.framework.web.domain.AjaxResult; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("/api/adjustApi") +@Api(tags = {"adjust"}, description = "调整单接口") +public class AdjustApi { + + @Resource + private AdjustService adjustService; + + + /** + * 同步调整单 + */ + @Log(title = "调整单添加", action = BusinessType.INSERT) + @PostMapping("/adjust") + @ApiOperation("调整单添加公共接口") + @ResponseBody + public AjaxResult adjust(@RequestBody AdjustDomain adjustDomain) + { + AjaxResult ajaxResult = adjustService.insertAdjust(adjustDomain); + return ajaxResult; + } + +} diff --git a/src/main/java/com/huaheng/api/general/controller/CycleCountApi.java b/src/main/java/com/huaheng/api/general/controller/CycleCountApi.java new file mode 100644 index 0000000..be468a8 --- /dev/null +++ b/src/main/java/com/huaheng/api/general/controller/CycleCountApi.java @@ -0,0 +1,41 @@ +package com.huaheng.api.general.controller; + + +import com.huaheng.api.general.domain.CycCountDomain; +import com.huaheng.api.general.domain.ReceiptDomain; +import com.huaheng.api.general.service.CycleCountService; +import com.huaheng.api.general.service.ReceiptApiService; +import com.huaheng.framework.aspectj.lang.annotation.Log; +import com.huaheng.framework.aspectj.lang.constant.BusinessType; +import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.pc.inventory.cycleCountHeader.domain.CycleCountHeader; +import com.huaheng.pc.inventory.cycleCountHeader.service.CycleCountHeaderService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("/api/cycleCountApi") +@Api(tags = {"cycleCount"}, description = "盘点单接口") +public class CycleCountApi { + + @Resource + private CycleCountService cycleCountService; + + + /** + * 同步盘点单 + */ + @Log(title = "盘点单添加", action = BusinessType.INSERT) + @PostMapping("/adjust") + @ApiOperation("盘点单添加公共接口") + @ResponseBody + public AjaxResult cycleCount(@RequestBody CycCountDomain cycCountDomain) + { + AjaxResult ajaxResult = cycleCountService.insertCycleCount(cycCountDomain); + return ajaxResult; + } + +} diff --git a/src/main/java/com/huaheng/api/general/controller/ReceiptApi.java b/src/main/java/com/huaheng/api/general/controller/ReceiptApi.java index d39993d..5b60603 100644 --- a/src/main/java/com/huaheng/api/general/controller/ReceiptApi.java +++ b/src/main/java/com/huaheng/api/general/controller/ReceiptApi.java @@ -3,11 +3,14 @@ package com.huaheng.api.general.controller; import com.huaheng.api.general.domain.ReceiptDomain; import com.huaheng.api.general.service.ReceiptApiService; +import com.huaheng.common.utils.StringUtils; import com.huaheng.framework.aspectj.lang.annotation.Log; import com.huaheng.framework.aspectj.lang.constant.BusinessType; import com.huaheng.framework.web.domain.AjaxResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -34,4 +37,18 @@ public class ReceiptApi { return ajaxResult; } + + /** + * 取消入库单 + */ + @Log(title = "入库-入库单 ",operating = "入库单删除", action = BusinessType.UPDATE) + @PostMapping("/remove") + @ResponseBody + public AjaxResult remove(@RequestBody Integer[] ids){ + if (StringUtils.isNull(ids)){ + return AjaxResult.error("id为空"); + } + return receiptApiService.add(ids); + } + } diff --git a/src/main/java/com/huaheng/api/general/controller/ReceiptController.java b/src/main/java/com/huaheng/api/general/controller/ReceiptController.java deleted file mode 100644 index d847f6a..0000000 --- a/src/main/java/com/huaheng/api/general/controller/ReceiptController.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.huaheng.api.general.controller; - -import com.huaheng.api.general.domain.Receipt; -import com.huaheng.api.general.service.ReceiptService; -import com.huaheng.framework.aspectj.lang.annotation.Log; -import com.huaheng.framework.aspectj.lang.constant.BusinessType; -import com.huaheng.framework.web.domain.AjaxResult; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.*; - -import javax.annotation.Resource; - -/** - * Created by Enzo Cotter on 2019/11/4. - * @author mahuandong - */ -@RestController -@RequestMapping("/api/receipt") -@Api(tags = {"basicData"}, description = "入库接口") -public class ReceiptController { - - @Resource - private ReceiptService receiptService; - - /** - * 入库单下发 - */ - @Log(title = "入库单下发", action = BusinessType.INSERT) - @PostMapping("/insertReceipt") - @ApiOperation("入库单下发接口") - @ResponseBody - public AjaxResult MaterialApi(@RequestBody Receipt receipt) { - System.out.println("————————开始接收入库单——————————"); - System.out.println(receipt); - AjaxResult ajaxResult = receiptService.insertReceipt(receipt); - return ajaxResult; - } - -} diff --git a/src/main/java/com/huaheng/api/general/domain/AdjustDomain.java b/src/main/java/com/huaheng/api/general/domain/AdjustDomain.java new file mode 100644 index 0000000..aebcff5 --- /dev/null +++ b/src/main/java/com/huaheng/api/general/domain/AdjustDomain.java @@ -0,0 +1,14 @@ +package com.huaheng.api.general.domain; + +import com.huaheng.pc.inventory.adjustDetail.domain.AdjustDetail; +import com.huaheng.pc.inventory.adjustHeader.domain.AdjustHeader; +import com.huaheng.pc.inventory.cycleCountHeader.domain.CycleCountHeader; +import lombok.Data; + +import java.util.List; + +@Data +public class AdjustDomain { + private AdjustHeader adjustHeader; + private List<AdjustDetail> adjustDetailList; +} diff --git a/src/main/java/com/huaheng/api/general/domain/CycCountDomain.java b/src/main/java/com/huaheng/api/general/domain/CycCountDomain.java new file mode 100644 index 0000000..3e5334b --- /dev/null +++ b/src/main/java/com/huaheng/api/general/domain/CycCountDomain.java @@ -0,0 +1,15 @@ +package com.huaheng.api.general.domain; + +import com.huaheng.pc.inventory.cycleCountHeader.domain.CycleCountHeader; +import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; +import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +public class CycCountDomain { + private CycleCountHeader cycleCountHeader; + private Integer[] inventoryId; +} diff --git a/src/main/java/com/huaheng/api/general/domain/Receipt.java b/src/main/java/com/huaheng/api/general/domain/Receipt.java deleted file mode 100644 index ab37cd9..0000000 --- a/src/main/java/com/huaheng/api/general/domain/Receipt.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.huaheng.api.general.domain; - -import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; -import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader; -import lombok.Data; - -import java.util.List; - -/** - * Created by Enzo Cotter on 2019/11/4. - * @author mahuandong - */ -@Data -public class Receipt { - - private ReceiptHeader receiptHeader; - - private List<ReceiptDetail> receiptDetails; -} diff --git a/src/main/java/com/huaheng/api/general/service/AdjustService.java b/src/main/java/com/huaheng/api/general/service/AdjustService.java new file mode 100644 index 0000000..1cb516b --- /dev/null +++ b/src/main/java/com/huaheng/api/general/service/AdjustService.java @@ -0,0 +1,227 @@ +package com.huaheng.api.general.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.huaheng.api.general.domain.AdjustDomain; +import com.huaheng.api.general.domain.CycCountDomain; +import com.huaheng.common.constant.QuantityConstant; +import com.huaheng.common.exception.service.ServiceException; +import com.huaheng.common.utils.StringUtils; +import com.huaheng.common.utils.security.ShiroUtils; +import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.pc.check.checkDetail.domain.CheckDetail; +import com.huaheng.pc.check.checkDetail.service.CheckDetailService; +import com.huaheng.pc.config.configValue.domain.ConfigValue; +import com.huaheng.pc.config.configValue.service.ConfigValueService; +import com.huaheng.pc.config.cycleCountPreference.service.CycleCountPreferenceService; +import com.huaheng.pc.config.location.service.LocationService; +import com.huaheng.pc.config.material.domain.Material; +import com.huaheng.pc.config.material.service.MaterialService; +import com.huaheng.pc.inventory.adjustDetail.domain.AdjustDetail; +import com.huaheng.pc.inventory.adjustDetail.service.AdjustDetailService; +import com.huaheng.pc.inventory.adjustHeader.domain.AdjustHeader; +import com.huaheng.pc.inventory.adjustHeader.mapper.AdjustHeaderMapper; +import com.huaheng.pc.inventory.adjustHeader.service.AdjustHeaderService; +import com.huaheng.pc.inventory.cycleCountDetail.domain.CycleCountDetail; +import com.huaheng.pc.inventory.cycleCountDetail.service.CycleCountDetailService; +import com.huaheng.pc.inventory.cycleCountHeader.domain.CycleCountHeader; +import com.huaheng.pc.inventory.cycleCountHeader.service.CycleCountHeaderService; +import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; +import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService; +import com.huaheng.pc.task.taskDetail.service.TaskDetailService; +import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * Created by Enzo Cotter on 2019/11/4. + * @author mahuandong + */ +@Component +@Transactional(rollbackFor = Exception.class) +public class AdjustService { + + @Resource + private AdjustHeaderMapper adjustHeaderMapper; + @Resource + private AdjustDetailService adjustDetailService; + @Resource + private AdjustHeaderService adjustHeaderService; + @Resource + private InventoryDetailService inventoryDetailService; + @Resource + private CycleCountDetailService cycleCountDetailService; + @Resource + private CheckDetailService checkDetailService; + @Resource + private MaterialService materialService; + /** + * 调整单下发 + * @param adjustDomain 调整单 + * @return 是否下发成功 + */ + @Transactional(rollbackFor = Exception.class) + public AjaxResult insertAdjust(AdjustDomain adjustDomain){ + AdjustHeader adjustHeader =adjustDomain.getAdjustHeader(); + + List<AdjustDetail> adjustDetailList =adjustDomain.getAdjustDetailList(); + + if (adjustHeader==null || adjustDetailList==null){ + return AjaxResult.error("主单据和单据明细信息不能为空"); + } + + if (StringUtils.isEmpty(adjustDomain.getAdjustHeader().getProblemType())){ + return AjaxResult.error("调整类型不能为空"); + } + if (StringUtils.isEmpty(adjustDomain.getAdjustHeader().getWarehouseCode())){ + return AjaxResult.error("仓库编码不能为空"); + } + if (StringUtils.isEmpty(adjustDomain.getAdjustHeader().getCompanyCode())){ + return AjaxResult.error("货主编码不能为空"); + } + AdjustHeader adjustHeaderCode= this.addSave(adjustDomain.getAdjustHeader()); + + //查询主单及加入仓库和货主,盘点,质检单编码 + if(adjustHeaderCode == null){ + return AjaxResult.error("没有对应的主单据!"); + } + List<AdjustDetail> adjustDetails =new ArrayList<>(); + for (AdjustDetail detail:adjustDetailList) { + detail.setWarehouseCode(adjustHeaderCode.getWarehouseCode()); + detail.setAdjustCode(adjustHeaderCode.getCode()); + detail.setCompanyCode(adjustHeaderCode.getCompanyCode()); + detail.setCycleCountCode(adjustHeaderCode.getCycleCountCode()); + detail.setCheckCode(adjustHeaderCode.getCheckCode()); + this.addDetails(detail); + adjustDetails.add(detail); + + } + AdjustDomain adjustDomainAjax =new AdjustDomain(); + adjustDomainAjax.setAdjustHeader(adjustHeaderCode); + adjustDomainAjax.setAdjustDetailList(adjustDetails); + + return AjaxResult.success(adjustDomainAjax); + } + + /** + * 保存新增调整头 + * @param adjustHeader + * @return + */ + @Transactional + public AdjustHeader addSave(AdjustHeader adjustHeader) { + //校验调整类型 + //盘点调整,质检调整需要和盘点和质检单据确认。 + switch (adjustHeader.getProblemType()){ + case "checkAdjust": //质检调整 + if(StringUtils.isEmpty(adjustHeader.getCheckCode())){ + throw new SecurityException("选择单据类型为质检调整时,质检单编码不能为空!"); + } + break; + case "cyclecountAdjust": //盘点调整 + if(StringUtils.isEmpty(adjustHeader.getCycleCountCode())){ + throw new SecurityException("选择单据类型为盘点调整时,盘点单编码不能为空!"); + } + break; + case "adjust": //普通调整 + if(StringUtils.isEmpty(adjustHeader.getCycleCountCode())){ + throw new SecurityException("选择单据类型为普通调整时,盘点单编码不能为空!"); + } + break; + + } + + adjustHeader.setCreated(new Date()); + adjustHeader.setCreatedBy(ShiroUtils.getLoginName()); + adjustHeader.setCode(this.createCode()); + if (!adjustHeaderService.save(adjustHeader)){ + throw new SecurityException("新增调整单失败!"); + } + return adjustHeader; + } + + + @Transactional + public AjaxResult addDetails(AdjustDetail adjustDetail) { + + //查询主单据 + AdjustHeader adjustHeader = new AdjustHeader(); + adjustHeader.setCode(adjustDetail.getAdjustCode()); + adjustHeader.setWarehouseCode(adjustDetail.getWarehouseCode()); + adjustHeader.setCompanyCode(adjustDetail.getCompanyCode()); + LambdaQueryWrapper<AdjustHeader> lambdaQueryWrapper = Wrappers.lambdaQuery(adjustHeader); + adjustHeader = adjustHeaderService.getOne(lambdaQueryWrapper); + //检查库存 + if((adjustDetail.getInventoryDetailId()) != null){ + InventoryDetail inventoryDetail = inventoryDetailService.getById(adjustDetail.getInventoryDetailId()); + if(inventoryDetail == null){ + return AjaxResult.error("没有该条库存明细"); + } + } + //明细单据的上层单编码需要和主单一直,主单空值则不判断 + if(StringUtils.isNotEmpty(adjustHeader.getCycleCountCode()) || StringUtils.isNotEmpty(adjustHeader.getCheckCode())){ + adjustDetail.setCycleCountCode(adjustHeader.getCycleCountCode()); + adjustDetail.setCheckCode(adjustHeader.getCheckCode()); + } + //检查盘点单 + if(StringUtils.isNotEmpty(adjustDetail.getCycleCountCode())){ + LambdaQueryWrapper<CycleCountDetail> queryCycleCountCode = Wrappers.lambdaQuery(); + queryCycleCountCode.eq(CycleCountDetail::getCycleCountHeadCode,adjustDetail.getCycleCountCode()); + CycleCountDetail cycleCountDetail = cycleCountDetailService.list(queryCycleCountCode).get(0); + if(cycleCountDetail == null || !cycleCountDetail.getCycleCountHeadCode().equals(adjustDetail.getCycleCountCode())){ + return AjaxResult.error("盘点单错误,请核对盘点单据!"); + } + } + //检查质检单 + if(StringUtils.isNotEmpty(adjustDetail.getCheckCode())){ + CheckDetail checkDetail = checkDetailService.getById(adjustDetail.getCheckDetailId()); + if(checkDetail == null || !checkDetail.getCheckCode().equals(adjustDetail.getCheckCode())){ + return AjaxResult.error("质检单错误,请核对质检单据!"); + } + } + //检查物料 + Material material = materialService.findAllByCode(adjustDetail.getMaterialCode()); + if(material == null){ + return AjaxResult.error("物料编码错误!"); + } + + adjustDetail.setProblemType(adjustHeader.getProblemType());//调整类型 + adjustDetail.setMaterialUnit(material.getUnit()); + adjustDetail.setMaterialSpec(material.getSpec()); + adjustDetail.setCreated(new Date()); + adjustDetail.setCreatedBy(ShiroUtils.getLoginName()); + adjustDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); + adjustDetail.setLastUpdated(new Date()); + adjustDetailService.saveOrUpdate(adjustDetail); + + return AjaxResult.success("新增调整明细成功!"); + } + + + + //生成差异单号 + public String createCode() { + String code; + Date now = new Date(); + SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd"); + String maxCode = adjustHeaderMapper.getLastCode();; + //如果指定类型的最后的code存在,并且日期一致。那么 code = 单类型 + 年月日 + (排序号 + 1) + if (maxCode != null && maxCode.substring(maxCode.length() - 13, maxCode.length() - 5).equals(df.format(now))) + { + Integer Count = Integer.valueOf(maxCode.substring(maxCode.length() - 5, maxCode.length())); + code = "AD" + df.format(now) + String.format("%05d", Count + 1); + } + else + { + code = "AD" + df.format(now) + "00001"; + } + return code; + } + +} diff --git a/src/main/java/com/huaheng/api/general/service/CycleCountService.java b/src/main/java/com/huaheng/api/general/service/CycleCountService.java new file mode 100644 index 0000000..fa6590c --- /dev/null +++ b/src/main/java/com/huaheng/api/general/service/CycleCountService.java @@ -0,0 +1,172 @@ +package com.huaheng.api.general.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.huaheng.api.general.domain.CycCountDomain; +import com.huaheng.common.constant.QuantityConstant; +import com.huaheng.common.exception.service.ServiceException; +import com.huaheng.common.utils.StringUtils; +import com.huaheng.common.utils.security.ShiroUtils; +import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.pc.config.configValue.domain.ConfigValue; +import com.huaheng.pc.config.configValue.service.ConfigValueService; +import com.huaheng.pc.config.cycleCountPreference.service.CycleCountPreferenceService; +import com.huaheng.pc.config.location.service.LocationService; +import com.huaheng.pc.inventory.cycleCountDetail.domain.CycleCountDetail; +import com.huaheng.pc.inventory.cycleCountDetail.service.CycleCountDetailService; +import com.huaheng.pc.inventory.cycleCountHeader.domain.CycleCountHeader; +import com.huaheng.pc.inventory.cycleCountHeader.service.CycleCountHeaderService; +import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; +import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService; +import com.huaheng.pc.task.taskDetail.service.TaskDetailService; +import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * Created by Enzo Cotter on 2019/11/4. + * @author mahuandong + */ +@Component +@Transactional(rollbackFor = Exception.class) +public class CycleCountService { + + @Resource + private CycleCountHeaderService cycleCountHeaderService; + @Resource + private CycleCountDetailService cycleCountDetailService; + @Resource + private InventoryDetailService inventoryDetailService; + @Resource + private LocationService locationService; + @Resource + private TaskHeaderService taskHeaderService; + @Resource + private TaskDetailService taskDetailService; + @Resource + private ConfigValueService configValueService; + @Resource + private CycleCountPreferenceService cycleCountPreferenceService; + /** + * 盘点单下发 + * @param cycCountDomain 盘点单 + * @return 是否下发成功 + */ + @Transactional(rollbackFor = Exception.class) + public AjaxResult insertCycleCount(CycCountDomain cycCountDomain){ + CycleCountHeader cycleCountHeader =cycCountDomain.getCycleCountHeader(); + + if (cycleCountHeader==null || cycCountDomain.getInventoryId()==null){ + return AjaxResult.error("主单据或库存id不能为空"); + } + + if (StringUtils.isEmpty(cycCountDomain.getCycleCountHeader().getCountType())){ + return AjaxResult.error("盘点类型不能为空"); + } + if (StringUtils.isEmpty(cycleCountHeader.getWarehouseCode())){ + return AjaxResult.error("仓库编码不能为空"); + } + if (StringUtils.isEmpty(cycleCountHeader.getCompanyCode())){ + return AjaxResult.error("货主编码不能为空"); + } + + cycleCountHeader.setWarehouseCode(ShiroUtils.getWarehouseCode()); + cycleCountHeader.setCompanyCode(cycleCountHeader.getCompanyCode()); + cycleCountHeader.setCreated(new Date()); + cycleCountHeader.setCreatedBy(ShiroUtils.getLoginName()); + cycleCountHeader.setCode(cycleCountHeaderService.createCode()); + if (!cycleCountHeaderService.save(cycleCountHeader)){ + return AjaxResult.error("新增盘点单失败"); + } + this.addDetails(cycleCountHeader.getCode(),cycCountDomain.getInventoryId()); + + return AjaxResult.success("成功"); + } + + /** + * 新增盘点明细 + * */ + @Transactional + public AjaxResult addDetails(String cycleCountHeadCode, Integer[] inventoryDetailIdIds) { + + if(cycleCountHeadCode == null){ + throw new ServiceException("盘点主单编码不能为空!"); + } + CycleCountHeader cyclecountHeader =new CycleCountHeader(); + cyclecountHeader.setCode(cycleCountHeadCode); + LambdaQueryWrapper<CycleCountHeader> ch = Wrappers.lambdaQuery(cyclecountHeader); + cyclecountHeader = cycleCountHeaderService.getOne(ch); + //可能存在并发删除的情况 + if(cyclecountHeader==null){ + return AjaxResult.error("盘点主单据不存在"); + } + if(cyclecountHeader.getStatusCyc() > QuantityConstant.CYCLECOUNT_STATUS_BUILD){ + return AjaxResult.error("盘点单非新建状态,无法再添加明细"); + } + //默认盘点配置,首选项 + ConfigValue configValue = new ConfigValue(); + configValue.setModuleType("cyclecount"); + configValue.setWarehouseCode(ShiroUtils.getWarehouseCode()); + LambdaQueryWrapper<ConfigValue> configValueLambdaQueryWrapper = Wrappers.lambdaQuery(configValue); + configValue = configValueService.getOne(configValueLambdaQueryWrapper); + if(configValue == null){ + throw new SecurityException("请先在配置中添加盘点配置"); + } + String preferenceCode = configValue.getIdentifier(); + //获取已经存在的明细 + CycleCountDetail cycleCountDetail = new CycleCountDetail(); + cycleCountDetail.setWarehouseCode(cyclecountHeader.getWarehouseCode()); + cycleCountDetail.setCompanyCode(cyclecountHeader.getCompanyCode()); + cycleCountDetail.setCycleCountHeadCode(cyclecountHeader.getCode()); + LambdaQueryWrapper<CycleCountDetail> cycleCountDetailLambd = Wrappers.lambdaQuery(cycleCountDetail); + List<CycleCountDetail> cyclecountDetailList = cycleCountDetailService.list(cycleCountDetailLambd); + if(cyclecountDetailList == null){ + cyclecountDetailList = new ArrayList<>(); + } + for(int inventoryDetailId : inventoryDetailIdIds){ + //当前有盘点明细时验证是否已经生成盘点细单,生成则跳出该条循环 + if(cyclecountDetailList.stream().anyMatch(t -> t.getInventoryDetailId()!=null && t.getInventoryDetailId() == inventoryDetailId)){ + continue; + } + //查询该条库存明细 + InventoryDetail inventoryDetail = inventoryDetailService.getById(inventoryDetailId); + //写入盘点明细 + CycleCountDetail ccd = new CycleCountDetail(); + ccd.setPreferenceCode(preferenceCode); + ccd.setCycleCountHeadCode(cyclecountHeader.getCode()); + ccd.setInventoryDetailId(inventoryDetailId); + ccd.setWarehouseCode(inventoryDetail.getWarehouseCode()); + ccd.setCompanyCode(inventoryDetail.getCompanyCode()); + ccd.setInventorySts(inventoryDetail.getInventorySts()); + ccd.setCountId(inventoryDetail.getId()); + //ccd.setEnableStatus(1); + ccd.setLocationCode(inventoryDetail.getLocationCode()); + ccd.setContainerCode(inventoryDetail.getContainerCode()); + ccd.setMaterialCode(inventoryDetail.getMaterialCode()); + ccd.setMaterialName(inventoryDetail.getMaterialName()); + ccd.setMaterialSpec(inventoryDetail.getMaterialSpec()); + ccd.setMaterialUnit(inventoryDetail.getMaterialUnit()); + ccd.setSystemQty(inventoryDetail.getQty()); + ccd.setBatch(inventoryDetail.getBatch()); + ccd.setLot(inventoryDetail.getLot()); + ccd.setProjectNo(inventoryDetail.getProjectNo()); + ccd.setCountedBy(cyclecountHeader.getCreatedBy()); + ccd.setCountedAt(cyclecountHeader.getCreated()); + ccd.setCreated(new Date()); + ccd.setCreatedBy(ShiroUtils.getLoginName()); + ccd.setLastUpdated(new Date()); + ccd.setLastUpdatedBy(ShiroUtils.getLoginName()); + cycleCountDetailService.save(ccd); + //更新库存盘点锁 + inventoryDetail.setLockCode("cyclecount"); + inventoryDetailService.saveOrUpdate(inventoryDetail); + } + return AjaxResult.success("生成盘点明细成功"); + } + +} diff --git a/src/main/java/com/huaheng/api/general/service/ReceiptApiService.java b/src/main/java/com/huaheng/api/general/service/ReceiptApiService.java index 3bb80f7..cbca32e 100644 --- a/src/main/java/com/huaheng/api/general/service/ReceiptApiService.java +++ b/src/main/java/com/huaheng/api/general/service/ReceiptApiService.java @@ -4,8 +4,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.huaheng.api.general.controller.ReceiptApi; import com.huaheng.api.general.domain.ReceiptDomain; +import com.huaheng.common.constant.QuantityConstant; import com.huaheng.common.exception.service.ServiceException; +import com.huaheng.common.support.Convert; import com.huaheng.common.utils.StringUtils; +import com.huaheng.common.utils.security.ShiroUtils; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.config.FilterConfigDetail.domain.FilterConfigDetail; import com.huaheng.pc.config.FilterConfigDetail.service.FilterConfigDetailService; @@ -23,14 +26,21 @@ import com.huaheng.pc.config.warehouse.domain.Warehouse; import com.huaheng.pc.config.warehouse.service.WarehouseService; import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService; +import com.huaheng.pc.receipt.receiptDetailHistory.domain.ReceiptDetailHistory; +import com.huaheng.pc.receipt.receiptDetailHistory.service.ReceiptDetailHistoryService; import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader; import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService; +import com.huaheng.pc.receipt.receiptHeaderHistory.domain.ReceiptHeaderHistory; +import com.huaheng.pc.receipt.receiptHeaderHistory.service.ReceiptHeaderHistoryService; +import org.apache.commons.beanutils.BeanUtils; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; @Component @@ -54,6 +64,10 @@ public class ReceiptApiService { private FilterConfigDetailService filterConfigDetailService; @Resource private StatusFlowHeaderService statusFlowHeaderService; + @Resource + private ReceiptHeaderHistoryService receiptHeaderHistoryService; + @Resource + private ReceiptDetailHistoryService receiptDetailHistoryService; /** * 入库单下发 * @param receipt 入库单 @@ -218,4 +232,65 @@ public class ReceiptApiService { return AjaxResult.success(""); } + + + @Transactional + public AjaxResult add(Integer[] ids){ + List<Integer> idList = Arrays.asList(ids); + for (Integer id : idList) { + ReceiptHeader receiptHeader = receiptHeaderService.getById(id); + if (receiptHeader == null) { + return AjaxResult.success(""); + } + if((receiptHeader.getFirstStatus()>= QuantityConstant.RECEIPT_HEADER_POSTING && receiptHeader.getLastStatus()>=QuantityConstant.RECEIPT_HEADER_POSTING)|| + (receiptHeader.getFirstStatus()<QuantityConstant.RECEIPT_HEADER_POOL &receiptHeader.getLastStatus()<QuantityConstant.RECEIPT_HEADER_POOL)){ + ReceiptHeaderHistory receiptHeaderHistory = new ReceiptHeaderHistory(); + List<ReceiptDetailHistory> receiptDetailHistoryList = new ArrayList<>(); + //查询入库单明细 + LambdaQueryWrapper<ReceiptDetail> lambdaQueryWrapper = Wrappers.lambdaQuery(); + lambdaQueryWrapper.eq(ReceiptDetail::getReceiptId, id); + List<ReceiptDetail> list = receiptDetailService.list(lambdaQueryWrapper); + try { + //复制到入库历史实体 + BeanUtils.copyProperties(receiptHeaderHistory, receiptHeader); + for (ReceiptDetail receiptDetail: list) { + ReceiptDetailHistory receiptDetailHistory = new ReceiptDetailHistory(); + BeanUtils.copyProperties(receiptDetailHistory, receiptDetail); + receiptDetailHistoryList.add(receiptDetailHistory); + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + + receiptHeaderHistory.setLastUpdatedBy(ShiroUtils.getLoginName()); + if (!receiptHeaderService.removeById(receiptHeader.getId())){ + throw new ServiceException("删除头表失败"); + } + if(!receiptHeaderHistoryService.save(receiptHeaderHistory)){ + throw new ServiceException("新增历史入库单失败"); + } + // 当存在明细时删除 + if (list.size()!= 0){ + //删除入库明细 + List<Integer> receiptDetailIds = new ArrayList<>(); + for (int i=0; i<receiptDetailHistoryList.size();i++){ + receiptDetailHistoryList.get(i).setLastUpdatedBy(ShiroUtils.getLoginName()); + receiptDetailHistoryList.get(i).setReceiptId(receiptHeaderHistory.getId()); + receiptDetailIds.add(receiptDetailHistoryList.get(i).getId()); + } + if (!receiptDetailService.removeByIds(receiptDetailIds)) { + throw new ServiceException("删除明细表失败"); + } + if (!receiptDetailHistoryService.saveBatch(receiptDetailHistoryList)){ + throw new ServiceException("新增明细失败"); + } } + + }else { + return AjaxResult.success("入库单没有完成,无法删除"); + } + } + return AjaxResult.success("删除成功"); + } } diff --git a/src/main/java/com/huaheng/api/general/service/ReceiptService.java b/src/main/java/com/huaheng/api/general/service/ReceiptService.java deleted file mode 100644 index 44cf3f3..0000000 --- a/src/main/java/com/huaheng/api/general/service/ReceiptService.java +++ /dev/null @@ -1,216 +0,0 @@ -package com.huaheng.api.general.service; - -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.huaheng.api.general.domain.Receipt; -import com.huaheng.common.exception.service.ServiceException; -import com.huaheng.common.utils.StringUtils; -import com.huaheng.framework.web.domain.AjaxResult; -import com.huaheng.pc.config.FilterConfigDetail.domain.FilterConfigDetail; -import com.huaheng.pc.config.FilterConfigDetail.service.FilterConfigDetailService; -import com.huaheng.pc.config.company.domain.Company; -import com.huaheng.pc.config.company.service.CompanyService; -import com.huaheng.pc.config.material.domain.Material; -import com.huaheng.pc.config.material.service.MaterialService; -import com.huaheng.pc.config.receiptType.domain.ReceiptType; -import com.huaheng.pc.config.receiptType.service.ReceiptTypeService; -import com.huaheng.pc.config.statusFlow.domain.StatusFlowHeader; -import com.huaheng.pc.config.statusFlow.service.StatusFlowHeaderService; -import com.huaheng.pc.config.supplier.domain.Supplier; -import com.huaheng.pc.config.supplier.service.SupplierService; -import com.huaheng.pc.config.warehouse.domain.Warehouse; -import com.huaheng.pc.config.warehouse.service.WarehouseService; -import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; -import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService; -import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader; -import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService; -import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; - -import javax.annotation.Resource; -import java.math.BigDecimal; -import java.util.List; - -/** - * Created by Enzo Cotter on 2019/11/4. - * @author mahuandong - */ -@Component -@Transactional(rollbackFor = Exception.class) -public class ReceiptService { - - @Resource - private ReceiptHeaderService receiptHeaderService; - @Resource - private ReceiptDetailService receiptDetailService; - @Resource - private ReceiptTypeService receiptTypeService; - @Resource - private WarehouseService warehouseService; - @Resource - private CompanyService companyService; - @Resource - private MaterialService materialService; - @Resource - private SupplierService supplierService; - @Resource - private FilterConfigDetailService filterConfigDetailService; - @Resource - private StatusFlowHeaderService statusFlowHeaderService; - /** - * 入库单下发 - * @param receipt 入库单 - * @return 是否下发成功 - */ - @Transactional(rollbackFor = Exception.class) - public AjaxResult insertReceipt(Receipt receipt){ - - /* 0.step 获取入库头表,获取入库明细*/ - ReceiptHeader receiptHeader = receipt.getReceiptHeader(); - List<ReceiptDetail> receiptDetails = receipt.getReceiptDetails(); - /* 1.step 校验入库单是否为空*/ - if (receiptHeader == null || receiptDetails.isEmpty()){ - throw new ServiceException("入库主单或入库子单为空"); - } - /* 2.step 检查入库头表合法性*/ - AjaxResult checkReceiptHeaderResult = checkReceiptHeader(receiptHeader); - if (checkReceiptHeaderResult.hasErr() ){ - return AjaxResult.error(checkReceiptHeaderResult.getMsg()); - } - - /* 3.step 检查入库明细合法性*/ - AjaxResult checkReceiptDetailResult = checkReceiptDetail(receiptDetails); - if (checkReceiptDetailResult.hasErr() ){ - return AjaxResult.error(checkReceiptDetailResult.getMsg()); - } - - /* 4.step 计算入库明细总行数、总数量*/ - BigDecimal totalQty = new BigDecimal(0); - for (ReceiptDetail receiptDetail: receiptDetails) { - totalQty.add(receiptDetail.getTotalQty()); - } - receiptHeader.setTotalLines(receiptDetails.size()); - receiptHeader.setTotalQty(totalQty); - - /* 5.step 保存的入库头表*/ - if (!receiptHeaderService.save(receiptHeader)){ - throw new ServiceException("保存入库头表失败"); - } - - /* 6.step 保存入库明细*/ - LambdaQueryWrapper<ReceiptHeader> lambda = Wrappers.lambdaQuery(); - lambda.eq(ReceiptHeader::getWarehouseCode, receiptHeader.getWarehouseCode()) - .eq(ReceiptHeader::getCode, receiptHeader.getCode()); - receiptHeader = receiptHeaderService.getOne(lambda); - for (ReceiptDetail receiptDetail : receiptDetails) { - receiptDetail.setReceiptId(receiptHeader.getId()); - receiptDetail.setReceiptCode(receiptHeader.getCode()); - receiptDetail.setWarehouseCode(receiptHeader.getWarehouseCode()); - receiptDetail.setCompanyCode(receiptHeader.getWarehouseCode()); - Material material = materialService.findAllByCode(receiptDetail.getMaterialCode()); - receiptDetail.setMaterialName(material.getName()); - receiptDetail.setMaterialSpec(material.getSpec()); - receiptDetail.setMaterialUnit(material.getUnit()); - if (!receiptDetailService.save(receiptDetail)){ - throw new ServiceException("保存入库明细失败"); - } - } - - return AjaxResult.success("成功"); - } - - /** - * 检查入库头表合法性 - * @param receiptHeader 入库头表 - * @return 检查结果 - */ - private AjaxResult checkReceiptHeader(ReceiptHeader receiptHeader){ - /* 0.step 必填项是否为空*/ - if (StringUtils.isEmpty(receiptHeader.getCode()) || StringUtils.isEmpty(receiptHeader.getCompanyCode()) || - StringUtils.isEmpty(receiptHeader.getWarehouseCode()) || StringUtils.isEmpty(receiptHeader.getReceiptType())){ - return AjaxResult.error("入库主单字段有误"); - } - - /* 1.step 查询该单据编码是否已存在*/ - LambdaQueryWrapper<ReceiptHeader> receiptHeaderLambda = Wrappers.lambdaQuery(receiptHeader); - if (receiptHeaderService.getOne(receiptHeaderLambda) != null){ - return AjaxResult.error("该单据已存在:"+receiptHeader.getCode()); - } - - /* 2.step 判断入库类型是否匹配*/ - LambdaQueryWrapper<ReceiptType> receiptTypeLambda = Wrappers.lambdaQuery(); - receiptTypeLambda.eq(ReceiptType::getCode, receiptHeader.getReceiptType()); - if (receiptTypeService.getOne(receiptTypeLambda) == null){ - return AjaxResult.error("没有对应的入库单类型"); - } - - /* 3.step 判断仓库是否存在*/ - LambdaQueryWrapper<Warehouse> warehouseLambda = Wrappers.lambdaQuery(); - warehouseLambda.eq(Warehouse::getCode, receiptHeader.getWarehouseCode()); - if (warehouseService.getOne(warehouseLambda) == null){ - return AjaxResult.error("该仓库不存在"); - } - - /* 4.step 判断货主是否存在*/ - LambdaQueryWrapper<Company> companyLambda = Wrappers.lambdaQuery(); - companyLambda.eq(Company::getCode, receiptHeader.getCompanyCode()); - if (companyService.getOne(companyLambda) == null){ - return AjaxResult.error("该货主不存在"); - } - - return AjaxResult.success(""); - } - - /** - * 检查入库明细合法性 - * @param receiptDetails 入库明细 - * @return 检查结果 - */ - private AjaxResult checkReceiptDetail(List<ReceiptDetail> receiptDetails){ - - for (ReceiptDetail receiptDetail: receiptDetails) { - /* 0.step 判断必填字段是否为空且总数量不能为0*/ - if (receiptDetail.getMaterialCode() == null || - new BigDecimal(0).compareTo(receiptDetail.getTotalQty() != null ? - receiptDetail.getTotalQty() : new BigDecimal(0)) == 0 ){ - return AjaxResult.error("入库明细字段有误"); - } - - /* 1.step 判断供应商是否存在*/ - if (receiptDetail.getSupplierCode() != null){ - LambdaQueryWrapper<Supplier> supplierLambda = Wrappers.lambdaQuery(); - supplierLambda.eq(Supplier::getCode, receiptDetail.getSupplierCode()); - if (supplierService.getOne(supplierLambda) == null) { - return AjaxResult.error("供应商不存在"); - } - } - - /* 2.step 判断定位规则是否存在*/ - if (receiptDetail.getLocatingRule() != null){ - LambdaQueryWrapper<FilterConfigDetail> filterConfigDetailLambda = Wrappers.lambdaQuery(); - filterConfigDetailLambda.eq(FilterConfigDetail::getCode, receiptDetail.getLocatingRule()) - .eq(FilterConfigDetail::getModuleType, "receipt") - .eq(FilterConfigDetail::getRecordType, "locationRule"); - FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(filterConfigDetailLambda); - if (filterConfigDetail == null){ - return AjaxResult.error(receiptDetail.getLocatingRule()+"定位规则不存在"); - } - } - - /* 3.step 判断流程编码是否存在*/ - if (receiptDetail.getStatusFlowCode() != null){ - LambdaQueryWrapper<StatusFlowHeader> statusFlowHeaderLambda = Wrappers.lambdaQuery(); - statusFlowHeaderLambda.eq(StatusFlowHeader::getCode, receiptDetail.getStatusFlowCode()) - .eq(StatusFlowHeader::getModuleType, "receipt") - .eq(StatusFlowHeader::getRecordType, "receivingFlow"); - StatusFlowHeader statusFlowHeader = statusFlowHeaderService.getOne(statusFlowHeaderLambda); - if (statusFlowHeader == null){ - return AjaxResult.error(receiptDetail.getLocatingRule()+"该流程不存在"); - } - } - } - - return AjaxResult.success(""); - } - -} diff --git a/src/main/java/com/huaheng/framework/config/ShiroConfig.java b/src/main/java/com/huaheng/framework/config/ShiroConfig.java index f9b5c65..0ad6771 100644 --- a/src/main/java/com/huaheng/framework/config/ShiroConfig.java +++ b/src/main/java/com/huaheng/framework/config/ShiroConfig.java @@ -263,6 +263,7 @@ public class ShiroConfig filterChainDefinitionMap.put("/admin/logout", "adminlogout"); // 不需要拦截的访问 // filterChainDefinitionMap.put("/admin/home", "anon,captchaValidate"); + filterChainDefinitionMap.put("/mobile/download/*", "anon,captchaValidate"); filterChainDefinitionMap.put("/admin/login", "anon,captchaValidate"); filterChainDefinitionMap.put("/login", "anon,captchaValidate"); filterChainDefinitionMap.put("/api/login", "anon,captchaValidate"); diff --git a/src/main/java/com/huaheng/mobile/download/ApkController.java b/src/main/java/com/huaheng/mobile/download/ApkController.java new file mode 100644 index 0000000..597c2fa --- /dev/null +++ b/src/main/java/com/huaheng/mobile/download/ApkController.java @@ -0,0 +1,104 @@ +package com.huaheng.mobile.download; + +import com.alibaba.fastjson.JSONException; +import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.pc.common.mapper.ApkMapper; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/mobile/download") +public class ApkController { + + @Resource + ApkMapper apkMapper; + + @PostMapping("/getUpdateApkInfo") + @ApiOperation("获取apk更新信息") + public AjaxResult getUpdateApkInfo(@RequestBody Map<String, String> param) { + System.out.println("getUpdateApkInfo pkgName:" + param.get("pkgName")); + if (param.get("pkgName") == null) + throw new JSONException("pkgName不能为空"); + if (param.get("versionCode") == null) + throw new JSONException("versionCode不能为空"); + List<ApkInfo> apkinfos = apkMapper.getApkInfoByPkgName(param.get("pkgName")); + ApkInfo apkInfo = apkinfos.get(0); + int maxVersion = Integer.MAX_VALUE; + String project = param.containsKey("project") ? param.get("project") : null; + if(project != null) { + if(project.equals(Constant.PROJECT_XIANGJI)) { + maxVersion = Constant.PROJECT_XIANGJI_MAX_LEVEL; + } + } + for (ApkInfo apkInfo2 : apkinfos) //循环找到版本最大值 + { + if (apkInfo.getVersionCode() < apkInfo2.getVersionCode()) { + if(apkInfo2.getVersionCode() > maxVersion) { + continue; + } + apkInfo = apkInfo2; + } + } + + int versionCode = Integer.parseInt(param.get("versionCode")); + System.out.println("getUpdateApkInfo versionCode:" + versionCode); + System.out.println("apkInfo.getVersionCode():" + apkInfo.getVersionCode()); + if(versionCode >= apkInfo.getVersionCode()) { + return AjaxResult.error("当前已经是最新版本"); + } + + return AjaxResult.success(apkInfo); + } + + @PostMapping("/insertApkInfo") + @ApiOperation("插入apk更新信息") + public ApkInfo insertApkInfo(@RequestBody Map<String, String> param) { + System.out.println("insertApkInfo pkgName:" + param.get("pkgName")); + if (param.get("pkgName") == null) + throw new JSONException("pkgName不能为空"); + if (param.get("versionCode") == null) + throw new JSONException("versionCode不能为空"); + if (param.get("versionName") == null) + throw new JSONException("versionName"); + if (param.get("url") == null) + throw new JSONException("url"); + if (param.get("md5") == null) + throw new JSONException("md5"); + ApkInfo apkInfo = buildApkInfo(param); + try { + apkMapper.insertApkInfo(apkInfo.getPkgName(), apkInfo.getVersionCode(), apkInfo.getVersionName(), apkInfo.getUrl(), apkInfo.getMd5()); + } catch(Exception e) { + + } + return apkInfo; + } + + @PostMapping("/clearApkInfo") + @ApiOperation("删除apk信息") + public AjaxResult clearApkInfo(@RequestBody Map<String, String> param) { + System.out.println("clearApkInfo"); + try { + apkMapper.clearApkInfo(); + } catch(Exception e) { + + } + return AjaxResult.success("删除apk信息成功"); + } + + private ApkInfo buildApkInfo(Map<String, String> param) { + ApkInfo apkInfo = new ApkInfo(); + apkInfo.setPkgName(param.get("pkgName")); + apkInfo.setVersionCode(Integer.parseInt(param.get("versionCode"))); + apkInfo.setVersionName(param.get("versionName")); + apkInfo.setUrl(param.get("url")); + apkInfo.setMd5(param.get("md5")); + return apkInfo; + } +} diff --git a/src/main/java/com/huaheng/mobile/download/ApkInfo.java b/src/main/java/com/huaheng/mobile/download/ApkInfo.java new file mode 100644 index 0000000..c118c46 --- /dev/null +++ b/src/main/java/com/huaheng/mobile/download/ApkInfo.java @@ -0,0 +1,59 @@ +package com.huaheng.mobile.download; + +public class ApkInfo { + + private Integer id; + private String pkgName; + private Integer versionCode; + private String versionName; + private String url; + private String md5; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getPkgName() { + return pkgName; + } + + public void setPkgName(String pkgName) { + this.pkgName = pkgName; + } + + public Integer getVersionCode() { + return versionCode; + } + + public void setVersionCode(Integer versionCode) { + this.versionCode = versionCode; + } + + public String getVersionName() { + return versionName; + } + + public void setVersionName(String versionName) { + this.versionName = versionName; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getMd5() { + return md5; + } + + public void setMd5(String md5) { + this.md5 = md5; + } +} diff --git a/src/main/java/com/huaheng/mobile/download/Constant.java b/src/main/java/com/huaheng/mobile/download/Constant.java new file mode 100644 index 0000000..7abcc7c --- /dev/null +++ b/src/main/java/com/huaheng/mobile/download/Constant.java @@ -0,0 +1,7 @@ +package com.huaheng.mobile.download; + +public class Constant { + + public static final String PROJECT_XIANGJI = "xiangji"; + public static final int PROJECT_XIANGJI_MAX_LEVEL = 4; +} diff --git a/src/main/java/com/huaheng/mobile/general/CompanyInfo.java b/src/main/java/com/huaheng/mobile/general/CompanyInfo.java new file mode 100644 index 0000000..3f66346 --- /dev/null +++ b/src/main/java/com/huaheng/mobile/general/CompanyInfo.java @@ -0,0 +1,52 @@ +package com.huaheng.mobile.general; + +/** + * + * @author Enzo Cotter + * @date 2019/12/15 + */ +public class CompanyInfo { + + private int companyId; + private String companyCode; + private String companyName; + + public CompanyInfo(int companyId, String companyCode, String companyName) { + this.companyId = companyId; + this.companyCode = companyCode; + this.companyName = companyName; + } + + public int getCompanyId() { + return companyId; + } + + public void setCompanyId(int companyId) { + this.companyId = companyId; + } + + public String getCompanyCode() { + return companyCode; + } + + public void setCompanyCode(String companyCode) { + this.companyCode = companyCode; + } + + public String getCompanyName() { + return companyName; + } + + public void setCompanyName(String companyName) { + this.companyName = companyName; + } + + @Override + public String toString() { + return "CompanyInfo{" + + "companyId=" + companyId + + ", companyCode='" + companyCode + '\'' + + ", companyName='" + companyName + '\'' + + '}'; + } +} diff --git a/src/main/java/com/huaheng/mobile/general/MobileUserController.java b/src/main/java/com/huaheng/mobile/general/MobileUserController.java new file mode 100644 index 0000000..2fd94f0 --- /dev/null +++ b/src/main/java/com/huaheng/mobile/general/MobileUserController.java @@ -0,0 +1,113 @@ +package com.huaheng.mobile.general; + +import com.alibaba.fastjson.JSONException; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.huaheng.common.utils.StringUtils; +import com.huaheng.common.utils.security.ShiroUtils; +import com.huaheng.framework.web.controller.BaseController; +import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.pc.config.company.domain.Company; +import com.huaheng.pc.config.company.service.CompanyService; +import com.huaheng.pc.system.menu.domain.Menu; +import com.huaheng.pc.system.menu.service.IMenuService; +import com.huaheng.pc.system.user.domain.User; +import com.huaheng.pc.system.user.service.IUserService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.UsernamePasswordToken; +import org.apache.shiro.subject.Subject; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * + * @author Enzo Cotter + * @date 2019/12/15 + */ +@RestController +@RequestMapping("/mobile/") +@Api(tags = {"MobileUserController"}, description = "移动端用户信息") +public class MobileUserController extends BaseController { + + @Resource + private IMenuService menuService; + @Resource + private IUserService userService; + @Resource + private CompanyService companyService; + + @PostMapping("/login") + @ApiOperation("用户登陆") + public AjaxResult login(@RequestBody @ApiParam(value="code和password的Map集合") Map<String, String> param) { + if (param.get("code") == null) { + throw new JSONException("code(用户名)不能为空"); + } + if (param.get("password") == null) { + throw new JSONException("password(密码)不能为空"); + } + UsernamePasswordToken token = new UsernamePasswordToken(param.get("code"), param.get("password"), false); + Subject subject = SecurityUtils.getSubject(); + SecurityUtils.getSubject().getSession().setTimeout(-1000L); + try { + subject.login(token); + List<Map<String, Object>> list = userService.getWarehouseByUserCode(param.get("code")); + return AjaxResult.success(list); + } catch (AuthenticationException e) { + String msg = "用户或密码错误"; + if (StringUtils.isNotEmpty(e.getMessage())) { + msg = e.getMessage(); + } + return error(msg); + } + } + + @PostMapping("/getModules") + @ApiOperation("获取当前用户模块列表") + public AjaxResult getModules(@RequestBody @ApiParam(value="WarehouseId和warehouseCode的Map集合") Map<String, String> param) { + if (param.get("warehouseCode") == null) { + throw new JSONException("warehouseCode(仓库编码)不能为空"); + } + User user = ShiroUtils.getUser(); + user.setWarehouseCode(param.get("warehouseCode")); + ShiroUtils.setUser(user); + List<Company> companys = companyService.selectCompanyByCurrentUserId(); + user.setCompanyIdList(companys.stream().map(X -> X.getId()).collect(Collectors.toList())); + user.setCompanyCodeList(companys.stream().map(X -> X.getCode()).collect(Collectors.toList())); + ShiroUtils.setUser(user); + List<Menu> menus = menuService.selectMobileMenusByUserId(ShiroUtils.getUserId()); + return AjaxResult.success(menus); + } + + @PostMapping("/heartbeat") + @ApiOperation("心跳接口,用于延长cookie有效期") + public AjaxResult heartbeat() + { + return AjaxResult.success("success"); + } + + @PostMapping("/getCompanyInfo") + @ApiOperation("获取公司信息") + public AjaxResult getCompanyInfo() { + LambdaQueryWrapper<Company> queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(Company::getDeleted, false); + + List<Company> companies = companyService.list(queryWrapper); + List<CompanyInfo> companyInfos = new ArrayList<>(); + for(Company company : companies) { + companyInfos.add(new CompanyInfo(company.getId(), company.getCode(), company.getName())); + } + return AjaxResult.success(companyInfos); + } +} diff --git a/src/main/java/com/huaheng/mobile/invenory/InventoryDetails.java b/src/main/java/com/huaheng/mobile/invenory/InventoryDetails.java new file mode 100644 index 0000000..e4b3387 --- /dev/null +++ b/src/main/java/com/huaheng/mobile/invenory/InventoryDetails.java @@ -0,0 +1,38 @@ +package com.huaheng.mobile.invenory; + +import java.math.BigDecimal; + +/** + * + * @author Enzo Cotter + * @date 2019/12/15 + */ +public class InventoryDetails { + + private String date; + private BigDecimal qty; + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public BigDecimal getQty() { + return qty; + } + + public void setQty(BigDecimal qty) { + this.qty = qty; + } + + @Override + public String toString() { + return "InventoryDetails{" + + "date='" + date + '\'' + + ", qty=" + qty + + '}'; + } +} diff --git a/src/main/java/com/huaheng/mobile/invenory/MobileInventory.java b/src/main/java/com/huaheng/mobile/invenory/MobileInventory.java new file mode 100644 index 0000000..82942a1 --- /dev/null +++ b/src/main/java/com/huaheng/mobile/invenory/MobileInventory.java @@ -0,0 +1,33 @@ +package com.huaheng.mobile.invenory; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * + * @author Enzo Cotter + * @date 2019/12/15 + */ +@Data +public class MobileInventory { + + /** 库位id */ + private int id; + /** 库位编号 */ + private String locationCode; + /** 容器编号 */ + private String containerCode; + /** 物料编码 */ + private String materialCode; + /**物料名称 */ + private String materialName; + /**物料规格 */ + private String specification; + /** 数量 */ + private BigDecimal qty; + /** 任务数量 */ + private BigDecimal taskQty = new BigDecimal(0); + /** 结果类型 */ + private int resultType; +} diff --git a/src/main/java/com/huaheng/mobile/invenory/MobileInventoryController.java b/src/main/java/com/huaheng/mobile/invenory/MobileInventoryController.java new file mode 100644 index 0000000..ea0e541 --- /dev/null +++ b/src/main/java/com/huaheng/mobile/invenory/MobileInventoryController.java @@ -0,0 +1,392 @@ +package com.huaheng.mobile.invenory; + +import com.alibaba.fastjson.JSONException; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.huaheng.common.support.Convert; +import com.huaheng.common.utils.DataUtils; +import com.huaheng.common.utils.StringUtils; +import com.huaheng.common.utils.security.ShiroUtils; +import com.huaheng.framework.aspectj.lang.annotation.Log; +import com.huaheng.framework.aspectj.lang.constant.BusinessType; +import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.pc.config.container.domain.Container; +import com.huaheng.pc.config.container.service.ContainerService; +import com.huaheng.pc.config.location.domain.Location; +import com.huaheng.pc.config.location.service.LocationService; +import com.huaheng.pc.inventory.cycleCountDetail.service.CycleCountDetailService; +import com.huaheng.pc.inventory.inventoryHeader.service.InventoryHeaderService; +import com.huaheng.pc.report.excelReport.mapper.ExcelReportMapper; +import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.*; + +/** + * + * @author Enzo Cotter + * @date 2019/12/15 + */ +@CrossOrigin +@RestController +@RequestMapping("/mobile/inventory") +@Api(tags = {"MobileInventoryController"}, description = "手机立体库库存相关") +public class MobileInventoryController { + + @Resource + private InventoryHeaderService inventoryService; + @Resource + private TaskHeaderService taskService; + @Resource + private LocationService locationService; + @Resource + ExcelReportMapper mapper; + @Resource + private CycleCountDetailService cycleCountDetailService; + @Resource + private ContainerService containerService; + + @PostMapping("/getInventoryInfo") + @ApiOperation("移动端获得库存详情") + @Log(title = "移动端获得库存详情", action = BusinessType.OTHER) + public AjaxResult getInventoryInfo(@RequestBody @ApiParam(value="物料编码或者库位号") Map<String, String> param) { + if (param.get("code") == null || param.get("code").trim().length() < 1) { + throw new JSONException("查询码(code)不能为空"); + } + if (param.get("companyCode") == null || param.get("companyCode").trim().length() < 1) { + throw new JSONException("(companyCode)不能为空"); + } + return inventoryService.getInventory(param.get("code"), param.get("companyCode")); + } + + @PostMapping("/createCheckOutTask") + @ApiOperation("移动端创建出库查看任务") + @ResponseBody + public AjaxResult createCheckOutTask(@RequestBody @ApiParam(value="库存ids") Map<String, String> param){ + String ids = param.get("ids"); + Integer companyId = DataUtils.getInteger(param.get("companyId")) ; + String companyCode = param.get("companyCode"); + if(StringUtils.isEmpty(ids)){ + return AjaxResult.error("ids不能为空"); + } + return taskService.createCheckOutTask(ids.split(",")); + } + + @PostMapping("/transfer") + @ApiOperation("移动端创建移库任务") + @ResponseBody + public AjaxResult transfer(@RequestBody @ApiParam(value="库位情况") Map<String, String> param){ + String sourceLocation = param.get("sourceLocation"); + String destinationLocation = param.get("destinationLocation"); + return taskService.createTransferTask(sourceLocation, destinationLocation); + } + + @PostMapping( "/execute") + @ApiOperation("执行立库任务") + @ResponseBody + public AjaxResult execute(@RequestBody @ApiParam(value="任务id") Map<String, String> param) { + String taskId = param.get("taskId"); + if (StringUtils.isEmpty(taskId)) { + return AjaxResult.error("taskId不能为空"); + } + + AjaxResult ajaxResult = taskService.sendTaskToWcs(Convert.toIntArray(taskId)); + if(ajaxResult.hasErr()) { + AjaxResult.success("执行失败"); + } + return AjaxResult.success("下发执行成功"); + } + + @PostMapping( "/executeList") + @ApiOperation("执行立库任务") + @Log(title = "执行立库任务", action = BusinessType.OTHER) + public AjaxResult executeList(@RequestBody List<TaskIds> taskDetails) { + Integer[] taskIds = new Integer[taskDetails.size()]; + for(int i=0; i<taskDetails.size() ; i++) { + TaskIds taskDetail = taskDetails.get(i); + taskIds[i] = taskDetail.getTaskId(); + } + AjaxResult ajaxResult = taskService.sendTaskToWcs(taskIds); + return ajaxResult; + } + + @PostMapping( "/completeTaskByWMS") + @ApiOperation("完成立库任务") + @ResponseBody + public AjaxResult completeTaskByWMS(@RequestBody @ApiParam(value="任务id") Map<String, String> param) throws Exception { + String taskId = param.get("taskId"); + if (StringUtils.isEmpty(taskId)) { + return AjaxResult.error("taskId不能为空"); + } + AjaxResult ajaxResult = taskService.completeTaskByWMS(Convert.toIntArray(taskId)); + return ajaxResult; + } + + @PostMapping( "/completeTaskListByWMS") + @ApiOperation("完成立库任务") + @ResponseBody + public AjaxResult completeTaskListByWMS(@RequestBody List<TaskIds> taskDetails) throws Exception { + Integer[] taskIds = new Integer[taskDetails.size()]; + for(int i=0; i<taskDetails.size() ; i++) { + TaskIds taskDetail = taskDetails.get(i); + taskIds[i] = taskDetail.getTaskId(); + } + AjaxResult ajaxResult = taskService.completeTaskByWMS(taskIds); + return ajaxResult; + } + + @PostMapping( "/isLocation") + @ApiOperation("判断是不是库位") + @ResponseBody + public AjaxResult isLocation(@RequestBody @ApiParam(value="任务id") Map<String, String> param) { + String code = param.get("code"); + if (StringUtils.isEmpty(code)) { + return AjaxResult.error("location不能为空"); + } + LambdaQueryWrapper<Location> queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(Location::getCode, code); + Location location = locationService.getOne(queryWrapper); + if(location == null) { + return AjaxResult.error("没有这个库位"); + } + return AjaxResult.success("库位存在"); + } + + @PostMapping("/getLocationCode") + @ApiOperation("移动端获得库位联想词") + @Log(title = "移动端获得库位联想词", action = BusinessType.OTHER) + public AjaxResult getLocationCode(@RequestBody @ApiParam(value="库位号") Map<String, String> param) { + if (param.get("code") == null || param.get("code").trim().length() < 1) { + throw new JSONException("查询码(code)不能为空"); + } + String type = param.get("type"); + if (type == null || type.trim().length() < 1) { + throw new JSONException("type不能为空"); + } + + return inventoryService.getLocationForecast(param.get("code"), Integer.parseInt(type)); + } + + @PostMapping("/createEmptyIn") + @ApiOperation("移动端空托入库") + @Log(title = "移动端空托入库", action = BusinessType.OTHER) + public AjaxResult createEmptyIn(@RequestBody Map<String, String> param) { + if (param.get("containerCode") == null || param.get("containerCode").trim().length() < 1) { + throw new JSONException("容器号不能为空"); + } +// if (param.get("destinationLocation") == null || param.get("destinationLocation").trim().length() < 1) { +// throw new JSONException("目的库位不能为空"); +// } + String containerCode = param.get("containerCode"); + String destinationLocation = param.get("destinationLocation"); + String companyCode = param.get("companyCode"); + return inventoryService.createEmptyIn(containerCode, destinationLocation); + } + + @PostMapping("/createEmptyOut") + @ApiOperation("移动端空托出库") + @Log(title = "移动端空托出库", action = BusinessType.OTHER) + public AjaxResult createEmptyOut(@RequestBody Map<String, String> param) { + if (param.get("containerCode") == null || param.get("containerCode").trim().length() < 1){ + throw new JSONException("容器号不能为空"); + } + if (param.get("sourceLocation") == null || param.get("sourceLocation").trim().length() < 1) { + throw new JSONException("源库位不能为空"); + } + String containerCode = param.get("containerCode"); + String sourceLocation = param.get("sourceLocation"); + return inventoryService.createEmptyOut(containerCode, sourceLocation); + } + + @PostMapping("/get7daysShipment") + @ApiOperation("移动端获取7天收货和出货量") + @Log(title = "移动端获取7天收货和出货量", action = BusinessType.OTHER) + public AjaxResult get7daysShipment(@RequestBody Map<String, String> param) { + String sql = "select a.click_date as date,ifnull(b.taskQty,0) as qty\n" + + "from (\n" + + " SELECT curdate() as click_date\n" + + " union all\n" + + " SELECT date_sub(curdate(), interval 1 day) as click_date\n" + + " union all\n" + + " SELECT date_sub(curdate(), interval 2 day) as click_date\n" + + " union all\n" + + " SELECT date_sub(curdate(), interval 3 day) as click_date\n" + + " union all\n" + + " SELECT date_sub(curdate(), interval 4 day) as click_date\n" + + " union all\n" + + " SELECT date_sub(curdate(), interval 5 day) as click_date\n" + + " union all\n" + + " SELECT date_sub(curdate(), interval 6 day) as click_date\n" + + ") a left join (\n" + + "SELECT DATE(h.created) AS created , SUM(d.qty) AS taskQty from shipment_container_detail d join shipment_container_header h on d.shippingContainerId = h.id and h.warehouseCode='"+ShiroUtils.getWarehouseCode()+"' WHERE h.created >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND h.status=30 GROUP BY DATE(h.created)\n" + + ") b on a.click_date = b.created ORDER BY a.click_date;"; + List<LinkedHashMap<String, Object>> list = mapper.selectCommon(sql); + + sql = "select a.click_date as date,ifnull(b.taskQty,0) as qty\n" + + "from (\n" + + " SELECT curdate() as click_date\n" + + " union all\n" + + " SELECT date_sub(curdate(), interval 1 day) as click_date\n" + + " union all\n" + + " SELECT date_sub(curdate(), interval 2 day) as click_date\n" + + " union all\n" + + " SELECT date_sub(curdate(), interval 3 day) as click_date\n" + + " union all\n" + + " SELECT date_sub(curdate(), interval 4 day) as click_date\n" + + " union all\n" + + " SELECT date_sub(curdate(), interval 5 day) as click_date\n" + + " union all\n" + + " SELECT date_sub(curdate(), interval 6 day) as click_date\n" + + ") a left join (\n" + + "SELECT DATE(h.created) AS created , SUM(d.qty) AS taskQty from receipt_container_detail d join receipt_container_header h on d.receiptContainerId = h.id and h.warehouseCode='"+ShiroUtils.getWarehouseCode()+"' WHERE h.created >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) AND d.status=30 GROUP BY DATE(h.created)\n" + + ") b on a.click_date = b.created ORDER BY a.click_date;"; + List<LinkedHashMap<String, Object>> list2 = mapper.selectCommon(sql); + + + List<LinkedHashMap<String, Object>> result = new ArrayList<>(); + result.addAll(list); + result.addAll(list2); + + List<InventoryDetails> inventoryDetailList = new ArrayList<>(); + for(LinkedHashMap<String, Object> map : result) { + Iterator iter = map.entrySet().iterator(); + String date = null; + BigDecimal qty = new BigDecimal(0); + while (iter.hasNext()) { + Map.Entry entry = (Map.Entry) iter.next(); + Object key = entry.getKey(); + Object val = entry.getValue(); + if(date == null) { + date = val.toString(); + } else { + qty = (BigDecimal) val; + } + } + inventoryDetailList.add(newInventoryDetail(date, qty)); + } + return AjaxResult.success(inventoryDetailList); + } + + private InventoryDetails newInventoryDetail(String date, BigDecimal qty) { + InventoryDetails inventoryDetail = new InventoryDetails(); + inventoryDetail.setDate(date); + inventoryDetail.setQty(qty); + return inventoryDetail; + } + + @PostMapping("/getTodayShipmentDetail") + @ApiOperation("移动端获得今天发货详情") + @Log(title = "移动端获得今天发货详情", action = BusinessType.OTHER) + public AjaxResult getTodayShipmentDetail(@RequestBody Map<String, String> param) { + String sql = "select d.materialName, SUM(d.qty) as qty " + + "from shipment_container_header h join shipment_container_detail d " + + "on d.shippingContainerId = h.id WHERE h.created >= CURDATE() AND h.`status`>19 GROUP BY d.materialName"; + List<LinkedHashMap<String, Object>> list = mapper.selectCommon(sql); + + sql = "select m.name, b.taskQty as qty \n" + + "from material m \n" + + "join (\n" + + "select d.materialCode as material, SUM(d.qty) " + + "as taskQty from receipt_container_header h join receipt_container_detail d " + + "on d.receiptContainerId = h.id WHERE h.created >= CURDATE() AND h.`status`>19 GROUP BY d.materialCode\n" + + ") b on m.`code` = b.material ORDER BY m.name"; + List<LinkedHashMap<String, Object>> list2 = mapper.selectCommon(sql); + List<com.huaheng.mobile.invenory.ShipmentDetail> shipmentDetails = getShipmentDetails(list); + shipmentDetails.add(newShipmentDetail("delete", new BigDecimal(0))); + shipmentDetails.addAll(getShipmentDetails(list2)); + + return AjaxResult.success(shipmentDetails); + } + + private List<com.huaheng.mobile.invenory.ShipmentDetail> getShipmentDetails(List<LinkedHashMap<String, Object>> list) { + List<com.huaheng.mobile.invenory.ShipmentDetail> shipmentDetails = new ArrayList<>(); + for (LinkedHashMap<String, Object> map : list) { + Iterator iter = map.entrySet().iterator(); + String materialName = null; + BigDecimal qty = new BigDecimal(0); + while (iter.hasNext()) { + Map.Entry entry = (Map.Entry) iter.next(); + Object key = entry.getKey(); + Object val = entry.getValue(); + if (materialName == null) { + materialName = val.toString(); + } else { + qty = (BigDecimal) val; + } + } + shipmentDetails.add(newShipmentDetail(materialName, qty)); + } + return shipmentDetails; + } + + private com.huaheng.mobile.invenory.ShipmentDetail newShipmentDetail(String materialName, BigDecimal qty){ + com.huaheng.mobile.invenory.ShipmentDetail shipmentDetail = new com.huaheng.mobile.invenory.ShipmentDetail(); + shipmentDetail.setMaterialName(materialName); + shipmentDetail.setQty(qty); + return shipmentDetail; + } + + /** + * 移动端根据容器编码获取盘点任务 + * @param param + * @return + */ + @ResponseBody + @PostMapping("/findTransferByContainerCode") + public AjaxResult findTransferByContainerCode(@RequestBody Map<String, String> param) { + String containCode = param.get("containCode"); + if (StringUtils.isEmpty(containCode)){ + return AjaxResult.error("容器编码为空"); + } else { + return AjaxResult.success(taskService.mobileFindTransferTask(containCode)); + } + } + + /** + * 移动端实盘登记 + * @param param + * @return + */ + @ResponseBody + @PostMapping("/confirmGapQty") + public AjaxResult confirmGapQty(@RequestBody Map<String, String> param) { + int detailId = Integer.parseInt(param.get("detailId")); + BigDecimal qty = new BigDecimal(param.get("qty")); + return cycleCountDetailService.confirmGapQty(detailId, qty); + } + + @PostMapping("/getEmptyContainerInLocation") + @ApiOperation("选取空托出库的库位") + @Log(title = "选取空托出库的库位", action = BusinessType.OTHER) + public AjaxResult getEmptyContainerInLocation(@RequestBody Map<String, String> param) { + String warehouCOde = ShiroUtils.getWarehouseCode(); + List<Location> list = containerService.getEmptyContainerInLocation(null,null,ShiroUtils.getWarehouseCode()); + return AjaxResult.success(list); + } + + @PostMapping("/pickLocation") + @ApiOperation("选取补充入库的库位") + @Log(title = "选取补充入库的库位", action = BusinessType.OTHER) + public AjaxResult pickLocation(@RequestBody Map<String, String> param) { + List<Location> locations = locationService.pickLocation(); + Container condition = new Container(); + condition.setWarehouseCode(ShiroUtils.getWarehouseCode()); + LambdaQueryWrapper lambda3 = Wrappers.lambdaQuery(condition); + List<Container> containers = containerService.list(lambda3); + for(Location location : locations) { + for(Container container : containers) { + if(container.getCode().equals(location.getContainerCode())) { + if(container.getStatus().equals("some")) { + location.setStatus("some"); + } + } + } + } + return AjaxResult.success(locations); + } +} diff --git a/src/main/java/com/huaheng/mobile/invenory/ShipmentDetail.java b/src/main/java/com/huaheng/mobile/invenory/ShipmentDetail.java new file mode 100644 index 0000000..71a18f5 --- /dev/null +++ b/src/main/java/com/huaheng/mobile/invenory/ShipmentDetail.java @@ -0,0 +1,35 @@ +package com.huaheng.mobile.invenory; + +import java.math.BigDecimal; + +/** + * Created by Enzo Cotter on 2019/12/15. + */ +public class ShipmentDetail { + private String materialName; + private BigDecimal qty; + + public String getMaterialName() { + return materialName; + } + + public void setMaterialName(String materialName) { + this.materialName = materialName; + } + + public BigDecimal getQty() { + return qty; + } + + public void setQty(BigDecimal qty) { + this.qty = qty; + } + + @Override + public String toString() { + return "ShipmentDetail{" + + "materialName='" + materialName + '\'' + + ", qty=" + qty + + '}'; + } +} diff --git a/src/main/java/com/huaheng/mobile/invenory/TaskIds.java b/src/main/java/com/huaheng/mobile/invenory/TaskIds.java new file mode 100644 index 0000000..f495915 --- /dev/null +++ b/src/main/java/com/huaheng/mobile/invenory/TaskIds.java @@ -0,0 +1,26 @@ +package com.huaheng.mobile.invenory; + +/** + * + * @author Enzo Cotter + * @date 2019/12/15 + */ +public class TaskIds { + + private int taskId; + + public int getTaskId() { + return taskId; + } + + public void setTaskId(int taskId) { + this.taskId = taskId; + } + + @Override + public String toString() { + return "TaskDetail{" + + "taskId=" + taskId + + '}'; + } +} diff --git a/src/main/java/com/huaheng/mobile/receipt/MaterialInfo.java b/src/main/java/com/huaheng/mobile/receipt/MaterialInfo.java new file mode 100644 index 0000000..225d1f3 --- /dev/null +++ b/src/main/java/com/huaheng/mobile/receipt/MaterialInfo.java @@ -0,0 +1,93 @@ +package com.huaheng.mobile.receipt; + +/** + * + * @author Enzo Cotter + * @date 2019/12/15 + */ +public class MaterialInfo { + + private String materialCode; + + private String materialName; + + private String qty; + + private String type; + + private String batch; + + private String project; + + private String weight; + + public String getMaterialCode() { + return materialCode; + } + + public void setMaterialCode(String materialCode) { + this.materialCode = materialCode; + } + + public String getMaterialName() { + return materialName; + } + + public void setMaterialName(String materialName) { + this.materialName = materialName; + } + + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getQty() { + return qty; + } + + public void setQty(String qty) { + this.qty = qty; + } + + public String getBatch() { + return batch; + } + + public void setBatch(String batch) { + this.batch = batch; + } + + public String getProject() { + return project; + } + + public void setProject(String project) { + this.project = project; + } + + public String getWeight() { + return weight; + } + + public void setWeight(String weight) { + this.weight = weight; + } + + @Override + public String toString() { + return "MaterialInfo{" + + "materialCode='" + materialCode + '\'' + + ", materialName='" + materialName + '\'' + + ", qty='" + qty + '\'' + + ", type='" + type + '\'' + + ", batch='" + batch + '\'' + + ", project='" + project + '\'' + + ", weight='" + weight + '\'' + + '}'; + } +} diff --git a/src/main/java/com/huaheng/mobile/receipt/MobileBatchReceiptController.java b/src/main/java/com/huaheng/mobile/receipt/MobileBatchReceiptController.java new file mode 100644 index 0000000..d6313d3 --- /dev/null +++ b/src/main/java/com/huaheng/mobile/receipt/MobileBatchReceiptController.java @@ -0,0 +1,507 @@ +package com.huaheng.mobile.receipt; + +import com.alibaba.fastjson.JSONException; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.huaheng.api.general.domain.ReceiptDomain; +import com.huaheng.common.constant.QuantityConstant; +import com.huaheng.common.exception.service.ServiceException; +import com.huaheng.common.utils.StringUtils; +import com.huaheng.common.utils.security.ShiroUtils; +import com.huaheng.framework.aspectj.lang.annotation.Log; +import com.huaheng.framework.aspectj.lang.constant.BusinessType; +import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.pc.config.company.service.CompanyService; +import com.huaheng.pc.config.container.domain.Container; +import com.huaheng.pc.config.container.service.ContainerService; +import com.huaheng.pc.config.location.domain.Location; +import com.huaheng.pc.config.location.service.LocationService; +import com.huaheng.pc.config.material.domain.Material; +import com.huaheng.pc.config.material.service.MaterialService; +import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail; +import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService; +import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader; +import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerView; +import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService; +import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; +import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService; +import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader; +import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService; +import com.huaheng.pc.task.taskDetail.domain.TaskDetail; +import com.huaheng.pc.task.taskDetail.service.TaskDetailService; +import com.huaheng.pc.task.taskHeader.domain.TaskHeader; +import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; +import groovy.json.JsonException; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * + * @author Enzo Cotter + * @date 2019/12/15 + */ +@CrossOrigin +@RestController +@RequestMapping("/mobile/receipt/batch") +@Api(tags = {"MobileBatchReceiptController"}, description = "移动端收货") +public class MobileBatchReceiptController { + + @Resource + private ReceiptContainerHeaderService receiptContainerHeaderService; + @Resource + private ReceiptHeaderService receiptHeaderService; + @Resource + private ReceiptDetailService receiptDetailService; + @Resource + private ReceiptContainerDetailService receiptContainerDetailService; + @Resource + private ContainerService containerService; + @Resource + private MaterialService materialService; + @Resource + private LocationService locationService; + @Resource + private TaskHeaderService taskHeaderService; + @Resource + private TaskDetailService taskDetailService; + @Resource + private CompanyService companyService; + + @PostMapping("/scanBill") + @ApiOperation("移动端扫描入库单") + @Log(title = "移动端扫描入库单", action = BusinessType.OTHER) + public AjaxResult scanBill(@RequestBody @ApiParam(value = "收货单号") Map<String, String> param) throws Exception { + if (param.get("code") == null || param.get("code").trim().length() < 1) { + throw new JSONException("收货单号(code)不能为空"); + } else if (StringUtils.isEmpty(param.get("type"))) { + throw new JsonException("入库单类型不能为空"); + } else if (StringUtils.isEmpty(param.get("companyCode"))) { + throw new JsonException("库存组织不能为空"); + } + return receiptDetailService.scanReceiptCode(param.get("code"), param.get("type"), param.get("companyCode")); + } + + @PostMapping("/scanContainer") + @ApiOperation("移动端入库扫描容器") + @Log(title = "移动端入库扫描容器", action = BusinessType.OTHER) + public AjaxResult scanContainer(@RequestBody @ApiParam(value = "容器号") Map<String, String> param) throws Exception { + if (param.get("code") == null || param.get("code").trim().length() < 1) { + throw new JSONException("容器号(code)不能为空"); + } + + ReceiptContainerView receiptContainerView = new ReceiptContainerView(); + receiptContainerView.setReceiptContainerCode(param.get("code")); + receiptContainerView.setTaskType((short) 100); + AjaxResult result = receiptContainerHeaderService.checkContainer(receiptContainerView); + LambdaQueryWrapper<Container> containerLambdaQueryWrapper = Wrappers.lambdaQuery(); + containerLambdaQueryWrapper.eq(Container::getCode, param.get("code")); + Container container = containerService.getOne(containerLambdaQueryWrapper); + if (container == null) { + return AjaxResult.error("托盘编码错误"); + } + if (!container.getStatus().equals("empty")) { + return AjaxResult.error("托盘状态不为空"); + } + if (!container.getLocationCode().equals("")) { + return AjaxResult.error(""); + } + return result; + } + + @PostMapping("/save") + @ApiOperation("移动端收货保存") + @Log(title = "移动端收货保存", action = BusinessType.OTHER) + public AjaxResult save(@RequestBody @ApiParam(value = "收货单") List<ReceiptContainerView> record) throws Exception { + AjaxResult result = receiptContainerHeaderService.batchSave(record); + return result; + } + + @PostMapping("/getMaterial") + @ApiOperation("移动端获取物料信息") + @Log(title = "移动端获取物料信息", action = BusinessType.OTHER) + public AjaxResult getMaterial(@RequestBody @ApiParam(value = "物料号") Map<String, String> param) throws Exception { + if (param.get("code") == null || param.get("code").trim().length() < 1) { + throw new JSONException("容器号(code)不能为空"); + } + Material material = materialService.findAllByCode(param.get("code")); + if (material == null) { + return AjaxResult.error("没有该物料"); + } + MaterialInfo materialInfo = new MaterialInfo(); + materialInfo.setMaterialCode(material.getCode()); + materialInfo.setMaterialName(material.getName()); + materialInfo.setType(material.getSpec()); + + return AjaxResult.success(materialInfo); + } + + @PostMapping("/getLatestMaterial") + @ApiOperation("移动端获取物料信息") + @Log(title = "移动端获取物料信息", action = BusinessType.OTHER) + public AjaxResult getLatestMaterial(@RequestBody @ApiParam(value = "物料号") Map<String, String> param) throws Exception { + List<Material> materials = materialService.findLatest(); + if (materials == null) { + return AjaxResult.error("没有找到物料"); + } + + return AjaxResult.success(materials); + } + + @PostMapping("/getLatestReceipt") + @ApiOperation("移动端获取入库单") + @Log(title = "移动端获取入库单", action = BusinessType.OTHER) + public AjaxResult getLatestReceipt(@RequestBody @ApiParam(value = "物料号") Map<String, String> param) throws Exception { + String companyCode = param.get("companyCode"); + List<ReceiptHeader> receiptHeaders = receiptHeaderService.getLatestReceipt(companyCode); + if (receiptHeaders == null) { + return AjaxResult.error("没有找到入库单"); + } + return AjaxResult.success(receiptHeaders); + } + + + + @PostMapping("/checkLocation") + @ApiOperation("移动端验证库位") + @Log(title = "移动端验证库位", action = BusinessType.OTHER) + public AjaxResult checkLocation(@RequestBody @ApiParam(value = "物料号") Map<String, String> param) throws Exception { + if (param.get("code") == null || param.get("code").trim().length() < 1) { + throw new JSONException("容器号(code)不能为空"); + } + + boolean result = locationService.checkLocation(param.get("code")); + if (!result) { + return AjaxResult.error("没有该库位"); + } + return AjaxResult.success(result); + } + + @PostMapping("/getFreeLocation") + @ApiOperation("移动端获得空闲库位") + @Log(title = "移动端获得空闲库位", action = BusinessType.OTHER) + public AjaxResult getFreeLocation(@RequestBody @ApiParam(value = "物料号") Map<String, String> param) throws Exception { + if (param.get("materialCode") == null || param.get("materialCode").trim().length() < 1) { + throw new JSONException("materialCode不能为空"); + } + + if (param.get("batch") == null || param.get("batch").trim().length() < 1) { + throw new JSONException("batch不能为空"); + } + String materialCode = param.get("materialCode"); + String batch = param.get("batch"); + boolean result = locationService.getFreeLocation(materialCode, batch); + if (!result) { + return AjaxResult.error("没有空闲的分区库位"); + } + return AjaxResult.success(result); + } + + @PostMapping("/getContainerCode") + @ApiOperation("移动端验证库位") + @Log(title = "移动端验证库位", action = BusinessType.OTHER) + public AjaxResult getContainerCode(@RequestBody @ApiParam(value = "物料号") Map<String, String> param) throws Exception { + if (param.get("code") == null || param.get("code").trim().length() < 1) { + throw new JSONException("容器号(code)不能为空"); + } + LambdaQueryWrapper<Location> queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(Location::getCode, param.get("code")) + .eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(Location::getDeleted, false); + Location location = locationService.getOne(queryWrapper); + if (location == null) { + return AjaxResult.error("没有该库位"); + } + return AjaxResult.success("成功", location.getContainerCode()); + } + + @PostMapping("/quickReceipt") + @ApiOperation("移动端收货保存") + @Log(title = "移动端收货保存", action = BusinessType.OTHER) + @Transactional(rollbackFor = Exception.class) + public AjaxResult quickReceipt(@RequestBody @ApiParam(value="收货单") List<ReceiptBill> receiptBills) throws Exception { + if (receiptBills == null || receiptBills.size() <=0) { + throw new JSONException("没有收货信息"); + } + String containerCode = receiptBills.get(0).receiptContainerCode; + String locationCode = receiptBills.get(0).locationCode; + String companyCode = receiptBills.get(0).getCompanyCode(); + String receiptDetailId = receiptBills.get(0).getReceiptDetailId(); + + LambdaQueryWrapper<Container> containerQueryWrapper = Wrappers.lambdaQuery(); + containerQueryWrapper.eq(Container::getCode, containerCode); + Container container = containerService.getOne(containerQueryWrapper); + if(container == null) { + throw new JSONException("不存在这个托盘"); + } + if(locationCode.equals(container.getLocationCode())) { + /* 查询未完成的入库任务*/ + LambdaQueryWrapper<TaskHeader> taskQueryWrapper = Wrappers.lambdaQuery(); + taskQueryWrapper.eq(TaskHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .in(TaskHeader::getTaskType, QuantityConstant.TASK_TYPE_WHOLERECEIPT, + QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT) + .lt(TaskHeader::getStatus, 100) + .eq(TaskHeader::getContainerCode, containerCode); + TaskHeader taskHeader = taskHeaderService.getOne(taskQueryWrapper); + if(taskHeader == null) { + throw new JSONException("没有找到托盘对应的任务"); + } + + LambdaQueryWrapper<ReceiptDetail> receiptDetailQueryWrapper = Wrappers.lambdaQuery(); + receiptDetailQueryWrapper.eq(ReceiptDetail::getId, receiptDetailId); + ReceiptDetail receiptDetail = receiptDetailService.getOne(receiptDetailQueryWrapper); + if(receiptDetail == null) { + throw new JSONException("没有找到入库单详情"); + } + + LambdaQueryWrapper<ReceiptHeader> receiptHeaderQueryWrapper = Wrappers.lambdaQuery(); + receiptHeaderQueryWrapper.eq(ReceiptHeader::getId, receiptDetail.getReceiptId()); + ReceiptHeader receiptHeader = receiptHeaderService.getOne(receiptHeaderQueryWrapper); + if(receiptHeader == null) { + throw new JSONException("没有找到入库单"); + } + + LambdaQueryWrapper<ReceiptContainerHeader> lambda = Wrappers.lambdaQuery(); + lambda.eq(ReceiptContainerHeader::getContainerCode, containerCode) + .lt(ReceiptContainerHeader::getStatus, QuantityConstant.RECEIPT_CONTAINER_FINISHED); + List<ReceiptContainerHeader> list = receiptContainerHeaderService.list(lambda); + if (list.size() >= 1){ + throw new ServiceException("容器已经生成任务,不能放物料了!"); + } + ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader(); + //如果不存在记录则新建记录 + receiptContainerHeader.setWarehouseCode(ShiroUtils.getWarehouseCode()); + receiptContainerHeader.setCompanyCode(companyCode); + receiptContainerHeader.setContainerCode(containerCode); + Container container2 = containerService.findAllByCode(containerCode); + receiptContainerHeader.setContainerType(container2.getContainerType()); + receiptContainerHeader.setTaskType(String.valueOf(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT)); + receiptContainerHeader.setFromLocation(container2.getLocationCode()); + receiptContainerHeader.setToLocation(locationCode); + receiptContainerHeader.setCreatedBy(ShiroUtils.getLoginName()); + receiptContainerHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); + receiptContainerHeader.setStatus((short)10); + + if (!receiptContainerHeaderService.save(receiptContainerHeader)){ + throw new ServiceException("入库组盘头表保存失败"); + } + + receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_RECEIVING); + receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_RECEIVING); + receiptHeaderService.update(receiptHeader, receiptHeaderQueryWrapper); + + taskHeader.setAllocationHeadId(receiptContainerHeader.getId()); + taskHeaderService.update(taskHeader, taskQueryWrapper); + + for(ReceiptBill receiptBill : receiptBills) { + TaskDetail taskDetail = new TaskDetail(); + taskDetail.setTaskId(taskHeader.getId()); + taskDetail.setContainerCode(containerCode); + taskDetail.setTaskType(taskHeader.getTaskType()); + taskDetail.setInternalTaskType(taskHeader.getInternalTaskType()); + taskDetail.setWarehouseCode(ShiroUtils.getWarehouseCode()); + taskDetail.setCompanyCode(companyCode); + taskDetail.setBillCode(receiptHeader.getCode()); + taskDetail.setBillDetailId(Integer.parseInt(receiptBill.getReceiptDetailId())); + taskDetail.setMaterialCode(receiptBill.getMaterialCode()); + taskDetail.setMaterialName(receiptBill.getMaterialName()); + taskDetail.setQty(receiptBill.getQty()); + taskDetail.setFromLocation(taskHeader.getFromLocation()); + taskDetail.setToLocation(taskHeader.getToLocation()); + taskDetail.setStatus(taskHeader.getStatus()); + taskDetail.setBatch(receiptBill.getBatch()); + taskDetail.setCompanyCode(taskHeader.getCompanyCode()); + taskDetailService.save(taskDetail); + + + LambdaQueryWrapper<ReceiptDetail> receiptDetail2QueryWrapper = Wrappers.lambdaQuery(); + receiptDetail2QueryWrapper.eq(ReceiptDetail::getId, receiptBill.getReceiptDetailId()); + ReceiptDetail receiptDetail2 = receiptDetailService.getOne(receiptDetail2QueryWrapper); + if(receiptDetail2 == null) { + throw new JSONException("没有找到入库单详情"); + } + + BigDecimal openQty = receiptDetail2.getOpenQty(); + BigDecimal totalQty = receiptDetail2.getTotalQty(); + BigDecimal qty = openQty.add(receiptBill.getQty()); + if(totalQty.subtract(qty).compareTo(BigDecimal.ZERO) < 0) { + throw new Exception("配盘数量大于表单数量"); + } + + receiptDetail2.setOpenQty(qty); + receiptDetailService.update(receiptDetail2, receiptDetail2QueryWrapper); + + ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail(); + receiptContainerDetail.setReceiptContainerId(receiptContainerHeader.getId()); + receiptContainerDetail.setWarehouseCode(ShiroUtils.getWarehouseCode()); + receiptContainerDetail.setReceiptId(receiptHeader.getId()); + receiptContainerDetail.setReceiptDetailId(receiptDetail2.getId()); + receiptContainerDetail.setReceiptCode(receiptHeader.getCode()); + receiptContainerDetail.setReceiptType(receiptHeader.getReceiptType()); + receiptContainerDetail.setLocationCode(locationCode); + receiptContainerDetail.setContainerCode(containerCode); + receiptContainerDetail.setContainerType(container.getContainerType()); + receiptContainerDetail.setCompanyCode(companyCode); + + LambdaQueryWrapper<Material> materialQueryWrapper = Wrappers.lambdaQuery(); + materialQueryWrapper.eq(Material::getCode, receiptBill.getMaterialCode()) + .eq(Material::getDeleted, 0); + Material material = materialService.getOne(materialQueryWrapper); + + receiptContainerDetail.setMaterialCode(material.getCode()); + receiptContainerDetail.setMaterialName(material.getName()); + receiptContainerDetail.setMaterialSpec(material.getSpec()); + receiptContainerDetail.setMaterialUnit(material.getUnit()); + receiptContainerDetail.setQty(receiptBill.getQty()); + receiptContainerDetail.setStatus(10); + receiptContainerDetail.setCreatedBy(ShiroUtils.getLoginName()); + receiptContainerDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); + receiptContainerDetailService.save(receiptContainerDetail); + } + + } else { + /* ReceiptContainerView record = new ReceiptContainerView(); + record.setReceiptContainerCode(receiptBills.get(0).getReceiptContainerCode()); + record.setLocationCode(receiptBills.get(0).getLocationCode()); + record.setTaskType((short)100); + record.setCompanyCode(receiptBills.get(0).getCompanyCode()); + receiptContainerHeaderService.checkContainer(record); + receiptContainerHeaderService.mobileCheckLocationCode(record); + int receiptHeaderId = receiptHeaderService.createTodayHeader(companyCode); + ReceiptHeader receiptHeader = receiptHeaderService.getById(receiptHeaderId); + List<Integer> receiptDetailIds = receiptDetailService.insertTodayReceiptDetail(receiptHeaderId, receiptBills, true, companyCode); + if(receiptDetailIds != null && receiptDetailIds.size() > 0) { + int containerHeaderId = receiptContainerHeaderService.insertTodayReceiptContainerHeader(receiptBills.get(0), receiptHeader.getCode()); + if(containerHeaderId > 0) { + List<Integer> receiptContainerDetailIds = receiptContainerDetailService.insertTodayReceiptcContainerDetail(containerHeaderId, receiptHeaderId, receiptDetailIds, receiptBills); + if(receiptContainerDetailIds != null && receiptContainerDetailIds.size() > 0) { + + } else { + return AjaxResult.error("入库组盘失败"); + } + } else { + return AjaxResult.error("插入入库容器表单头失败"); + } + } else { + return AjaxResult.error("插入入库明细表单失败"); + } */ + } + return AjaxResult.success("收货成功"); + } + + @PostMapping("/findReceipt") + @ApiOperation("移动端查询入库单") + @Log(title = "移动端查询入库单", action = BusinessType.OTHER) + public AjaxResult findReceipt(@RequestBody @ApiParam(value = "物料号") Map<String, String> param){ + String receiptCode = param.get("receiptCode"); + String companyCode = param.get("companyCode"); + if (StringUtils.isNull(receiptCode)){ + return AjaxResult.error("上游系统关联单号为空"); + } else if (StringUtils.isNull(companyCode)){ + return AjaxResult.error("公司编码为空"); + } +// else if (StringUtils.isNull(referType)) { +// return AjaxResult.error("上游系统关联单类型为空"); +// } + + /* 查询入库单,如果数据库中不存在,则调用ERP接口拉取单据,成功后再次查询返回结果*/ + LambdaQueryWrapper<ReceiptHeader> receiptLambdaQueryWrapper = Wrappers.lambdaQuery(); + receiptLambdaQueryWrapper.eq(ReceiptHeader::getCode, receiptCode) + .eq(ReceiptHeader::getCompanyCode, companyCode); + ReceiptHeader receiptHeader = receiptHeaderService.getOne(receiptLambdaQueryWrapper); + if(receiptHeader == null) { + return AjaxResult.error("没有找到入库单"); + } + ReceiptDomain receipt = new ReceiptDomain(); + receipt.setReceiptHeader(receiptHeader); + + LambdaQueryWrapper<ReceiptDetail> receiptDetailQueryWrapper = Wrappers.lambdaQuery(); + receiptDetailQueryWrapper.eq(ReceiptDetail::getReceiptId, receiptHeader.getId()); + List<ReceiptDetail> receiptDetailList = receiptDetailService.list(receiptDetailQueryWrapper); + receipt.setReceiptDetails(receiptDetailList); + return AjaxResult.success(receipt); + } + + @PostMapping("/callBox") + @ApiOperation("移动端呼叫料盒") + @Log(title = "移动端呼叫料盒", action = BusinessType.OTHER) + @Transactional(rollbackFor = Exception.class) + public AjaxResult callBox(@RequestBody @ApiParam(value = "物料号") Map<String, String> param) { + String containerCode = param.get("containerCode"); + String destinationLocation = param.get("destinationLocation"); + int type = Integer.parseInt(param.get("type")); + String companyCode = param.get("companyCode"); + Container container = new Container(); + container.setCode(containerCode); + container.setWarehouseCode(ShiroUtils.getWarehouseCode()); + LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(container); + container = containerService.getOne(lambdaQueryWrapper); + if(container==null) { + return AjaxResult.error("容器不存在"); + } + if (!StringUtils.isNotEmpty(container.getLocationCode())) { + return AjaxResult.error("容器不在库位[" + container.getLocationCode() + "]上"); + } + if(!container.getLocationCode().equals(destinationLocation)) { + return AjaxResult.error("容器不在目的库位上"); + } + Location temp = new Location(); + temp.setCode(destinationLocation); + temp.setWarehouseCode(ShiroUtils.getWarehouseCode()); + LambdaQueryWrapper lambda = Wrappers.lambdaQuery(temp); + Location loc = locationService.getOne(lambda); + if(StringUtils.isNotEmpty(destinationLocation)) { + //校验目标地址 + if (loc == null) { + return AjaxResult.error("目标库位不存在"); + } + if (!loc.getStatus().equals("empty")) { + return AjaxResult.error("目标库位非空闲"); + } + } + //判断托盘是否已经存在任务 + LambdaQueryWrapper<TaskHeader> headerQueryWrapper = Wrappers.lambdaQuery(); + headerQueryWrapper.ne(TaskHeader::getStatus, 100) + .eq(TaskHeader::getContainerCode, containerCode); + Integer taskCount = taskHeaderService.count(headerQueryWrapper); + if (taskCount != null && taskCount.intValue() > 0) { + return AjaxResult.error("容器已存在任务"); + } + + //创建主任务 + TaskHeader taskHeader = new TaskHeader(); + taskHeader.setWarehouseCode(loc.getWarehouseCode()); + taskHeader.setCompanyCode(companyCode);//货主 + if(type == 200) { + taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_SHELF); + taskHeader.setTaskType(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT); + } else { + taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_PICKING); + taskHeader.setTaskType(QuantityConstant.TASK_TYPE_SORTINGSHIPMENT); + } + taskHeader.setContainerCode(container.getCode()); + taskHeader.setStatus(QuantityConstant.TASK_STATUS_BUILD); + taskHeader.setFromLocation(loc.getCode()); + taskHeader.setToLocation(loc.getCode()); + taskHeader.setCreated(new Date()); + taskHeader.setCreatedBy(ShiroUtils.getLoginName()); + taskHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); + taskHeader.setLastUpdated(new Date()); + if(taskHeaderService.save(taskHeader)){ + //锁定库位状态 + locationService.updateStatus(loc.getContainerCode(),"lock"); + }else{ + throw new ServiceException("补充入库主表生成失败!"); + } + + return AjaxResult.success(taskHeader.getId()); + } +} diff --git a/src/main/java/com/huaheng/mobile/receipt/MobileOneByOneReceiptController.java b/src/main/java/com/huaheng/mobile/receipt/MobileOneByOneReceiptController.java new file mode 100644 index 0000000..83a17b8 --- /dev/null +++ b/src/main/java/com/huaheng/mobile/receipt/MobileOneByOneReceiptController.java @@ -0,0 +1,39 @@ +package com.huaheng.mobile.receipt; + +import com.huaheng.framework.aspectj.lang.annotation.Log; +import com.huaheng.framework.aspectj.lang.constant.BusinessType; +import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerView; +import com.huaheng.pc.receipt.receiptContainerHeader.service.ReceiptContainerHeaderService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.math.BigDecimal; + +/** + * + * @author Enzo Cotter + * @date 2019/12/16 + */ +@CrossOrigin +@RestController +@RequestMapping("/mobile/receipt/oneByOne") +@Api(tags = {"MobileOneByOneReceiptController"}, description = "移动端逐件收货") +public class MobileOneByOneReceiptController { + + @Resource + private ReceiptContainerHeaderService receiptContainerHeaderService; + + @PostMapping("/save") + @ApiOperation("移动端逐件收货保存") + @Log(title = "移动端逐件收货保存", action = BusinessType.OTHER) + public AjaxResult save(@RequestBody @ApiParam(value="容器号") ReceiptContainerView record) throws Exception { + record.setQty(new BigDecimal("1")); + AjaxResult retResult = receiptContainerHeaderService.saveCountain(record.getReceiptCode(), record.getReceiptContainerCode(), + record.getReceiptDetailId(), record.getLocationCode(), record.getQty().intValue(), null); + return retResult; + } +} diff --git a/src/main/java/com/huaheng/mobile/receipt/MobilePutawayController.java b/src/main/java/com/huaheng/mobile/receipt/MobilePutawayController.java new file mode 100644 index 0000000..3ee5b63 --- /dev/null +++ b/src/main/java/com/huaheng/mobile/receipt/MobilePutawayController.java @@ -0,0 +1,100 @@ +package com.huaheng.mobile.receipt; + +import com.alibaba.fastjson.JSONException; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.huaheng.common.utils.security.ShiroUtils; +import com.huaheng.framework.aspectj.lang.annotation.Log; +import com.huaheng.framework.aspectj.lang.constant.BusinessType; +import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.pc.config.location.domain.Location; +import com.huaheng.pc.config.location.service.LocationService; +import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.Map; + +/** + * + * @author Enzo Cotter + * @date 2019/12/16 + */ +@RestController +@RequestMapping("/mobile/putaway/execute") +@Api(tags = {"MobilePutawayController"}, description = "手机收货上架") +public class MobilePutawayController { + + @Resource + private TaskHeaderService taskService; + @Resource + private LocationService locationService; + +// @PostMapping("/createReceiptTask") +// @ApiOperation("手机扫描容器收货上架") +// @Log(title = "手机扫描容器收货上架", action = BusinessType.OTHER) +// public AjaxResult createReceiptTask(@RequestBody @ApiParam(value="容器号") Map<String, String> param) throws Exception { +// if (param.get("containerCode") == null || param.get("containerCode").trim().length() < 1) { +// throw new JSONException("容器号(containerCode)不能为空"); +// } +// return AjaxResult retResult = taskService.mobileCreateReceiptTask(param.get("containerCode"), "L10-27-01"); +// } + + @PostMapping("/getLocationFromContainer") + @ApiOperation("手机扫描容器获得库位号") + @Log(title = "手机扫描容器获得库位号", action = BusinessType.OTHER) + public AjaxResult getLocationFromContainer(@RequestBody @ApiParam(value="容器号") Map<String, String> param) throws Exception { + if (param.get("containerCode") == null || param.get("containerCode").trim().length() < 1) { + throw new JSONException("容器号(containerCode)不能为空"); + } + LambdaQueryWrapper<Location> queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(Location::getDeleted, false) + .eq(Location::getContainerCode, param.get("containerCode")); + Location location = locationService.getOne(queryWrapper); + if(location == null) { + AjaxResult.error("没有该库位"); + } + return AjaxResult.success("获取成功",location.getCode()); + } + + @PostMapping("/createQuickTask") + @ApiOperation("手机扫描容器收货上架") + @Log(title = "手机扫描容器收货上架", action = BusinessType.OTHER) + public AjaxResult createQuickTask(@RequestBody @ApiParam(value="容器号") Map<String, String> param) throws Exception { + if (param.get("containerCode") == null || param.get("containerCode").trim().length() < 1) { + throw new JSONException("容器号(containerCode)不能为空"); + } + + AjaxResult retResult = taskService.createQuickTask(param.get("containerCode")); + return retResult; + } + + @PostMapping("/scanLocationCode") + @ApiOperation("手机扫描库位收货上架") + @Log(title = "手机扫描库位收货上架", action = BusinessType.OTHER) + public AjaxResult scanLocationCode(@RequestBody @ApiParam(value="库位编码") Map<String, String> param) throws Exception { + if (param.get("locationCode") == null || param.get("locationCode").trim().length() < 1) { + throw new JSONException("库位号(locationCode)不能为空"); + } + AjaxResult retResult = taskService.completeTask(param.get("locationCode")); + return retResult; + } + + @PostMapping("/createReplenishTask") + @ApiOperation("手机扫描容器创建补充入库任务") + @Log(title = "手机扫描容器创建补充入库任务", action = BusinessType.OTHER) + public AjaxResult createReplenishTask(@RequestBody @ApiParam(value="容器号") Map<String, String> param) throws Exception { + if (param.get("containerCode") == null || param.get("containerCode").trim().length() < 1) { + throw new JSONException("容器号(containerCode)不能为空"); + } + AjaxResult retResult = taskService.createReplenishTask(param.get("containerCode"), (short)1); + return retResult; + } +} diff --git a/src/main/java/com/huaheng/mobile/receipt/ReceiptBill.java b/src/main/java/com/huaheng/mobile/receipt/ReceiptBill.java new file mode 100644 index 0000000..f12d0b7 --- /dev/null +++ b/src/main/java/com/huaheng/mobile/receipt/ReceiptBill.java @@ -0,0 +1,34 @@ +package com.huaheng.mobile.receipt; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * + * @author Enzo Cotter + * @date 2019/12/15 + */ +@Data +public class ReceiptBill { + /** 容器编码 */ + String receiptContainerCode; + /** 物料code */ + String materialCode; + /** 收货数量 */ + BigDecimal qty; + /** 库位编码 */ + String locationCode; + /** 批次号 */ + String batch; + /** 项目号 */ + String project; + + String receiptDetailId; + + /** 货主Code */ + String companyCode; + /** 重量 */ + String weight; + String materialName; +} diff --git a/src/main/java/com/huaheng/mobile/receipt/ReceiptResult.java b/src/main/java/com/huaheng/mobile/receipt/ReceiptResult.java new file mode 100644 index 0000000..5a0dcb4 --- /dev/null +++ b/src/main/java/com/huaheng/mobile/receipt/ReceiptResult.java @@ -0,0 +1,16 @@ +package com.huaheng.mobile.receipt; + +import lombok.Data; + +/** + * + * @author Enzo Cotter + * @date 2019/12/15 + */ +@Data +public class ReceiptResult { + + private int receiptId; + + private String receiptCode; +} diff --git a/src/main/java/com/huaheng/mobile/shipment/Materialforecast.java b/src/main/java/com/huaheng/mobile/shipment/Materialforecast.java new file mode 100644 index 0000000..c35ab42 --- /dev/null +++ b/src/main/java/com/huaheng/mobile/shipment/Materialforecast.java @@ -0,0 +1,56 @@ +package com.huaheng.mobile.shipment; + +/** + * + * @author Enzo Cotter + * @date 2019/12/16 + */ +public class Materialforecast { + + private String materialCode; + private String materialName; + private String specification; + private int type; + + public String getMaterialCode() { + return materialCode; + } + + public void setMaterialCode(String materialCode) { + this.materialCode = materialCode; + } + + public String getMaterialName() { + return materialName; + } + + public void setMaterialName(String materialName) { + this.materialName = materialName; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getSpecification() { + return specification; + } + + public void setSpecification(String specification) { + this.specification = specification; + } + + @Override + public String toString() { + return "Materialforecast{" + + "materialCode='" + materialCode + '\'' + + ", materialName='" + materialName + '\'' + + ", specification='" + specification + '\'' + + ", type=" + type + + '}'; + } +} diff --git a/src/main/java/com/huaheng/mobile/shipment/MobileShipmentController.java b/src/main/java/com/huaheng/mobile/shipment/MobileShipmentController.java new file mode 100644 index 0000000..3096b15 --- /dev/null +++ b/src/main/java/com/huaheng/mobile/shipment/MobileShipmentController.java @@ -0,0 +1,124 @@ +package com.huaheng.mobile.shipment; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.huaheng.common.utils.StringUtils; +import com.huaheng.common.utils.security.ShiroUtils; +import com.huaheng.framework.aspectj.lang.annotation.Log; +import com.huaheng.framework.aspectj.lang.constant.BusinessType; +import com.huaheng.framework.web.controller.BaseController; +import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.mobile.invenory.TaskIds; +import com.huaheng.pc.config.company.domain.Company; +import com.huaheng.pc.config.company.service.CompanyService; +import com.huaheng.pc.shipment.shipmentContainerHeader.service.ShipmentContainerHeaderService; +import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail; +import com.huaheng.pc.shipment.shipmentDetail.service.ShipmentDetailService; +import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader; +import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService; +import com.huaheng.pc.task.taskHeader.domain.ShipmentTaskCreateModel; +import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @author mahua + * @ClassName MobileShipmentController + * @projectName wms_xinyi + * @description: TODO + * @date 2020/2/1115:29 + */ +@RestController +@RequestMapping("/mobile/shipment") +public class MobileShipmentController extends BaseController { + @Resource + private ShipmentHeaderService shipmentHeaderService; + @Resource + private ShipmentDetailService shipmentDetailService; + @Resource + private ShipmentContainerHeaderService shipmentContainerHeaderService; + @Resource + private CompanyService companyService; + @Autowired + private TaskHeaderService taskHeaderService; + + /** + * 查询出库单主列表 + */ + @Log(title = "出库-出库单", operating="查看出库主单", action = BusinessType.GRANT) + @PostMapping("/list") + public AjaxResult list(@RequestBody @ApiParam(value = "出库单号-referCode、货主编码-companyCode、出库单类型-shipmentType") Map<String, String> param) { + if (StringUtils.isEmpty(param.get("companyCode"))) { + return AjaxResult.error("上游系统单号为空"); + } else if (StringUtils.isEmpty(param.get("shipmentType"))) { + return AjaxResult.error("类型为空"); + } else if (StringUtils.isEmpty(param.get("referCode"))) { + return AjaxResult.error("上游系统单号为空"); + } + LambdaQueryWrapper<ShipmentHeader> lambdaQueryWrapper = Wrappers.lambdaQuery(); + lambdaQueryWrapper.eq(ShipmentHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(ShipmentHeader::getDeleted,false) + .in(ShipmentHeader::getCompanyCode, param.get("companyCode")) + .eq(ShipmentHeader::getShipmentType,param.get("shipmentType")) + .eq(ShipmentHeader::getReferCode, param.get("referCode")) + .orderByDesc(ShipmentHeader::getId); + ShipmentHeader shipmentHeader = shipmentHeaderService.getOne(lambdaQueryWrapper); + + if (shipmentHeader == null) { +// LambdaQueryWrapper<Company> lambdaQueryWrapper1 = Wrappers.lambdaQuery(); +// lambdaQueryWrapper1.eq(Company::getCode, param.get("companyCode")); +// Company company = companyService.getOne(lambdaQueryWrapper1); +// shipmentHeaderService.findErpShipment(String.valueOf(company.getId()), param.get("shipmentType"), param.get("referCode")); +// shipmentHeader = shipmentHeaderService.getOne(lambdaQueryWrapper); + return AjaxResult.error("没有找到出库单"); + } + LambdaQueryWrapper<ShipmentDetail> detailLambdaQueryWrapper = Wrappers.lambdaQuery(); + detailLambdaQueryWrapper.eq(ShipmentDetail::getShipmentId, shipmentHeader.getId()); + Shipment shipment = new Shipment(); + shipment.setShipmentHeader(shipmentHeader); + List<ShipmentDetail> shipmentDetailList = shipmentDetailService.list(detailLambdaQueryWrapper); + shipment.setShipmentDetailList(shipmentDetailList); + return AjaxResult.success(shipment); + } + + /** + * 自动组盘 + */ + @PostMapping("/autoCombination") + @ResponseBody + public AjaxResult autoCombination(@RequestBody Map<String, String> param){ + String shipmentCode = param.get("shipmentCode"); + AjaxResult ajaxResult = shipmentContainerHeaderService.autoCombination(shipmentCode); + return ajaxResult; + } + + /** + * 根据出库单号生成出库任务 + */ + @PostMapping("/createShipmentTask") + @ResponseBody + @Transactional(rollbackFor = Exception.class) + public AjaxResult createShipmentTask(@RequestBody List<TaskIds> taskDetails){ + ShipmentTaskCreateModel shipmentTask = new ShipmentTaskCreateModel(); + List<Integer> taskIds = new ArrayList<>(); + for (TaskIds task : taskDetails) { + shipmentTask.setShipmentContainerHeaderIds(task.getTaskId()); + AjaxResult ajaxResult = taskHeaderService.createTaskFromShipmentContainers(shipmentTask); + if(ajaxResult.hasErr()){ + return ajaxResult; + } + Integer taskId = (Integer)ajaxResult.getData(); + taskIds.add(taskId); + } + return AjaxResult.success(taskIds); + } + + +} diff --git a/src/main/java/com/huaheng/mobile/shipment/MobileTaskForASRSController.java b/src/main/java/com/huaheng/mobile/shipment/MobileTaskForASRSController.java new file mode 100644 index 0000000..980e5c3 --- /dev/null +++ b/src/main/java/com/huaheng/mobile/shipment/MobileTaskForASRSController.java @@ -0,0 +1,48 @@ +package com.huaheng.mobile.shipment; + +import com.alibaba.fastjson.JSONException; +import com.huaheng.framework.aspectj.lang.annotation.Log; +import com.huaheng.framework.aspectj.lang.constant.BusinessType; +import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.pc.config.material.service.MaterialService; +import com.huaheng.pc.task.taskDetail.service.TaskDetailService; +import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * + * @author Enzo Cotter + * @date 2019/12/16 + */ +@CrossOrigin +@RestController +@RequestMapping("/mobile/task/taskForASRS") +@Api(tags = {"MobileTaskForASRSController"}, description = "手机立体库任务拣货相关") +public class MobileTaskForASRSController { + + + @Resource + private TaskHeaderService taskHeaderService; + @Resource + private TaskDetailService taskDetailService; + @Resource + private MaterialService materialService; + + @PostMapping("/getMaterialForecast") + @ApiOperation("获得物料联想词") + @Log(title = "获得物料联想词", action = BusinessType.OTHER) + public AjaxResult getMaterialForecast(@RequestBody @ApiParam(value="物料号") Map<String, String> param) { + if (param.get("code") == null || param.get("code").trim().length() < 1) { + throw new JSONException("容器号(code)不能为空"); + } + List<Materialforecast> forecasts = materialService.getMaterialForecast(param.get("code")); + return AjaxResult.success(""); + } +} \ No newline at end of file diff --git a/src/main/java/com/huaheng/mobile/shipment/Shipment.java b/src/main/java/com/huaheng/mobile/shipment/Shipment.java new file mode 100644 index 0000000..d06c4cd --- /dev/null +++ b/src/main/java/com/huaheng/mobile/shipment/Shipment.java @@ -0,0 +1,24 @@ +package com.huaheng.mobile.shipment; + +import com.huaheng.pc.shipment.shipmentDetail.domain.ShipmentDetail; +import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @author mahua + * @ClassName Shipment + * @projectName wms_xinyi + * @description: TODO + * @date 2020/2/1115:46 + */ +@Data +public class Shipment implements Serializable { + + private ShipmentHeader shipmentHeader; + + private List<ShipmentDetail> shipmentDetailList; + +} diff --git a/src/main/java/com/huaheng/mobile/shipment/ShipmentBill.java b/src/main/java/com/huaheng/mobile/shipment/ShipmentBill.java new file mode 100644 index 0000000..6036f45 --- /dev/null +++ b/src/main/java/com/huaheng/mobile/shipment/ShipmentBill.java @@ -0,0 +1,84 @@ +package com.huaheng.mobile.shipment; + +import java.math.BigDecimal; + +/** + * 出库单据 + * @author Enzo Cotter + * @date 2019/12/16 + */ +public class ShipmentBill { + + /** 物料code */ + private String materialCode; + /** 出库数量 */ + private BigDecimal qty; + /** 货主id */ + private String companyId; + /** 货主code */ + private String companyCode; + /** 货架*/ + private String location; + /**接收点-工位*/ + private int point; + + public String getMaterialCode() { + return materialCode; + } + + public void setMaterialCode(String materialCode) { + this.materialCode = materialCode; + } + + public BigDecimal getQty() { + return qty; + } + + public void setQty(BigDecimal qty) { + this.qty = qty; + } + + public String getCompanyId() { + return companyId; + } + + public void setCompanyId(String companyId) { + this.companyId = companyId; + } + + public String getCompanyCode() { + return companyCode; + } + + public void setCompanyCode(String companyCode) { + this.companyCode = companyCode; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public int getPoint() { + return point; + } + + public void setPoint(int point) { + this.point = point; + } + + @Override + public String toString() { + return "ShipmentBill{" + + "materialCode='" + materialCode + '\'' + + ", qty=" + qty + + ", companyId='" + companyId + '\'' + + ", companyCode='" + companyCode + '\'' + + ", location='" + location + '\'' + + ", point=" + point + + '}'; + } +} diff --git a/src/main/java/com/huaheng/mobile/shipment/ShipmentTaskModel.java b/src/main/java/com/huaheng/mobile/shipment/ShipmentTaskModel.java new file mode 100644 index 0000000..d217e3b --- /dev/null +++ b/src/main/java/com/huaheng/mobile/shipment/ShipmentTaskModel.java @@ -0,0 +1,47 @@ +package com.huaheng.mobile.shipment; + +/** + * + * @author Enzo Cotter + * @date 2019/12/16 + */ +public class ShipmentTaskModel { + + /** + * 需要创建任务的出库货箱列表 + */ + private int[] shipmentContainerHeaderIds; + /** + * 是否优先创建整出任务,1,表示可以创建整出就优先创建整出,不能的话就创建拣选出;2,表示只创建拣选出; + */ + private int taskType; + + /** + * 优先级 + */ + private short priority; + + public short getPriority() { + return priority; + } + + public void setPriority(short priority) { + this.priority = priority; + } + + public int[] getShipmentContainerHeaderIds() { + return shipmentContainerHeaderIds; + } + + public void setShipmentContainerHeaderIds(int[] shipmentContainerHeaderIds) { + this.shipmentContainerHeaderIds = shipmentContainerHeaderIds; + } + + public int getTaskType() { + return taskType; + } + + public void setTaskType(int taskType) { + this.taskType = taskType; + } +} diff --git a/src/main/java/com/huaheng/pc/common/mapper/ApkMapper.java b/src/main/java/com/huaheng/pc/common/mapper/ApkMapper.java new file mode 100644 index 0000000..89ba51e --- /dev/null +++ b/src/main/java/com/huaheng/pc/common/mapper/ApkMapper.java @@ -0,0 +1,23 @@ +package com.huaheng.pc.common.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.huaheng.mobile.download.ApkInfo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface ApkMapper extends BaseMapper<ApkInfo> { + + + // @Select("select * from apkinfo where pkgName=#{pkgName}") + List<ApkInfo> getApkInfoByPkgName(String pkgName); + + // @Options(useGeneratedKeys = true, keyProperty = "id") + // @Insert("insert into apkinfo(pkgName, versionCode, versionName, url, md5) values(#{pkgName},#{versionCode},#{versionName},#{url},#{md5})") + int insertApkInfo(@Param("pkgName") String pkgName, @Param("versionCode") int versionCode, @Param("versionName") String versionName, @Param("url") String url, @Param("md5") String md5); + + // @Options(useGeneratedKeys = true, keyProperty = "id") + // @Insert("delete from apkinfo") + void clearApkInfo(); + +} diff --git a/src/main/java/com/huaheng/pc/config/location/mapper/LocationMapper.java b/src/main/java/com/huaheng/pc/config/location/mapper/LocationMapper.java index efae305..1247a9f 100644 --- a/src/main/java/com/huaheng/pc/config/location/mapper/LocationMapper.java +++ b/src/main/java/com/huaheng/pc/config/location/mapper/LocationMapper.java @@ -24,4 +24,6 @@ public interface LocationMapper extends BaseMapper<Location> { //库位利用率 List<LinkedHashMap<String, Object>> getLocationProp(); + List<Location> pickLocation(); + } \ No newline at end of file diff --git a/src/main/java/com/huaheng/pc/config/location/service/LocationService.java b/src/main/java/com/huaheng/pc/config/location/service/LocationService.java index 8d1f352..11212e5 100644 --- a/src/main/java/com/huaheng/pc/config/location/service/LocationService.java +++ b/src/main/java/com/huaheng/pc/config/location/service/LocationService.java @@ -24,4 +24,19 @@ public interface LocationService extends IService<Location>{ //库位利用率 List<LinkedHashMap<String, Object>> getLocationProp(); + + /** + * 查询空闲可用的库位用来补充入库 + * @return location + */ + List<Location> pickLocation(); + + /** + * 验证库位合法性 + * @param code + * @return + */ + boolean checkLocation(String code); + + boolean getFreeLocation(String materialCode, String batch); } diff --git a/src/main/java/com/huaheng/pc/config/location/service/LocationServiceImpl.java b/src/main/java/com/huaheng/pc/config/location/service/LocationServiceImpl.java index 3278ce9..814a2bc 100644 --- a/src/main/java/com/huaheng/pc/config/location/service/LocationServiceImpl.java +++ b/src/main/java/com/huaheng/pc/config/location/service/LocationServiceImpl.java @@ -205,4 +205,51 @@ public class LocationServiceImpl extends ServiceImpl<LocationMapper, Location> i return locationMapper.getLocationProp(); } + @Override + public List<Location> pickLocation() { + return locationMapper.pickLocation(); + } + + /** + * 验证库位合法性 + * + * @param code + * @return + */ + @Override + public boolean checkLocation(String code) { + LambdaQueryWrapper<Location> queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(Location::getDeleted,false) + .eq(Location::getCode, code); + List<Location> locations = list(queryWrapper); + if (locations.size() >= 1){ + Location location = locations.get(0); + String containerCode =location.getContainerCode(); + if (containerCode != null && containerCode.length() > 0) { + throw new ServiceException("货架上已有容器"); + } + String status = location.getStatus(); + if(!"empty".equals(status)) { + throw new ServiceException("库位状态不为空"); + } + return true; + } else { + return false; + } + } + + @Override + public boolean getFreeLocation(String materialCode, String batch) { + LambdaQueryWrapper<Location> lambdaQueryWrapper = Wrappers.lambdaQuery(); + lambdaQueryWrapper.eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(Location::getContainerCode, "") + .eq(Location::getDeleted, false) + .eq(Location::getStatus, "empty"); + List<Location> locations = locationService.list(lambdaQueryWrapper); + if(locations != null && locations.size() > 0) { + return true; + } + return false; + } } diff --git a/src/main/java/com/huaheng/pc/config/material/mapper/MaterialMapper.java b/src/main/java/com/huaheng/pc/config/material/mapper/MaterialMapper.java index 8694d5a..fa324ac 100644 --- a/src/main/java/com/huaheng/pc/config/material/mapper/MaterialMapper.java +++ b/src/main/java/com/huaheng/pc/config/material/mapper/MaterialMapper.java @@ -3,6 +3,8 @@ package com.huaheng.pc.config.material.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.huaheng.pc.config.material.domain.Material; +import java.util.List; + public interface MaterialMapper extends BaseMapper<Material> { /** @@ -11,4 +13,10 @@ public interface MaterialMapper extends BaseMapper<Material> { * @return Material */ Material findAllByCode(String code); + + /** + * 根据编码查询物料 + * @return Material + */ + List<Material> findLatest(); } \ No newline at end of file diff --git a/src/main/java/com/huaheng/pc/config/material/service/MaterialService.java b/src/main/java/com/huaheng/pc/config/material/service/MaterialService.java index d7c8b99..17b18ce 100644 --- a/src/main/java/com/huaheng/pc/config/material/service/MaterialService.java +++ b/src/main/java/com/huaheng/pc/config/material/service/MaterialService.java @@ -1,6 +1,7 @@ package com.huaheng.pc.config.material.service; import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.mobile.shipment.Materialforecast; import com.huaheng.pc.config.material.domain.Material; import com.baomidou.mybatisplus.extension.service.IService; @@ -32,4 +33,13 @@ public interface MaterialService extends IService<Material>{ AjaxResult addSave(Material material); Material findAllByCode(String code); + + List<Material> findLatest(); + + /** + * 获得物料联想词 + * @param code + * @return + */ + List<Materialforecast> getMaterialForecast(String code); } diff --git a/src/main/java/com/huaheng/pc/config/material/service/MaterialServiceImpl.java b/src/main/java/com/huaheng/pc/config/material/service/MaterialServiceImpl.java index 3cbcebe..396f5e5 100644 --- a/src/main/java/com/huaheng/pc/config/material/service/MaterialServiceImpl.java +++ b/src/main/java/com/huaheng/pc/config/material/service/MaterialServiceImpl.java @@ -7,16 +7,20 @@ import com.huaheng.common.support.Convert; import com.huaheng.common.utils.StringUtils; import com.huaheng.common.utils.security.ShiroUtils; import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.mobile.shipment.Materialforecast; import com.huaheng.pc.config.materialMultiple.domain.MaterialMultiple; import com.huaheng.pc.config.materialType.domain.MaterialType; import com.huaheng.pc.config.materialType.service.MaterialTypeService; import com.huaheng.pc.config.materialUnit.domain.MaterialUnit; import com.huaheng.pc.config.materialUnit.service.MaterialUnitService; +import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; +import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService; import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.lang.ref.WeakReference; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -35,6 +39,8 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> i private MaterialTypeService materialTypeService; @Resource private MaterialMapper materialMapper; + @Resource + private InventoryDetailService inventoryDetailService; @Override public AjaxResult removeByIds(String ids) { @@ -171,4 +177,49 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> i return String.format(materialType.getAutoGenSerialNumFormat(), materialType.getTrackSerialNum()); } + + @Override + public List<Material> findLatest() { + return materialMapper.findLatest(); + } + + /** + * 获得物料联想词 + * + * @param code + * @return + */ + @Override + public List<Materialforecast> getMaterialForecast(String code) { + List<Materialforecast> forecast = new ArrayList<>(); + LambdaQueryWrapper<InventoryDetail> detailLambdaQueryWrapper = Wrappers.lambdaQuery(); + detailLambdaQueryWrapper.eq(InventoryDetail::getMaterialCode, code) + .eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .in(InventoryDetail::getCompanyCode,ShiroUtils.getCompanyCodeList()); + List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(detailLambdaQueryWrapper); + if (!inventoryDetailList.isEmpty()) { + for (InventoryDetail inventoryDetail : inventoryDetailList) { + Materialforecast materialforecast = new Materialforecast(); + materialforecast.setMaterialCode(inventoryDetail.getMaterialCode()); + materialforecast.setType(0); + forecast.add(materialforecast); + } + } else { + detailLambdaQueryWrapper = Wrappers.lambdaQuery(); + detailLambdaQueryWrapper.like(InventoryDetail::getMaterialName, code) + .eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .in(InventoryDetail::getCompanyCode,ShiroUtils.getCompanyCodeList()); + List<InventoryDetail> inventoryDetailList1 = inventoryDetailService.list(detailLambdaQueryWrapper); + if (!inventoryDetailList1.isEmpty()) { + for (InventoryDetail inventoryDetail : inventoryDetailList) { + Materialforecast materialforecast = new Materialforecast(); + materialforecast.setMaterialCode(inventoryDetail.getMaterialCode()); + materialforecast.setType(0); + forecast.add(materialforecast); + } + } + } + return null; + } + } diff --git a/src/main/java/com/huaheng/pc/config/points/domain/Points.java b/src/main/java/com/huaheng/pc/config/points/domain/Points.java index bd4e63e..73d01ac 100644 --- a/src/main/java/com/huaheng/pc/config/points/domain/Points.java +++ b/src/main/java/com/huaheng/pc/config/points/domain/Points.java @@ -5,8 +5,9 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.huaheng.framework.web.domain.BaseEntity; + import io.swagger.annotations.ApiModel; -import lombok.Data; + /** * @author ricard @@ -15,7 +16,6 @@ import lombok.Data; */ @ApiModel(value="com.huaheng.pc.config.points.domain.Points") -@Data @TableName(value = "points") public class Points extends BaseEntity { //id diff --git a/src/main/java/com/huaheng/pc/inventory/cycleCountHeader/controller/CycleCountHeaderController.java b/src/main/java/com/huaheng/pc/inventory/cycleCountHeader/controller/CycleCountHeaderController.java index 31e746f..2d0589d 100644 --- a/src/main/java/com/huaheng/pc/inventory/cycleCountHeader/controller/CycleCountHeaderController.java +++ b/src/main/java/com/huaheng/pc/inventory/cycleCountHeader/controller/CycleCountHeaderController.java @@ -115,7 +115,7 @@ public class CycleCountHeaderController extends BaseController { { cycleCountHeader.setWarehouseCode(ShiroUtils.getWarehouseCode()); - //cycleCountHeader.setCompanyCode(cycleCountHeader.getCompanyCode()); + cycleCountHeader.setCompanyCode(cycleCountHeader.getCompanyCode()); //cycleCountHeader.setRound(cycleCountHeader.getRound());//盘点轮次 cycleCountHeader.setCreated(new Date()); cycleCountHeader.setCreatedBy(ShiroUtils.getLoginName()); diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderService.java b/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderService.java index 4bf16a6..a02ad09 100644 --- a/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderService.java +++ b/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderService.java @@ -28,6 +28,21 @@ public interface InventoryHeaderService extends IService<InventoryHeader> { AjaxResult createEmptyCheckOut(String containerCode, String location); + /** + * 移动端获取库存详情 + * @param code 物料编码 + * @param companyCode 货主编码 + * @return + */ + AjaxResult getInventory(String code, String companyCode); + + /** + * 移动端获得库位联想词 + * @param code + * @param type + * @return + */ + AjaxResult getLocationForecast(String code, int type); } diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderServiceImpl.java index 671dd47..1c1a0ee 100644 --- a/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderServiceImpl.java +++ b/src/main/java/com/huaheng/pc/inventory/inventoryHeader/service/InventoryHeaderServiceImpl.java @@ -7,11 +7,16 @@ import com.huaheng.common.exception.service.ServiceException; import com.huaheng.common.utils.StringUtils; import com.huaheng.common.utils.security.ShiroUtils; import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.mobile.invenory.MobileInventory; import com.huaheng.pc.config.container.domain.Container; import com.huaheng.pc.config.container.service.ContainerService; import com.huaheng.pc.config.location.domain.Location; import com.huaheng.pc.config.location.service.LocationService; +import com.huaheng.pc.config.material.domain.Material; +import com.huaheng.pc.config.material.service.MaterialService; import com.huaheng.pc.config.warehouse.domain.Warehouse; +import com.huaheng.pc.inventory.inventoryDetail.domain.InventoryDetail; +import com.huaheng.pc.inventory.inventoryDetail.service.InventoryDetailService; import com.huaheng.pc.inventory.inventoryHeader.domain.InventoryHeader; import com.huaheng.pc.task.taskDetail.domain.TaskDetail; import com.huaheng.pc.task.taskDetail.service.TaskDetailService; @@ -25,7 +30,9 @@ import com.huaheng.pc.inventory.inventoryHeader.mapper.InventoryHeaderMapper; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.Date; +import java.util.List; @Service public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMapper, InventoryHeader> implements InventoryHeaderService { @@ -41,8 +48,10 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe private ContainerService containerService; @Resource private LocationService locationService; - - + @Resource + private MaterialService materialService; + @Resource + private InventoryDetailService inventoryDetailService; /** * 移库 @@ -311,7 +320,210 @@ public class InventoryHeaderServiceImpl extends ServiceImpl<InventoryHeaderMappe } + /** + * 移动端获取库存详情 + * + * @param code 物料编码 + * @param companyCode 货主编码 + * @return + */ + @Override + public AjaxResult getInventory(String code, String companyCode) { + if (StringUtils.isEmpty(code)) { + return AjaxResult.error("编码为空"); + } + if (StringUtils.isEmpty(companyCode)) { + return AjaxResult.error("公司编码为空"); + } + List<InventoryDetail> inventories = null; + List<MobileInventory> mobileInventories = new ArrayList<>(); + int resultType = 0; + inventories = selectListEntityByMaterialCode(code); + if(inventories == null || inventories.size() == 0) { + inventories = selectListEntityByMaterialName(code); + } + if(inventories == null || inventories.size() == 0) { + inventories = selectListEntityByLocationCode(code); + resultType = 1; + } + if(inventories == null || inventories.size() == 0) { + Location location = new Location(); + location.setContainerCode(code); + location.setWarehouseCode(ShiroUtils.getWarehouseCode()); + location.setDeleted(false); + LambdaQueryWrapper lamdba6 = Wrappers.lambdaQuery(location); + Location location1 = locationService.getOne(lamdba6); + if(location1 != null) { + inventories = selectListEntityByLocationCode(location1.getCode()); + resultType = 1; + } + } + if(inventories != null && inventories.size() > 0) { + for(InventoryDetail inventory : inventories) { + MobileInventory mobileInventory = new MobileInventory(); + mobileInventory.setId(inventory.getId()); + mobileInventory.setLocationCode(inventory.getLocationCode()); + mobileInventory.setMaterialCode(inventory.getMaterialCode()); + mobileInventory.setContainerCode(inventory.getContainerCode()); + Material materialCondition = new Material(); + materialCondition.setWarehouseCode(ShiroUtils.getWarehouseCode()); + materialCondition.setDeleted(false); + materialCondition.setCode(inventory.getMaterialCode()); +// materialCondition.setCompanyCode(companyCode); + LambdaQueryWrapper lamdba6 = Wrappers.lambdaQuery(materialCondition); + Material material = materialService.getOne(lamdba6); + if(material == null) { + return AjaxResult.error("没有相对应库存"); + } + mobileInventory.setMaterialName(material.getName()); + mobileInventory.setQty(inventory.getQty()); + mobileInventory.setResultType(resultType); + mobileInventory.setTaskQty(inventory.getTaskQty()); + mobileInventory.setSpecification(material.getSpec()); + mobileInventories.add(mobileInventory); + } + return AjaxResult.success(mobileInventories); + } + Location location = new Location(); + location.setCode(code); + location.setWarehouseCode(ShiroUtils.getWarehouseCode()); + location.setStatus("empty"); + location.setDeleted(false); + LambdaQueryWrapper lamdba62 = Wrappers.lambdaQuery(location); + Location location1 = locationService.getOne(lamdba62); + if(location1 != null) { + resultType = 2; + MobileInventory mobileInventory = new MobileInventory(); + mobileInventory.setResultType(resultType); + mobileInventory.setContainerCode(location1.getContainerCode()); + mobileInventory.setLocationCode(location1.getCode()); + mobileInventory.setContainerCode(location1.getContainerCode()); + mobileInventories.add(mobileInventory); + return AjaxResult.success(mobileInventories); + } + if(inventories == null || inventories.size() == 0) { + Location condition = new Location(); + condition.setContainerCode(code); + condition.setWarehouseCode(ShiroUtils.getWarehouseCode()); + condition.setDeleted(false); + LambdaQueryWrapper lamdba63 = Wrappers.lambdaQuery(condition); + Location location2 = locationService.getOne(lamdba63); + if(location2 == null) { + condition.setCode(code); + condition.setWarehouseCode(ShiroUtils.getWarehouseCode()); + condition.setDeleted(false); + } + if(location2 != null) { + Container container = new Container(); + container.setCode(location2.getContainerCode()); + container.setStatus("empty"); + LambdaQueryWrapper lamdba6 = Wrappers.lambdaQuery(container); + container = containerService.getOne(lamdba6); + if(container != null) { + resultType = 2; + MobileInventory mobileInventory = new MobileInventory(); + mobileInventory.setResultType(resultType); + mobileInventory.setContainerCode(location2.getContainerCode()); + mobileInventory.setLocationCode(location2.getCode()); + mobileInventory.setContainerCode(location2.getContainerCode()); + mobileInventories.add(mobileInventory); + return AjaxResult.success(mobileInventories); + } + } + } + return AjaxResult.error("没有相对应库存"); + } + + public List<InventoryDetail> selectListEntityByMaterialName(String materialName) { + Material material = new Material(); + material.setWarehouseCode(ShiroUtils.getWarehouseCode()); + material.setEnable(true); + material.setDeleted(false); + if(materialName.contains(" ")) { + String materialinfos[] = materialName.split(" "); + materialName = materialinfos[0]; + material.setSpec(materialinfos[1]); + } + material.setName(materialName); + LambdaQueryWrapper lamdba62 = Wrappers.lambdaQuery(material); + Material result= materialService.getOne(lamdba62); + if(result == null) { + return null; + } + InventoryDetail condition = new InventoryDetail(); + condition.setMaterialCode(result.getCode()); + condition.setWarehouseCode(ShiroUtils.getWarehouseCode()); + LambdaQueryWrapper lamdba6 = Wrappers.lambdaQuery(condition); + List<InventoryDetail> inventories = inventoryDetailService.list(lamdba6); + return inventories; + } + + public List<InventoryDetail> selectListEntityByMaterialCode(String materialCode) { + InventoryDetail condition = new InventoryDetail(); + condition.setMaterialCode(materialCode); + condition.setWarehouseCode(ShiroUtils.getWarehouseCode()); + LambdaQueryWrapper lamdba6 = Wrappers.lambdaQuery(condition); + List<InventoryDetail> inventories = inventoryDetailService.list(lamdba6); + return inventories; + } + public List<InventoryDetail> selectListEntityByLocationCode(String locationCode) { + InventoryDetail condition = new InventoryDetail(); + condition.setLocationCode(locationCode); + condition.setWarehouseCode(ShiroUtils.getWarehouseCode()); + LambdaQueryWrapper lamdba6 = Wrappers.lambdaQuery(condition); + List<InventoryDetail> inventories = inventoryDetailService.list(lamdba6); + return inventories; + } + + /** + * 移动端获得库位联想词 + * + * @param code + * @param type + * @return + */ + @Override + public AjaxResult getLocationForecast(String code, int type) { + List<InventoryDetail> inventoryDetailList = new ArrayList<>(); + if (type == 0){ + LambdaQueryWrapper<InventoryDetail> detailLambdaQueryWrapper = Wrappers.lambdaQuery(); + detailLambdaQueryWrapper.eq(InventoryDetail::getLocationCode, code) + .eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()); + inventoryDetailList = inventoryDetailService.list(detailLambdaQueryWrapper); + if (inventoryDetailList.isEmpty()){ + List<String> results = new ArrayList<>(); + for (InventoryDetail inventoryDetail : inventoryDetailList) { + String locationCode = inventoryDetail.getLocationCode(); + LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); + locationLambdaQueryWrapper.eq(Location::getStatus, "empaty") + .eq(Location::getDeleted, false) + .eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(Location::getCode, locationCode); + Location location = locationService.getOne(locationLambdaQueryWrapper); + if (location == null){ + results.add(inventoryDetail.getLocationCode()); + } + } + return AjaxResult.success(results); + } + } else if (type == 1) { + LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); + locationLambdaQueryWrapper.eq(Location::getCode, code) + .eq(Location::getWarehouseCode, ShiroUtils.getWarehouseCode()) + .eq(Location::getDeleted, false) + .eq(Location::getStatus, "empaty"); + List<Location> locations = locationService.list(locationLambdaQueryWrapper); + if (locations.isEmpty()){ + List<String> results = new ArrayList<>(); + for (Location location : locations) { + results.add(location.getCode()); + } + return AjaxResult.success(results); + } + } + return AjaxResult.success(inventoryDetailList); + } } diff --git a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/domain/ReceiptContainerView.java b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/domain/ReceiptContainerView.java new file mode 100644 index 0000000..dbabfbc --- /dev/null +++ b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/domain/ReceiptContainerView.java @@ -0,0 +1,35 @@ +package com.huaheng.pc.receipt.receiptContainerHeader.domain; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * + * @author Enzo Cotter + * @date 2019/12/30 + */ +@Data +public class ReceiptContainerView { + + /** 入库方式 */ + Short taskType; + /** 入库单编码 */ + String receiptCode; + /** 容器编码 */ + String receiptContainerCode; + /** 收货单明细ID */ + Integer receiptDetailId; + /** 库位编码 */ + String locationCode; + /** 库位编码 */ + String sourceLocation; + /** 收货数量 */ + BigDecimal qty; + /** 货主code */ + String companyCode; + /**出入口*/ + private Integer port; + /**重量*/ + private Double weight; +} diff --git a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderService.java b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderService.java index 78cc219..87bafd5 100644 --- a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderService.java +++ b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderService.java @@ -3,6 +3,7 @@ package com.huaheng.pc.receipt.receiptContainerHeader.service; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader; import com.baomidou.mybatisplus.extension.service.IService; +import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerView; import java.util.List; @@ -22,4 +23,13 @@ public interface ReceiptContainerHeaderService extends IService<ReceiptContainer String locationCode, Integer qty, String locatingRule); Boolean cancelByIds(List<Integer> id); + + /** + * 检查容器状态 + * @param record + * @return + */ + AjaxResult checkContainer(ReceiptContainerView record); + + AjaxResult batchSave(List<ReceiptContainerView> list); } diff --git a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderServiceImpl.java index 3625114..ffe8144 100644 --- a/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderServiceImpl.java +++ b/src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderServiceImpl.java @@ -19,6 +19,7 @@ import com.huaheng.pc.config.warehouse.domain.Warehouse; import com.huaheng.pc.receipt.receiptContainerDetail.domain.ReceiptContainerDetail; import com.huaheng.pc.receipt.receiptContainerDetail.service.ReceiptContainerDetailService; import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerHeader; +import com.huaheng.pc.receipt.receiptContainerHeader.domain.ReceiptContainerView; import com.huaheng.pc.receipt.receiptContainerHeader.mapper.ReceiptContainerHeaderMapper; import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService; @@ -206,6 +207,26 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai } /** + * 检查容器状态 + * + * @param record + * @return + */ + @Override + public AjaxResult checkContainer(ReceiptContainerView record) { + //容器都是单据SN码,每个入库单都是新增容器 + + if (com.huaheng.common.utils.StringUtils.isEmpty(record.getReceiptContainerCode())) { + throw new ServiceException("容器不能为空"); + } + + if (taskHeaderService.UncompleteCount(record.getReceiptContainerCode()).intValue() > 0) { + throw new ServiceException("容器已经存在任务,请更换容器"); + } + return AjaxResult.success(""); + } + + /** * 检查容器编码合法性 * @param containerCode * @param materialCode @@ -416,4 +437,19 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai } return code; } + + @Override + public AjaxResult batchSave(List<ReceiptContainerView> list) { + if (list.size() < 1) { + throw new ServiceException("收货明细是空!"); + } + checkContainer(list.get(0)); + if (checkLocationCode(list.get(0).getLocationCode(), list.get(0).getLocationCode(), Integer.valueOf(list.get(0).getTaskType())) == true) { + locationService.updateStatus(list.get(0).getLocationCode(), "lock"); + } + ReceiptContainerView view = list.get(0); + AjaxResult ajaxResult = saveCountain(view.getReceiptCode(), view.getReceiptContainerCode(), + view.getReceiptDetailId(), view.getLocationCode(), view.getQty().intValue(), null); + return null; + } } diff --git a/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailService.java b/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailService.java index 41018d2..23f9b13 100644 --- a/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailService.java +++ b/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailService.java @@ -1,6 +1,7 @@ package com.huaheng.pc.receipt.receiptDetail.service; import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.mobile.receipt.ReceiptBill; import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; import com.baomidou.mybatisplus.extension.service.IService; import com.huaheng.pc.task.taskDetail.domain.TaskDetail; @@ -38,4 +39,13 @@ public interface ReceiptDetailService extends IService<ReceiptDetail>{ //以货主维度获取入库量 List<TaskDetail> getCompanyReceipt(); + + /** + * 移动端扫描入库单 + * @param code + * @return + */ + AjaxResult scanReceiptCode(String code, String type, String companyCode); + + List<Integer> insertTodayReceiptDetail(int headerId, List<ReceiptBill> receiptBills, boolean isCompletedQty, String companyCode); } diff --git a/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java b/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java index cce67eb..a47fef3 100644 --- a/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java +++ b/src/main/java/com/huaheng/pc/receipt/receiptDetail/service/ReceiptDetailServiceImpl.java @@ -8,8 +8,11 @@ import com.huaheng.common.support.Convert; import com.huaheng.common.utils.StringUtils; import com.huaheng.common.utils.security.ShiroUtils; import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.mobile.receipt.ReceiptBill; import com.huaheng.pc.check.checkHeader.domain.CheckHeader; import com.huaheng.pc.check.checkHeader.service.CheckHeaderService; +import com.huaheng.pc.config.company.domain.Company; +import com.huaheng.pc.config.company.service.CompanyService; import com.huaheng.pc.config.configValue.domain.ConfigValue; import com.huaheng.pc.config.configValue.service.ConfigValueService; import com.huaheng.pc.config.material.domain.Material; @@ -32,6 +35,7 @@ import io.swagger.models.auth.In; import org.aspectj.weaver.loadtime.Aj; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; @@ -62,6 +66,9 @@ public class ReceiptDetailServiceImpl extends ServiceImpl<ReceiptDetailMapper, R private ConfigValueService configValueService; @Resource private ReceiptDetailMapper receiptDetailMapper; + @Resource + private CompanyService companyService; + /** * 新增入库明细 @@ -291,6 +298,7 @@ public class ReceiptDetailServiceImpl extends ServiceImpl<ReceiptDetailMapper, R * 当所有明细表到达该状态时,更新头表状态 * @param id 头表id */ + @Override public void updateReceiptHeaderLastStatus(Integer id){ LambdaQueryWrapper<ReceiptDetail> lambdaDetails = Wrappers.lambdaQuery(); lambdaDetails.eq(ReceiptDetail::getReceiptId, id); @@ -401,4 +409,60 @@ public class ReceiptDetailServiceImpl extends ServiceImpl<ReceiptDetailMapper, R } return false; } + + /** + // * 移动端收货 + // * + // * @param code + // * @return + // */ + @Override + public AjaxResult scanReceiptCode(String code, String type, String companyCode) { + LambdaQueryWrapper<ReceiptHeader> lambdaQueryWrapper = Wrappers.lambdaQuery(); + lambdaQueryWrapper.eq(ReceiptHeader::getReferCode, code) + .eq(ReceiptHeader::getReceiptType, type); + ReceiptHeader receiptHeader = receiptHeaderService.getOne(lambdaQueryWrapper); + if (receiptHeader == null) { + LambdaQueryWrapper<Company> companyLambdaQueryWrapper = Wrappers.lambdaQuery(); + companyLambdaQueryWrapper.eq(Company::getCode,companyCode); + Company company = companyService.getOne(companyLambdaQueryWrapper); + return AjaxResult.success(""); + // return receiptHeaderService.findErpReceipt(String.valueOf(company.getId()), receiptHeader.getReferType(), receiptHeader.getReferCode()); + } else { + LambdaQueryWrapper<ReceiptDetail> queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(ReceiptDetail::getReceiptCode, receiptHeader.getCode()); + List<ReceiptDetail> receiptDetailList = list(queryWrapper); + return AjaxResult.success(receiptDetailList); + } + + } + + @Override + public List<Integer> insertTodayReceiptDetail(int headerId, List<ReceiptBill> receiptBills, boolean isCompletedQty, String companyCode) { + List<Integer> mReceiptDetailIds = new ArrayList<>(); + ReceiptHeader receiptHeader = receiptHeaderService.getById(headerId); + + for(ReceiptBill receiptBill : receiptBills) { + ReceiptDetail receiptDetail = new ReceiptDetail(); + receiptDetail.setId(null); + receiptDetail.setWarehouseCode(ShiroUtils.getWarehouseCode()); + receiptDetail.setCompanyCode(companyCode); + receiptDetail.setReceiptId(receiptHeader.getId()); + receiptDetail.setReceiptCode(receiptHeader.getCode()); + receiptDetail.setMaterialCode(receiptBill.getMaterialCode()); + receiptDetail.setInventorySts("good"); + receiptDetail.setTotalQty(receiptBill.getQty()); + if(isCompletedQty) { + receiptDetail.setOpenQty(receiptBill.getQty()); + } + receiptDetail.setCreatedBy(ShiroUtils.getLoginName()); + receiptDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); + receiptDetail.setDeleted(false); + receiptDetail.setBatch(receiptBill.getBatch()); + save(receiptDetail); + mReceiptDetailIds.add(receiptDetail.getId()); + } + return mReceiptDetailIds; + } + } diff --git a/src/main/java/com/huaheng/pc/receipt/receiptHeader/mapper/ReceiptHeaderMapper.java b/src/main/java/com/huaheng/pc/receipt/receiptHeader/mapper/ReceiptHeaderMapper.java index 5de0b59..37280c9 100644 --- a/src/main/java/com/huaheng/pc/receipt/receiptHeader/mapper/ReceiptHeaderMapper.java +++ b/src/main/java/com/huaheng/pc/receipt/receiptHeader/mapper/ReceiptHeaderMapper.java @@ -9,4 +9,10 @@ public interface ReceiptHeaderMapper extends BaseMapper<ReceiptHeader> { List<ReceiptHeader> selectListByCreated(); + + /** + * 获得最新入库单 + * @return + */ + List<ReceiptHeader> getLatestReceipt(String companyCode); } \ No newline at end of file diff --git a/src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java b/src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java index cfb3e56..31a6ac5 100644 --- a/src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java +++ b/src/main/java/com/huaheng/pc/receipt/receiptHeader/service/ReceiptHeaderService.java @@ -306,4 +306,10 @@ public class ReceiptHeaderService extends ServiceImpl<ReceiptHeaderMapper, Recei public List<ReceiptHeader> selectListByCreated() { return receiptHeaderMapper.selectListByCreated(); } + + @Transactional(rollbackFor = Exception.class) + public List<ReceiptHeader> getLatestReceipt(String companyCode) { + return receiptHeaderMapper.getLatestReceipt(companyCode); + } + } diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/domain/MobileTask.java b/src/main/java/com/huaheng/pc/task/taskHeader/domain/MobileTask.java new file mode 100644 index 0000000..3d9323f --- /dev/null +++ b/src/main/java/com/huaheng/pc/task/taskHeader/domain/MobileTask.java @@ -0,0 +1,19 @@ +package com.huaheng.pc.task.taskHeader.domain; + +import com.huaheng.pc.task.taskDetail.domain.TaskDetail; +import lombok.Data; + +import java.util.List; + +/** + * + * @author Enzo Cotter + * @date 2020/1/3 + */ +@Data +public class MobileTask { + + private TaskHeader taskHeader; + + private List<TaskDetail> taskDetail; +} diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderService.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderService.java index b25f5b9..5c0f335 100644 --- a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderService.java +++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderService.java @@ -2,6 +2,7 @@ package com.huaheng.pc.task.taskHeader.service; import com.huaheng.framework.web.domain.AjaxResult; import com.huaheng.pc.inventory.cycleCountDetail.domain.CycleCountDetail; +import com.huaheng.pc.task.taskHeader.domain.MobileTask; import com.huaheng.pc.task.taskHeader.domain.ShipmentTaskCreateModel; import com.huaheng.pc.task.taskHeader.domain.TaskHeader; import com.baomidou.mybatisplus.extension.service.IService; @@ -42,4 +43,23 @@ public interface TaskHeaderService extends IService<TaskHeader>{ List<TaskHeader> preferenceRealize (List<TaskHeader> taskHeaderList); List<TaskHeader> getTasksStatus(Short lastStatus); + + List<MobileTask> mobileFindTransferTask(String containerCode); + + /** + * 容器收货上架 + * @param containerCode + * @return + */ + AjaxResult createQuickTask(String containerCode); + + /** + * 根据库位完成任务 + * @param locationCode + * @return + * @throws Exception + */ + AjaxResult completeTask(String locationCode) throws Exception; + + AjaxResult createReplenishTask(String containerCode, Short taskStatus); } diff --git a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java index a051ebe..0aa7b06 100644 --- a/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java +++ b/src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.huaheng.api.wcs.service.taskAssignService.TaskAssignService; import com.huaheng.common.constant.QuantityConstant; import com.huaheng.common.exception.service.ServiceException; +import com.huaheng.common.support.Convert; import com.huaheng.common.utils.DataUtils; import com.huaheng.common.utils.StringUtils; import com.huaheng.common.utils.security.ShiroUtils; @@ -40,6 +41,7 @@ import com.huaheng.pc.receipt.receiptDetail.domain.ReceiptDetail; import com.huaheng.pc.receipt.receiptDetail.service.ReceiptDetailService; import com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader; import com.huaheng.pc.receipt.receiptHeader.service.ReceiptHeaderService; +import com.huaheng.pc.receipt.receiving.service.ReceivingService; import com.huaheng.pc.shipment.shipmentContainerDetail.domain.ShipmentContainerDetail; import com.huaheng.pc.shipment.shipmentContainerDetail.service.ShipmentContainerDetailService; import com.huaheng.pc.shipment.shipmentContainerHeader.domain.ShipmentContainerHeader; @@ -50,6 +52,7 @@ import com.huaheng.pc.shipment.shipmentHeader.domain.ShipmentHeader; import com.huaheng.pc.shipment.shipmentHeader.service.ShipmentHeaderService; import com.huaheng.pc.task.taskDetail.domain.TaskDetail; import com.huaheng.pc.task.taskDetail.service.TaskDetailService; +import com.huaheng.pc.task.taskHeader.domain.MobileTask; import com.huaheng.pc.task.taskHeader.domain.ShipmentTaskCreateModel; import org.apache.poi.ss.formula.functions.T; import org.jsoup.helper.DataUtil; @@ -64,6 +67,7 @@ import java.util.List; import java.util.Map; import java.util.*; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.stream.Collectors; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.huaheng.pc.task.taskHeader.domain.TaskHeader; @@ -121,6 +125,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea private MailService mailService; @Resource private SendMailService sendMailService; + @Resource + private ReceivingService receivingService; /** * 盘点任务首选项 @@ -1457,4 +1463,163 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea } } + + /** + * 移动端根据容器编码获取盘点任务 + * @param containerCode 容器编码 + * @return + */ + @Override + public List<MobileTask> mobileFindTransferTask(String containerCode) { + /* 查询该容器未完成的盘点任务明细*/ + LambdaQueryWrapper<TaskDetail> detailLambdaQueryWrapper = Wrappers.lambdaQuery(); + detailLambdaQueryWrapper.eq(TaskDetail::getContainerCode, containerCode) + .eq(TaskDetail::getTaskType, QuantityConstant.TASK_TYPE_CYCLECOUNT) + .ne(TaskDetail::getStatus, QuantityConstant.TASK_STATUS_COMPLETED); + List<TaskDetail> taskDetailList = taskDetailService.list(detailLambdaQueryWrapper); + + /* 获取任务明细中的任务头id*/ + List<Integer> headerIdList = taskDetailList.stream().map(TaskDetail::getTaskId).collect(Collectors.toList()); + List<MobileTask> mobileTasks = new ArrayList<>(); + + /* 遍历id查询出盘点任务*/ + for (Integer id : headerIdList) { + TaskHeader taskHeader = taskHeaderService.getById(id); + MobileTask mobileTask = new MobileTask(); + mobileTask.setTaskHeader(taskHeader); + LambdaQueryWrapper<TaskDetail> queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(TaskDetail::getTaskId, id) + .eq(TaskDetail::getContainerCode, containerCode); + List<TaskDetail> taskDetails = taskDetailService.list(queryWrapper); + mobileTask.setTaskDetail(taskDetails); + mobileTasks.add(mobileTask); + } + return mobileTasks; + } + + /** + * 容器收货上架 + * + * @param containerCode + * @return + */ + @Override + public AjaxResult createQuickTask(String containerCode) { + LambdaQueryWrapper<ReceiptContainerHeader> queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(ReceiptContainerHeader::getContainerCode, containerCode) + .eq(ReceiptContainerHeader::getStatus, QuantityConstant.RECEIPT_CONTAINER_BUILD) + .eq(ReceiptContainerHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()); + ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getOne(queryWrapper); + if (receiptContainerHeader == null) { + throw new ServiceException("该容器没有任务!"); + } + + LambdaQueryWrapper<ReceiptContainerDetail> containerDetailQueryWrapper = Wrappers.lambdaQuery(); + containerDetailQueryWrapper.eq(ReceiptContainerDetail::getReceiptContainerId, receiptContainerHeader.getId()) + .eq(ReceiptContainerDetail::getStatus, QuantityConstant.RECEIPT_CONTAINER_BUILD) + .eq(ReceiptContainerDetail::getContainerCode, containerCode); + List<ReceiptContainerDetail> containerDetailList = receiptContainerDetailService.list(containerDetailQueryWrapper); + if (containerDetailList.isEmpty()) { + throw new SecurityException("没有组盘明细,请先组盘"); + } + if (receiptContainerHeader.getStatus().equals(QuantityConstant.RECEIPT_HEADER_BUILD)) { + String ids = String.valueOf(receiptContainerHeader.getId()); + if (StringUtils.isEmpty(ids)){ + return AjaxResult.error("id不能为空"); + } + List<Integer> idList = Arrays.asList(Convert.toIntArray(ids)); + for (int i = 0; i<idList.size(); i++){ + LambdaQueryWrapper<ReceiptContainerDetail> lambda = Wrappers.lambdaQuery(); + lambda.eq(ReceiptContainerDetail::getReceiptContainerId, idList.get(i)); + List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(lambda); + for (ReceiptContainerDetail receiptContainerDetail : receiptContainerDetails){ + receivingService.position(receiptContainerDetail); + } + + } + if (StringUtils.isEmpty(ids)){ + return AjaxResult.error("id不能为空"); + } + for (int i = 0; i<idList.size(); i++){ + LambdaQueryWrapper<ReceiptContainerDetail> lambda = Wrappers.lambdaQuery(); + lambda.eq(ReceiptContainerDetail::getReceiptContainerId, idList.get(i)); + List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(lambda); + for (ReceiptContainerDetail receiptContainerDetail : receiptContainerDetails){ + receivingService.position(receiptContainerDetail); + } + + } + + Integer maxId = idList.stream().max(Comparator.comparing(Integer::intValue)).orElse(null); + + LambdaQueryWrapper<ReceiptContainerHeader> lambda = Wrappers.lambdaQuery(); + lambda.select(ReceiptContainerHeader::getId) + .lt(ReceiptContainerHeader::getStatus, 10) + .le(ReceiptContainerHeader::getId, maxId); + return taskHeaderService.createReceiptTask(idList); + } + return null; + } + + /** + * 根据库位完成任务 + * + * @param locationCode + * @return + * @throws Exception + */ + @Override + public AjaxResult completeTask(String locationCode) throws Exception { + LambdaQueryWrapper<TaskHeader> taskQueryWrapper = Wrappers.lambdaQuery(); + taskQueryWrapper.eq(TaskHeader::getToLocation, locationCode); + List<TaskHeader> list = this.list(taskQueryWrapper); + if (list.size() < 1) { + throw new ServiceException("库位(" + locationCode + ")没有任务!"); + } else if(list.get(0).getStatus() == 100) { + //如果已完成则不管 + throw new ServiceException("库位(" + locationCode + ")任务已经完成!"); + } + if(list.get(0).getTaskType()==100 || list.get(0).getTaskType()==200){ + //入库任务 + return completeReceiptTask((list.get(0))); + } else { + throw new ServiceException("库位(" + locationCode + ")的任务不是上架,不能完成!"); + } + } + + @Override + public AjaxResult createReplenishTask(String containerCode, Short taskStatus) { + LambdaQueryWrapper<ReceiptContainerHeader> headerQueryWrapper = Wrappers.lambdaQuery(); + headerQueryWrapper.eq(ReceiptContainerHeader::getContainerCode, containerCode) + .eq(ReceiptContainerHeader::getStatus, QuantityConstant.RECEIPT_CONTAINER_BUILD); + + List<ReceiptContainerHeader> receiptContainerHeaderList = receiptContainerHeaderService.list(headerQueryWrapper); + if (receiptContainerHeaderList.isEmpty()) { + throw new ServiceException("该容器没有任务!"); + } + if (receiptContainerHeaderList.size() > 1){ + throw new ServiceException("该容器存在多条任务"); + } + if (receiptContainerHeaderList.get(0).getWarehouseCode() != ShiroUtils.getWarehouseCode()) { + throw new ServiceException("容器不在当前仓库!"); + } + LambdaQueryWrapper<ReceiptContainerDetail> lambdaQueryWrapper = Wrappers.lambdaQuery(); + lambdaQueryWrapper.eq(ReceiptContainerDetail::getReceiptContainerId, receiptContainerHeaderList.get(0).getId()); + List<ReceiptContainerDetail> containerDetailList = receiptContainerDetailService.list(lambdaQueryWrapper); + ReceiptContainerHeader containerHeader = receiptContainerHeaderList.get(0); + if (containerDetailList.isEmpty()){ + throw new ServiceException("没有组盘明细,请先组盘!"); + } + if (containerHeader.getStatus().equals(QuantityConstant.TASK_STATUS_BUILD)) { + if (containerHeader.getStatus().intValue() != taskStatus.intValue()) { + containerHeader.setStatus(taskStatus); + receiptContainerHeaderService.updateById(containerHeader); + } + } + List<Integer> ids = new ArrayList<>(); + ids.add(containerHeader.getId()); + createReceiptTask(ids); + return null; + } + } \ No newline at end of file diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 7b9ead6..4c68be9 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -66,4 +66,4 @@ logging: server: port: 8888 servlet: - context-path: /twms/ \ No newline at end of file + context-path: /wms/ \ No newline at end of file diff --git a/src/main/resources/application-prd.yml b/src/main/resources/application-prd.yml new file mode 100644 index 0000000..b58492e --- /dev/null +++ b/src/main/resources/application-prd.yml @@ -0,0 +1,69 @@ +# 数据源配置 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 主库 + master: + url: jdbc:mysql://localhost:3306/xinyi_wms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2b8&allowPublicKeyRetrieval=true + username: root + password: 123456 + # 从库 + slave: + # 从库不启用 + enabled: false + url: + username: + password: + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 5000 + # \配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 30000 + #配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 300000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 设置白名单,不填则允许所有访问 + allow: + url-pattern: /druid/* + # 控制台管理用户名和密码 + login-username: + login-password: + filter: + stat: + enabled: true + # 慢SQL记录 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true + +#日志配置 +logging: + level: + com.huaheng: debug + org.springframework: warn + spring.springboot.dao: DEBUG + +server: + port: 8888 + servlet: + context-path: /twms/ \ No newline at end of file diff --git a/src/main/resources/mybatis/config/LocationMapper.xml b/src/main/resources/mybatis/config/LocationMapper.xml index 6c8e3e4..95853e3 100644 --- a/src/main/resources/mybatis/config/LocationMapper.xml +++ b/src/main/resources/mybatis/config/LocationMapper.xml @@ -94,4 +94,9 @@ LEFT JOIN (SELECT count(1) num2,warehouseCode FROM location WHERE containerCode ='' GROUP BY warehouseCode) b on b.warehouseCode=w.code </select> + + <select id="pickLocation" resultType="com.huaheng.pc.config.location.domain.Location"> + select * from location + where containerCode != '' and status = "empty" + </select> </mapper> \ No newline at end of file diff --git a/src/main/resources/mybatis/config/MaterialMapper.xml b/src/main/resources/mybatis/config/MaterialMapper.xml index e1c0f5c..e66462c 100644 --- a/src/main/resources/mybatis/config/MaterialMapper.xml +++ b/src/main/resources/mybatis/config/MaterialMapper.xml @@ -53,4 +53,9 @@ <select id="findAllByCode" resultMap="BaseResultMap" parameterType="java.lang.String"> select * from material where code = #{code,jdbcType=VARCHAR} </select> + + + <select id="findLatest" resultMap="BaseResultMap" parameterType="java.lang.String"> + select * from material order by id desc limit 10 + </select> </mapper> \ No newline at end of file diff --git a/src/main/resources/mybatis/download/DownloadMapper.xml b/src/main/resources/mybatis/download/DownloadMapper.xml new file mode 100644 index 0000000..ef42a58 --- /dev/null +++ b/src/main/resources/mybatis/download/DownloadMapper.xml @@ -0,0 +1,20 @@ +<?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.huaheng.pc.common.mapper.ApkMapper"> + + <insert id="insertApkInfo" parameterType="com.huaheng.mobile.download.ApkInfo"> + insert into apkinfo(pkgName, versionCode, versionName, url, md5) values(#{pkgName},#{versionCode},#{versionName},#{url},#{md5}) + </insert> + + <update id="clearApkInfo"> + delete from apkinfo + </update> + + <select id="getApkInfoByPkgName" resultType="com.huaheng.mobile.download.ApkInfo"> + select * from apkinfo where pkgName=#{pkgName} + </select> + + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mybatis/receipt/ReceiptHeaderMapper.xml b/src/main/resources/mybatis/receipt/ReceiptHeaderMapper.xml index cce1f97..5b3c928 100644 --- a/src/main/resources/mybatis/receipt/ReceiptHeaderMapper.xml +++ b/src/main/resources/mybatis/receipt/ReceiptHeaderMapper.xml @@ -59,4 +59,8 @@ inner join task_detail t on t.billCode=r.code and t.status>700 and DATEDIFF(NOW(), t.lastUpdated)=0 GROUP BY r.code </select> + + <select id="getLatestReceipt" resultType="com.huaheng.pc.receipt.receiptHeader.domain.ReceiptHeader"> + select * from receipt_header where companyCode = #{companyCode,jdbcType=VARCHAR} order by id desc limit 10 + </select> </mapper> \ No newline at end of file diff --git a/src/main/resources/templates/config/container/container.html b/src/main/resources/templates/config/container/container.html index 79958b5..591a74a 100644 --- a/src/main/resources/templates/config/container/container.html +++ b/src/main/resources/templates/config/container/container.html @@ -56,8 +56,8 @@ <i class="fa fa-plus"></i> 打印 </a> </div> + </div> - <div class="col-sm-12 select-info"> <table id="bootstrap-table" data-mobile-responsive="true" class="table table-bordered table-hover"></table> </div> @@ -199,7 +199,6 @@ }; $.table.init(options); }); - function print() { var rows=$("#bootstrap-table").bootstrapTable('getSelections'); if (rows.length == 0) { diff --git a/src/main/resources/templates/inventory/cycleCountHeader/add.html b/src/main/resources/templates/inventory/cycleCountHeader/add.html index 64405b3..826cb4c 100644 --- a/src/main/resources/templates/inventory/cycleCountHeader/add.html +++ b/src/main/resources/templates/inventory/cycleCountHeader/add.html @@ -34,7 +34,7 @@ <label class="col-sm-3 control-label">货主:</label> <div class="col-sm-8"> <select id = "companyCode" name="companyCode" class="form-control" th:with="list=${@companyService.selectCompanyByCurrentUserId()}"> - <option th:each="item : ${list}" th:text="${item['name']}" th:value="${item['id']}" th:attr = " code = ${item['code']}"></option> + <option th:each="item : ${list}" th:text="${item['name']}" th:value="${item['code']}" th:attr = " code = ${item['code']}"></option> </select> </div> </div> diff --git a/src/main/resources/templates/inventory/inventoryHeader/emptyCheckOut.html b/src/main/resources/templates/inventory/inventoryHeader/emptyCheckOut.html index b6c3d1a..3c89464 100644 --- a/src/main/resources/templates/inventory/inventoryHeader/emptyCheckOut.html +++ b/src/main/resources/templates/inventory/inventoryHeader/emptyCheckOut.html @@ -39,7 +39,7 @@ }, }, submitHandler: function(form) { - $.operate.save(prefix + "/emptyCheckOut", $('#form-task-emptyInOut').serialize()); + $.operate.save(prefix + "/emptyCheckOut", $('#form-task-emptyCheckOut').serialize()); } }); diff --git a/src/main/resources/templates/shipment/shipmentHeader/report.html b/src/main/resources/templates/shipment/shipmentHeader/report.html index b3949eb..8951061 100644 --- a/src/main/resources/templates/shipment/shipmentHeader/report.html +++ b/src/main/resources/templates/shipment/shipmentHeader/report.html @@ -5,7 +5,9 @@ <body class="white-bg" style="padding:5px 0;" id="ddd"> <div class="container" style="color: #333;"> <div class="row"> - <table id="reportTable" width="100%" border="0" cellspacing="0" cellpadding="0" class="dy-report"> + <h3 align="center">发货单</h3> + <span>发货单号:</span><span th:text="${shipmentHeader['totalLines']}"></span> + <table id="reportTable" width="100%" border="1" cellspacing="0" cellpadding="0" class="dy-report"> <thead style="display:table-header-group;"> <tr> <td colspan="7"> @@ -25,14 +27,14 @@ </td> </tr> <tr> - <th width="18%">存货编码</th> - <th width="22%">物料名称</th> - <th width="15%">物料规格</th> - <th width="5%">批次</th> - <th width="5%">批号</th> - <th width="5%">项目号</th> - <th width="9%">数量</th> - <th width="21%">条码</th> + <th>序号</th> + <th >仓库名称</th> + <th >存货编码</th> + <th>存货代码</th> + <th>存货名称</th> + <th>规格型号</th> + <th>单位</th> + <th>备注</th> </tr> </thead> <tbody> @@ -44,7 +46,6 @@ <td th:text="${row.lot}"></td> <td th:text="${row.projectNo}"></td> <td th:text="${row.shipQty}"></td> - <td><img></img></td> </tr> </tbody> </table> diff --git a/src/main/resources/templates/shipment/shipmentHeader/report1.html b/src/main/resources/templates/shipment/shipmentHeader/report1.html new file mode 100644 index 0000000..b3949eb --- /dev/null +++ b/src/main/resources/templates/shipment/shipmentHeader/report1.html @@ -0,0 +1,101 @@ +<!DOCTYPE HTML> +<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> +<meta charset="utf-8"> +<head th:include="include :: header"></head> +<body class="white-bg" style="padding:5px 0;" id="ddd"> +<div class="container" style="color: #333;"> + <div class="row"> + <table id="reportTable" width="100%" border="0" cellspacing="0" cellpadding="0" class="dy-report"> + <thead style="display:table-header-group;"> + <tr> + <td colspan="7"> + <span style="padding-top:40px;width: 40%; float:left;" th:text="${#dates.format(shipmentHeader.created,'yyyy-MM-dd HH:mm:ss')}"></span> + <h2 style="width:20%;text-align:center;float:left;padding-top:10px;">出库单</h2> + <span style="padding-top:20px;width:38%;float:right; text-align: right"><img id="shipmentCode" th:data="${shipmentHeader['code']}"></img></span> + </td> + </tr> + <tr style="padding:15px 0 5px 0;border-bottom:1px solid #606060"> + <td colspan="7"> + <div style="width:40%; float:left;">客户名称:<span th:text="${shipmentHeader['customerName']}"></span></div> + <div style="width:50%; float:right; text-align:right"> + <span>明细条数:<span th:text="${shipmentHeader['totalLines']}"></span></span> + <span style="padding-left:20px;">明细总数:<span th:text="${shipmentHeader['totalQty']}"></span></span> + <span class="noprint" style="padding-left:20px;"><button type="button" onClick="a()"><i class="fa fa-print"></i> 打印</button></span> + </div> + </td> + </tr> + <tr> + <th width="18%">存货编码</th> + <th width="22%">物料名称</th> + <th width="15%">物料规格</th> + <th width="5%">批次</th> + <th width="5%">批号</th> + <th width="5%">项目号</th> + <th width="9%">数量</th> + <th width="21%">条码</th> + </tr> + </thead> + <tbody> + <tr th:each="row,rowStat : ${details}"> + <td th:text="${row.materialCode}"></td> + <td th:text="${row.materialName}"></td> + <td th:text="${row.materialSpec}"></td> + <td th:text="${row.batch}"></td> + <td th:text="${row.lot}"></td> + <td th:text="${row.projectNo}"></td> + <td th:text="${row.shipQty}"></td> + <td><img></img></td> + </tr> + </tbody> + </table> + </div> +</div> +<div th:include="include :: footer"></div> +<script type="text/javascript" src="../../../js/barcode/JsBarcode.all.js"></script> +<script th:inline="javascript"> + + var barcodeStyle = { + format: "CODE128",//选择要使用的条形码类型 + width:1,//设置条之间的宽度 + height:40,//高度 + displayValue:true,//是否在条形码下方显示文字 + // text:"456",//覆盖显示的文本 + // fontOptions:"bold italic",//使文字加粗体或变斜体 + font:"monospace",//设置文本的字体fantasy + textAlign:"center",//设置文本的水平对齐方式 + textPosition:"bottom",//设置文本的垂直位置 + textMargin:1,//设置条形码和文本之间的间距 + fontSize:12,//设置文本的大小 + background:"#ffffff",//设置条形码的背景 + lineColor:"#000000",//设置条和文本的颜色。 + margin:1//设置条形码周围的空白边距 + }; + + $("#shipmentCode").JsBarcode($("#shipmentCode").attr("data"), barcodeStyle); + + // for (var i=0; i<$('#reportTable tbody tr').length; i++){ + // var barcodeText = $("#reportTable tbody tr:eq("+ i +") td:eq(0)").innerText; + // $("#reportTable tbody tr:eq("+ i +") td:eq(6) canvas").JsBarcode("6666", barcodeStyle); + // } + + $('#reportTable tbody tr').each(function(i) { + var barcodeText = $(this).children()[0].innerText; + JsBarcode($(this).children()[6].querySelector("img"), barcodeText, barcodeStyle); + }); + + +</script> +<style type="text/css"> + @media print { + .noprint{display:none;} + } +</style> +<script type="text/javascript" src="../../../js/jquery-1.4.4.min.js"></script> +<script type="text/javascript" src="../../../js/jquery.jqprint-0.3.js"></script> +<script type="text/javascript"> + function a(){ + $("#ddd").jqprint(); + } +</script> +</body> +</html> \ No newline at end of file