Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
E
erp-service
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ximai
erp-service
Commits
fa4ec878
Commit
fa4ec878
authored
Oct 12, 2025
by
chicheng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
成品入库功能添加
parent
48e86735
Show whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
880 additions
and
633 deletions
+880
-633
.gitignore
.gitignore
+28
-25
CorsConfig.java
...topsunit/scanservice/ximai/barcode/common/CorsConfig.java
+46
-0
application-dev.yml
barcode-system/target/classes/application-dev.yml
+82
-82
application.yml
barcode-system/target/classes/application.yml
+4
-4
pom.xml
common/pom.xml
+115
-108
MoctfController.java
...opsunit/scanservice/ximai/controller/MoctfController.java
+32
-33
ExAccountInfoDto.java
.../com/topsunit/scanservice/ximai/dto/ExAccountInfoDto.java
+38
-35
MoctfCreateParams.java
...com/topsunit/scanservice/ximai/dto/MoctfCreateParams.java
+76
-73
MoctfCreateParams2.java
...om/topsunit/scanservice/ximai/dto/MoctfCreateParams2.java
+36
-33
MoctgCreateParams.java
...com/topsunit/scanservice/ximai/dto/MoctgCreateParams.java
+73
-73
StorageDetailParams.java
...m/topsunit/scanservice/ximai/dto/StorageDetailParams.java
+29
-0
ExAccountInfo.java
.../com/topsunit/scanservice/ximai/entity/ExAccountInfo.java
+53
-49
MoctfService.java
.../com/topsunit/scanservice/ximai/service/MoctfService.java
+180
-118
MesStorageDetailRecordService.java
...anservice/ximai/webapi/MesStorageDetailRecordService.java
+30
-0
StorageDetailRecordCreate.java
...anservice/ximai/webapi/dto/StorageDetailRecordCreate.java
+33
-0
StorageDetailRecordResult.java
...anservice/ximai/webapi/dto/StorageDetailRecordResult.java
+25
-0
No files found.
.gitignore
View file @
fa4ec878
...
@@ -23,3 +23,6 @@
...
@@ -23,3 +23,6 @@
hs_err_pid*
hs_err_pid*
/target/
/target/
/.idea/
/.idea/
/barcode-system/target/
/barcode-system/target/
/erp-system/target/
barcode-system/src/main/java/com/topsunit/scanservice/ximai/barcode/common/CorsConfig.java
0 → 100644
View file @
fa4ec878
package
com
.
topsunit
.
scanservice
.
ximai
.
barcode
.
common
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.web.cors.CorsConfiguration
;
import
org.springframework.web.cors.UrlBasedCorsConfigurationSource
;
import
org.springframework.web.filter.CorsFilter
;
/**
* <p>Title: CorsConfig</p>
* <p>Description: 跨域配置</p>
*
* @author system
* @version V1.0
* @date 2025/10/12
*/
@Configuration
public
class
CorsConfig
{
@Bean
public
CorsFilter
corsFilter
()
{
CorsConfiguration
config
=
new
CorsConfiguration
();
// 允许所有域名进行跨域调用
config
.
addAllowedOriginPattern
(
"*"
);
// 允许所有请求头
config
.
addAllowedHeader
(
"*"
);
// 允许所有请求方法
config
.
addAllowedMethod
(
"*"
);
// 允许发送Cookie
config
.
setAllowCredentials
(
true
);
// 预检请求的有效期,单位为秒
config
.
setMaxAge
(
3600L
);
UrlBasedCorsConfigurationSource
source
=
new
UrlBasedCorsConfigurationSource
();
// 对所有接口都应用跨域配置
source
.
registerCorsConfiguration
(
"/**"
,
config
);
return
new
CorsFilter
(
source
);
}
}
barcode-system/target/classes/application-dev.yml
View file @
fa4ec878
barcode-system/target/classes/application.yml
View file @
fa4ec878
common/pom.xml
View file @
fa4ec878
...
@@ -103,6 +103,13 @@
...
@@ -103,6 +103,13 @@
</annotationProcessorPaths>
</annotationProcessorPaths>
</configuration>
</configuration>
</plugin>
</plugin>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
<configuration>
<skip>
true
</skip>
</configuration>
</plugin>
</plugins>
</plugins>
</build>
</build>
</project>
</project>
erp-system/src/main/java/com/topsunit/scanservice/ximai/controller/MoctfController.java
View file @
fa4ec878
...
@@ -26,7 +26,6 @@ public class MoctfController {
...
@@ -26,7 +26,6 @@ public class MoctfController {
@PostMapping
(
"/moctf/createByErp"
)
@PostMapping
(
"/moctf/createByErp"
)
public
void
createByErp
(
@RequestBody
MoctfCreateParams2
createParams
)
{
public
void
createByErp
(
@RequestBody
MoctfCreateParams2
createParams
)
{
moctfService
.
create2
(
createParams
);
moctfService
.
create2
(
createParams
);
}
}
...
...
erp-system/src/main/java/com/topsunit/scanservice/ximai/dto/ExAccountInfoDto.java
View file @
fa4ec878
...
@@ -30,6 +30,9 @@ public class ExAccountInfoDto {
...
@@ -30,6 +30,9 @@ public class ExAccountInfoDto {
@ApiModelProperty
(
"MES接口地址"
)
@ApiModelProperty
(
"MES接口地址"
)
String
mesUrl
;
String
mesUrl
;
@ApiModelProperty
(
"条码系统地址"
)
String
barcodeUrl
;
@ApiModelProperty
(
"开启"
)
@ApiModelProperty
(
"开启"
)
String
enable
;
String
enable
;
}
}
erp-system/src/main/java/com/topsunit/scanservice/ximai/dto/MoctfCreateParams.java
View file @
fa4ec878
...
@@ -70,4 +70,7 @@ public class MoctfCreateParams {
...
@@ -70,4 +70,7 @@ public class MoctfCreateParams {
@ApiModelProperty
(
"明细"
)
@ApiModelProperty
(
"明细"
)
private
List
<
MoctgCreateParams
>
details
;
private
List
<
MoctgCreateParams
>
details
;
@ApiModelProperty
(
"标签明细"
)
private
List
<
StorageDetailParams
>
storageDetails
;
}
}
erp-system/src/main/java/com/topsunit/scanservice/ximai/dto/MoctfCreateParams2.java
View file @
fa4ec878
...
@@ -30,4 +30,7 @@ public class MoctfCreateParams2 {
...
@@ -30,4 +30,7 @@ public class MoctfCreateParams2 {
@ApiModelProperty
(
"工单单号"
)
@ApiModelProperty
(
"工单单号"
)
private
String
tg015
;
private
String
tg015
;
@ApiModelProperty
(
"标签明细"
)
private
List
<
StorageDetailParams
>
storageDetails
;
}
}
erp-system/src/main/java/com/topsunit/scanservice/ximai/dto/MoctgCreateParams.java
View file @
fa4ec878
erp-system/src/main/java/com/topsunit/scanservice/ximai/dto/StorageDetailParams.java
0 → 100644
View file @
fa4ec878
package
com
.
topsunit
.
scanservice
.
ximai
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* <p>Title: StorageDetailParams</p>
* <p>Description: 入库标签明细参数</p>
*
* @author generator
* @version V1.0
* @date 2025-10-12
*/
@Data
public
class
StorageDetailParams
{
@ApiModelProperty
(
"工单单别"
)
private
String
workOrderType
;
@ApiModelProperty
(
"工单单号"
)
private
String
workOrderNo
;
@ApiModelProperty
(
"箱码"
)
private
String
boxCode
;
@ApiModelProperty
(
"小标签号"
)
private
String
labelNo
;
}
erp-system/src/main/java/com/topsunit/scanservice/ximai/entity/ExAccountInfo.java
View file @
fa4ec878
...
@@ -35,6 +35,10 @@ public class ExAccountInfo {
...
@@ -35,6 +35,10 @@ public class ExAccountInfo {
@Column
(
name
=
"API_URL"
)
@Column
(
name
=
"API_URL"
)
String
apiUrl
;
String
apiUrl
;
@ApiModelProperty
(
"条码系统地址"
)
@Column
(
name
=
"BARCODE_URL"
)
String
barcodeUrl
;
@ApiModelProperty
(
"MES接口地址"
)
@ApiModelProperty
(
"MES接口地址"
)
@Column
(
name
=
"MES_URL"
)
@Column
(
name
=
"MES_URL"
)
String
mesUrl
;
String
mesUrl
;
...
...
erp-system/src/main/java/com/topsunit/scanservice/ximai/service/MoctfService.java
View file @
fa4ec878
...
@@ -7,6 +7,12 @@ import com.topsunit.scanservice.ximai.dao.*;
...
@@ -7,6 +7,12 @@ import com.topsunit.scanservice.ximai.dao.*;
import
com.topsunit.scanservice.ximai.dto.*
;
import
com.topsunit.scanservice.ximai.dto.*
;
import
com.topsunit.scanservice.ximai.entity.*
;
import
com.topsunit.scanservice.ximai.entity.*
;
import
com.topsunit.scanservice.ximai.utils.MessageUtils
;
import
com.topsunit.scanservice.ximai.utils.MessageUtils
;
import
com.topsunit.scanservice.ximai.webapi.MesStorageDetailRecordService
;
import
com.topsunit.scanservice.ximai.webapi.dto.StorageDetailRecordCreate
;
import
com.topsunit.scanservice.ximai.webapi.dto.StorageDetailRecordResult
;
import
org.apache.commons.lang3.StringUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.transaction.annotation.Transactional
;
...
@@ -20,6 +26,8 @@ import java.util.concurrent.atomic.AtomicReference;
...
@@ -20,6 +26,8 @@ import java.util.concurrent.atomic.AtomicReference;
@Service
@Service
public
class
MoctfService
{
public
class
MoctfService
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
MoctfService
.
class
);
@Autowired
@Autowired
private
MoctfDao
moctfDao
;
private
MoctfDao
moctfDao
;
@Autowired
@Autowired
...
@@ -30,11 +38,16 @@ public class MoctfService {
...
@@ -30,11 +38,16 @@ public class MoctfService {
private
InvmcDao
invmcDao
;
private
InvmcDao
invmcDao
;
@Autowired
@Autowired
private
MoctaDao
moctaDao
;
private
MoctaDao
moctaDao
;
@Autowired
private
MesStorageDetailRecordService
mesStorageDetailRecordService
;
@Transactional
@Transactional
public
void
create
(
MoctfCreateParams
create
){
public
void
create
(
MoctfCreateParams
create
){
Moctf
moctf
=
BeanUtil
.
toBeanIgnoreError
(
create
,
Moctf
.
class
);
Moctf
moctf
=
BeanUtil
.
toBeanIgnoreError
(
create
,
Moctf
.
class
);
Calendar
curr
=
Calendar
.
getInstance
();
Calendar
curr
=
Calendar
.
getInstance
();
String
currStr
=
DateUtil
.
format
(
curr
.
getTime
(),
"yyyyMMdd"
);
String
currStr
=
DateUtil
.
format
(
curr
.
getTime
(),
"yyyyMMdd"
);
if
(
StringUtils
.
isEmpty
(
create
.
getTf002
())){
moctf
.
setTf002
(
this
.
getNewTf002
(
create
.
getTf001
()));
}
moctf
.
setTf003
(
currStr
);
moctf
.
setTf003
(
currStr
);
moctf
.
setTf012
(
currStr
);
moctf
.
setTf012
(
currStr
);
AtomicReference
<
String
>
ta083
=
new
AtomicReference
<
String
>();
AtomicReference
<
String
>
ta083
=
new
AtomicReference
<
String
>();
...
@@ -44,6 +57,9 @@ public class MoctfService {
...
@@ -44,6 +57,9 @@ public class MoctfService {
Mocta
mocta
=
moctaDao
.
findById
(
new
MoctaId
(
s
.
getTg014
(),
s
.
getTg015
())).
orElseThrow
(()->
new
TopsunitException
(
MessageUtils
.
getMessage
(
"未找到对应工单:{0},{1}"
,
s
.
getTg014
(),
s
.
getTg015
())));
Mocta
mocta
=
moctaDao
.
findById
(
new
MoctaId
(
s
.
getTg014
(),
s
.
getTg015
())).
orElseThrow
(()->
new
TopsunitException
(
MessageUtils
.
getMessage
(
"未找到对应工单:{0},{1}"
,
s
.
getTg014
(),
s
.
getTg015
())));
//查询物料
//查询物料
Invmb
invmb
=
invmbDao
.
findById
(
mocta
.
getTa006
()).
orElseThrow
(()->
new
TopsunitException
(
MessageUtils
.
getMessage
(
"未找到对应物料:{0}"
,
s
.
getTg004
())));
Invmb
invmb
=
invmbDao
.
findById
(
mocta
.
getTa006
()).
orElseThrow
(()->
new
TopsunitException
(
MessageUtils
.
getMessage
(
"未找到对应物料:{0}"
,
s
.
getTg004
())));
if
(
StringUtils
.
isEmpty
(
moctg
.
getTg002
())){
moctg
.
setTg002
(
moctf
.
getTf002
());
}
moctg
.
setTg004
(
invmb
.
getMb001
());
moctg
.
setTg004
(
invmb
.
getMb001
());
moctg
.
setTg005
(
invmb
.
getMb002
());
moctg
.
setTg005
(
invmb
.
getMb002
());
moctg
.
setTg006
(
invmb
.
getMb003
());
moctg
.
setTg006
(
invmb
.
getMb003
());
...
@@ -62,6 +78,31 @@ public class MoctfService {
...
@@ -62,6 +78,31 @@ public class MoctfService {
moctf
.
setTf023
(
create
.
getDetails
().
get
(
0
).
getTg011
());
moctf
.
setTf023
(
create
.
getDetails
().
get
(
0
).
getTg011
());
moctf
.
setTf024
(
create
.
getDetails
().
get
(
0
).
getTg011
());
moctf
.
setTf024
(
create
.
getDetails
().
get
(
0
).
getTg011
());
moctfDao
.
save
(
moctf
);
moctfDao
.
save
(
moctf
);
// 保存入库标签明细记录到 MES 系统
if
(
create
.
getStorageDetails
()
!=
null
&&
!
create
.
getStorageDetails
().
isEmpty
())
{
create
.
getStorageDetails
().
forEach
(
detail
->
{
try
{
StorageDetailRecordCreate
storageDetailRecord
=
new
StorageDetailRecordCreate
();
storageDetailRecord
.
setWorkOrderType
(
detail
.
getWorkOrderType
());
storageDetailRecord
.
setWorkOrderNo
(
detail
.
getWorkOrderNo
());
storageDetailRecord
.
setBoxCode
(
detail
.
getBoxCode
());
storageDetailRecord
.
setLabelNo
(
detail
.
getLabelNo
());
StorageDetailRecordResult
result
=
mesStorageDetailRecordService
.
create
(
storageDetailRecord
);
if
(
result
.
getCode
()==
200
)
{
log
.
info
(
"保存入库明细记录成功:工单单别={}, 工单单号={}, 箱码={}, 小标签号={}"
,
detail
.
getWorkOrderType
(),
detail
.
getWorkOrderNo
(),
detail
.
getBoxCode
(),
detail
.
getLabelNo
());
}
else
{
throw
new
TopsunitException
(
result
.
getMsg
());
}
}
catch
(
Exception
e
)
{
log
.
error
(
"保存入库明细记录失败:工单单别={}, 工单单号={}, 箱码={}, 小标签号={}, 错误信息={}"
,
detail
.
getWorkOrderType
(),
detail
.
getWorkOrderNo
(),
detail
.
getBoxCode
(),
detail
.
getLabelNo
(),
e
.
getMessage
(),
e
);
// 不抛出异常,仅记录日志,避免影响主流程
}
});
}
}
}
...
@@ -103,6 +144,27 @@ public class MoctfService {
...
@@ -103,6 +144,27 @@ public class MoctfService {
moctf
.
setTf023
(
create
.
getTg011
());
moctf
.
setTf023
(
create
.
getTg011
());
moctf
.
setTf024
(
create
.
getTg011
());
moctf
.
setTf024
(
create
.
getTg011
());
moctfDao
.
save
(
moctf
);
moctfDao
.
save
(
moctf
);
// 保存入库标签明细记录到 MES 系统
if
(
create
.
getStorageDetails
()
!=
null
&&
!
create
.
getStorageDetails
().
isEmpty
())
{
create
.
getStorageDetails
().
forEach
(
detail
->
{
try
{
StorageDetailRecordCreate
storageDetailRecord
=
new
StorageDetailRecordCreate
();
storageDetailRecord
.
setWorkOrderType
(
detail
.
getWorkOrderType
());
storageDetailRecord
.
setWorkOrderNo
(
detail
.
getWorkOrderNo
());
storageDetailRecord
.
setBoxCode
(
detail
.
getBoxCode
());
storageDetailRecord
.
setLabelNo
(
detail
.
getLabelNo
());
StorageDetailRecordResult
result
=
mesStorageDetailRecordService
.
create
(
storageDetailRecord
);
log
.
info
(
"保存入库明细记录成功:工单单别={}, 工单单号={}, 箱码={}, 小标签号={}"
,
detail
.
getWorkOrderType
(),
detail
.
getWorkOrderNo
(),
detail
.
getBoxCode
(),
detail
.
getLabelNo
());
}
catch
(
Exception
e
)
{
log
.
error
(
"保存入库明细记录失败:工单单别={}, 工单单号={}, 箱码={}, 小标签号={}, 错误信息={}"
,
detail
.
getWorkOrderType
(),
detail
.
getWorkOrderNo
(),
detail
.
getBoxCode
(),
detail
.
getLabelNo
(),
e
.
getMessage
(),
e
);
// 不抛出异常,仅记录日志,避免影响主流程
}
});
}
}
}
...
...
erp-system/src/main/java/com/topsunit/scanservice/ximai/webapi/MesStorageDetailRecordService.java
0 → 100644
View file @
fa4ec878
package
com
.
topsunit
.
scanservice
.
ximai
.
webapi
;
import
com.topsunit.scanservice.ximai.webapi.dto.StorageDetailRecordCreate
;
import
com.topsunit.scanservice.ximai.webapi.dto.StorageDetailRecordResult
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
/**
* <p>Title: MesStorageDetailRecordService</p>
* <p>Description: MES 入库明细记录服务</p>
*
* @author generator
* @version V1.0
* @date 2025-10-12
*/
@FeignClient
(
name
=
"MES-StorageDetailRecord"
,
url
=
"${topsunit.mes-url}"
)
public
interface
MesStorageDetailRecordService
{
/**
* 新增入库明细记录(内部接口,无权限验证)
*
* @param storageDetailRecordCreate 入库明细记录创建对象
* @return 操作结果
*/
@RequestMapping
(
value
=
"/pro/storageDetailRecord/internal"
,
method
=
RequestMethod
.
POST
)
StorageDetailRecordResult
create
(
@RequestBody
StorageDetailRecordCreate
storageDetailRecordCreate
);
}
erp-system/src/main/java/com/topsunit/scanservice/ximai/webapi/dto/StorageDetailRecordCreate.java
0 → 100644
View file @
fa4ec878
package
com
.
topsunit
.
scanservice
.
ximai
.
webapi
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* <p>Title: StorageDetailRecordCreate</p>
* <p>Description: 入库明细记录创建对象</p>
*
* @author generator
* @version V1.0
* @date 2025-10-12
*/
@Data
public
class
StorageDetailRecordCreate
{
/** 工单单别 */
@ApiModelProperty
(
"工单单别"
)
private
String
workOrderType
;
/** 工单单号 */
@ApiModelProperty
(
"工单单号"
)
private
String
workOrderNo
;
/** 箱码 */
@ApiModelProperty
(
"箱码"
)
private
String
boxCode
;
/** 小标签号 */
@ApiModelProperty
(
"小标签号"
)
private
String
labelNo
;
}
erp-system/src/main/java/com/topsunit/scanservice/ximai/webapi/dto/StorageDetailRecordResult.java
0 → 100644
View file @
fa4ec878
package
com
.
topsunit
.
scanservice
.
ximai
.
webapi
.
dto
;
import
lombok.Data
;
/**
* <p>Title: StorageDetailRecordResult</p>
* <p>Description: 入库明细记录返回结果</p>
*
* @author generator
* @version V1.0
* @date 2025-10-12
*/
@Data
public
class
StorageDetailRecordResult
{
/** 状态码 */
private
Integer
code
;
/** 消息 */
private
String
msg
;
/** 数据 */
private
Object
data
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment