Commit 6b963db9 authored by 李驰骋's avatar 李驰骋

ERP接口调用、日志添加

parent 5f8c898d
package com.ximai;
import com.bstek.ureport.console.UReportServlet;
import com.ximai.mes.md.service.IMdItemService;
import com.ximai.mes.pro.service.proWorkOrder.IProWorkorderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
......@@ -10,6 +14,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ImportResource;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.context.request.RequestContextListener;
import springfox.documentation.oas.annotations.EnableOpenApi;
/**
......@@ -21,13 +26,17 @@ import springfox.documentation.oas.annotations.EnableOpenApi;
@EnableFeignClients(basePackages = {"com.ximai"})
@EnableScheduling
@EnableOpenApi
public class RuoYiApplication {
public class RuoYiApplication implements CommandLineRunner {
public static void main(String[] args) {
// System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(RuoYiApplication.class, args);
// System.out.println("MES启动成功\n");
SpringApplication springApplication = new SpringApplication(RuoYiApplication.class);
springApplication.run(args);
}
@Override
public void run(String... args) throws Exception {
}
@Bean
public ServletRegistrationBean urportServlet() {
ServletRegistrationBean bean = new ServletRegistrationBean(new UReportServlet());
......
......@@ -53,6 +53,7 @@ basic.error.request.error=\u670D\u52A1\u5668\u9650\u6D41\u5F02\u5E38\uFF0C\u8BF7
basic.response.success=\u64CD\u4F5C\u6210\u529F
basic.response.fail=\u64CD\u4F5C\u5931\u8D25
basic.data.not.exist=\u6570\u636E\u4E0D\u5B58\u5728
basic.error.repeat.confirm=\u91CD\u590D\u786E\u8BA4
basic.data.disable=\u6570\u636E\u5DF2\u88AB\u7981\u7528
basic.data.deleted=\u6570\u636E\u5DF2\u88AB\u5220\u9664
basic.error.data.exist=\u6570\u636E\u5DF2\u7ECF\u5B58\u5728\uFF01
......
......@@ -53,6 +53,7 @@ basic.error.request.error=Server throttling exception. Please try again later.
basic.response.success=Operation successful.
basic.response.fail=Operation failed.
basic.data.not.exist=Data does not exist.
basic.error.repeat.confirm=Repeat confirm.
basic.data.disable=Data has been disabled.
basic.data.deleted=Data has been deleted.
basic.error.data.exist=Data already exists!
......
......@@ -53,6 +53,7 @@ basic.error.request.error=\u0E02\u0E49\u0E2D\u0E22\u0E01\u0E40\u0E27\u0E49\u0E19
basic.response.success=\u0E1B\u0E0F\u0E34\u0E1A\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E2A\u0E4D\u0E32\u0E40\u0E23\u0E47\u0E08
basic.response.fail=\u0E1B\u0E0F\u0E34\u0E1A\u0E31\u0E15\u0E34\u0E01\u0E32\u0E23\u0E25\u0E49\u0E21\u0E40\u0E2B\u0E25\u0E27
basic.data.not.exist=\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E44\u0E21\u0E48\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48
basic.error.repeat.confirm=\u0E22\u0E37\u0E19\u0E22\u0E31\u0E19
basic.data.disable=\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E16\u0E39\u0E01\u0E1B\u0E34\u0E14\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19
basic.data.deleted=\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E16\u0E39\u0E01\u0E25\u0E1A\u0E41\u0E25\u0E49\u0E27
basic.error.data.exist=\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27!
......
# user
#user
not.null=* \u5FC5\u987B\u586B\u5199
user.jcaptcha.error=\u9A8C\u8BC1\u7801\u9519\u8BEF
user.jcaptcha.expire=\u9A8C\u8BC1\u7801\u5DF2\u5931\u6548
......@@ -22,25 +22,30 @@ user.forcelogout=\u7BA1\u7406\u5458\u5F3A\u5236\u9000\u51FA\uFF0C\u8BF7\u91CD\u6
user.unknown.error=\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55
user.error.not.exist=\u7528\u6237\u4E0D\u5B58\u5728
user.error.error1=\u4E0D\u5141\u8BB8\u64CD\u4F5C\u8D85\u7EA7\u7BA1\u7406\u5458\u7528\u6237
# user error
#user column
user.userName=\u767B\u5F55\u540D
user.nickName=\u7528\u6237\u540D\u79F0
user.email=\u90AE\u7BB1
user.phonenumber=\u624B\u673A\u53F7\u7801
#user.error
user.error.get.token.info=\u83B7\u53D6\u7528\u6237\u4FE1\u606F\u5F02\u5E38
# file
#file
upload.exceed.maxSize=\u4E0A\u4F20\u7684\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u9650\u5236\u7684\u6587\u4EF6\u5927\u5C0F\uFF01\u5141\u8BB8\u7684\u6587\u4EF6\u6700\u5927\u5927\u5C0F\u662F\uFF1A{0}MB\uFF01
upload.filename.exceed.length=\u4E0A\u4F20\u7684\u6587\u4EF6\u540D\u6700\u957F{0}\u4E2A\u5B57\u7B26
# permission
#permission
no.permission=\u60A8\u6CA1\u6709\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.create.permission=\u60A8\u6CA1\u6709\u521B\u5EFA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.update.permission=\u60A8\u6CA1\u6709\u4FEE\u6539\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.delete.permission=\u60A8\u6CA1\u6709\u5220\u9664\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.export.permission=\u60A8\u6CA1\u6709\u5BFC\u51FA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.view.permission=\u60A8\u6CA1\u6709\u67E5\u770B\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
# system.dept
no.create.permission=\u60A8\u6CA1\u6709\u521B\u5EFA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650[{0}]
no.update.permission=\u60A8\u6CA1\u6709\u4FEE\u6539\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650[{0}]
no.delete.permission=\u60A8\u6CA1\u6709\u5220\u9664\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650[{0}]
no.export.permission=\u60A8\u6CA1\u6709\u5BFC\u51FA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650[{0}]
no.view.permission=\u60A8\u6CA1\u6709\u67E5\u770B\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650[{0}]
#system.dept
system.dept.error.error1=\u90E8\u95E8\u505C\u7528\uFF0C\u4E0D\u5141\u8BB8\u65B0\u589E
system.dept.error.error2=\u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u90E8\u95E8\u6570\u636E
# system.role
#system.role
system.role.error.error1=\u4E0D\u5141\u8BB8\u64CD\u4F5C\u8D85\u7EA7\u7BA1\u7406\u5458\u89D2\u8272
system.role.error.error2=\u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u89D2\u8272\u6570\u636E
# basic
#basic
basic.error.repeat.add=\u8BE5\u6570\u636E\u5DF2\u88AB\u6DFB\u52A0\uFF0C\u5982\u9700\u4FEE\u6539\u8BF7\u4F7F\u7528\u7F16\u8F91\u529F\u80FD
basic.error.canNot.delete=\u8BE5\u6570\u636E\u5DF2\u7ECF\u88AB\u5176\u4ED6\u6570\u636E\u5F15\u7528\uFF0C\u4E0D\u80FD\u5220\u9664
basic.error.request.time.limit=\u8BBF\u95EE\u8FC7\u4E8E\u9891\u7E41\uFF0C\u8BF7\u7A0D\u5019\u518D\u8BD5
......@@ -48,16 +53,19 @@ basic.error.request.error=\u670D\u52A1\u5668\u9650\u6D41\u5F02\u5E38\uFF0C\u8BF7
basic.response.success=\u64CD\u4F5C\u6210\u529F
basic.response.fail=\u64CD\u4F5C\u5931\u8D25
basic.data.not.exist=\u6570\u636E\u4E0D\u5B58\u5728
basic.error.repeat.confirm=\u91CD\u590D\u786E\u8BA4
basic.data.disable=\u6570\u636E\u5DF2\u88AB\u7981\u7528
basic.data.deleted=\u6570\u636E\u5DF2\u88AB\u5220\u9664
basic.error.data.exist=\u6570\u636E\u5DF2\u7ECF\u5B58\u5728\uFF01
basic.error.data.not.exist=\u6570\u636E\u4E0D\u5B58\u5728\uFF01
basic.import.error=\u5BFC\u5165\u5931\u8D25\uFF1A{0}
basic.import.error.not.null=\u5BFC\u5165\u6570\u636E\u4E0D\u80FD\u4E3A\u7A7A
basic.excel.error.not.null.DictionaryFormat=\u8BF7\u914D\u7F6E\u5B57\u5178DictionaryFormat\u6CE8\u89E3
basic.excel.error.not.null.StaticDataMappingFormat=\u8BF7\u914D\u7F6E\u6620\u5C04StaticDataMappingFormat\u6CE8\u89E3
basic.error.data.cannot.delete=\u8BE5\u7269\u6599\u6570\u636E\u5DF2\u88AB\u4F7F\u7528\uFF0C\u4E0D\u80FD\u5220\u9664\uFF01
# md.material
#md.material
md.material.data.limit.can.not.delete=\u8BE5\u7269\u6599\u6570\u636E\u5DF2\u88AB\u4F7F\u7528\uFF0C\u4E0D\u80FD\u5220\u9664\uFF01
# pro.request.material
#pro.request.material
pro.request.material.error1=\u76F4\u53D1\u6599\u7533\u8BF7\u6570\u91CF\u8D85\u8FC7\u5DE5\u5355\u7684\u4EFB\u52A1\u6570\u91CF
pro.request.material.error2=\u5012\u51B2\u6599\u7533\u8BF7\u6570\u91CF\u8D85\u8FC7\u5DE5\u5355\u7684\u4EFB\u52A1\u6570\u91CF
pro.request.material.error3=\u7533\u8BF7\u7684\u7269\u6599\u672A\u5168\u90E8\u9886\u6599
......@@ -71,14 +79,14 @@ md.workShop.error.not.exist=\u8F66\u95F4\u4E0D\u5B58\u5728
#md.workStation
md.workStation.error.not.exist=\u5DE5\u4F5C\u4E2D\u5FC3\u4E0D\u5B58\u5728
md.workStation.error.cannot.remove=\u8BE5\u5DE5\u4F5C\u4E2D\u5FC3\u5DF2\u7ECF\u4F7F\u7528\uFF0C\u4E0D\u80FD\u5173\u95ED
# md.workUnit
#md.workUnit
md.workUnit.error.not.exist=\u5DE5\u4F5C\u5355\u5143\u4E0D\u5B58\u5728
md.workUnit.error.not.null=\u5DE5\u4F5C\u5355\u5143\u4E0D\u80FD\u4E3A\u7A7A
md.workUnit.error.bind.not.user=\u672A\u627E\u5230\u7ED1\u5B9A\u7528\u6237
md.workUnit.error.can.not.remove=\u8BE5\u6570\u636E\u88AB\u542F\u7528\u4E0D\u80FD\u5173\u95ED
md.workUnit.error.repeat.bind=\u7528\u6237\u4E0E\u5DE5\u4F5C\u5355\u5143\u5DF2\u7ED1\u5B9A
md.workUnit.error.forbid.bind=\u4E0D\u53EF\u6307\u6D3E\u5F53\u524D\u5DE5\u4F5C\u5355\u5143
# cal
#cal
cal.error.error1=\u4E0D\u5141\u8BB8\u91CD\u590D\u6392\u73ED\u8BA1\u5212\u7F16\u7801\uFF0C\u53CD\u590D\u521B\u5EFA
cal.error.error2=\u7F3A\u5C11\u8F6E\u73ED\u65B9\u5F0F
cal.error.error3=\u8BA1\u5212\u65F6\u95F4\u4E3A\u7A7A
......@@ -100,7 +108,7 @@ cal.error.error18=\u521B\u5EFA\u6570\u636E\u72B6\u6001\u5F02\u5E38
cal.error.error19=\u5DE5\u4F5C\u5355\u5143\u4E3A\u7A7A,\u65E0\u6CD5\u6392\u73ED
cal.error.error20=\u6CA1\u6709\u6307\u5B9A\u653E\u5047\u5BF9\u8C61
cal.error.error21=\u975E\u6CD5\u7684\u66F4\u65B0\u6570\u636E
# pro.tool
#pro.tool
pro.tool.error.error_1=\u5200\u6A21\u7248\u5177\u5E76\u672A\u5168\u90E8\u4E0A\u673A
pro.tool.error.error_4=\u5200\u6A21\u7248\u5177\u5E76\u672A\u5168\u90E8\u4E0A\u673A
pro.tool.error.error_2=\u5200\u6A21\u677F\u8BB0\u5F55\u672A\u7ED1\u5B9A\u5200\u5177
......@@ -136,9 +144,9 @@ pro.tool.error.error26=sn\u7801\u975E\u6CD5,\u8BF7\u68C0\u67E5
pro.tool.error.error27=\u7F3A\u5C11\u5DE5\u5355id,\u65E0\u6CD5\u68C0\u67E5\u5200\u5177
pro.tool.error.error28=\u53EA\u5141\u8BB8\u5F85\u53D1\u5E03\u72B6\u6001\u64CD\u4F5C
pro.tool.error.error29=\u5DE5\u5355\u7F16\u7801\uFF1A{0}\uFF0C\u5DE5\u88C5\u91CF\u5177\uFF1A{1}\uFF0C\u4E0D\u8DB3\u6570\u91CF\uFF1A{2}
# md.process
#md.process
md.process.error.not.exist=\u5DE5\u5E8F\u4E0D\u5B58\u5728
# pro.workOrder
#pro.workOrder
pro.workOrder.error.not.exist=\u5DE5\u5355\u4E0D\u5B58\u5728
pro.workOrder.error.limit.min.quantity=\u5DE5\u5355\u751F\u4EA7\u6570\u91CF\u5FC5\u987B\u5927\u4E8E0
pro.workOrder.error.workOrderNo.exist=\u751F\u4EA7\u5DE5\u5355\u7F16\u53F7\u5DF2\u5B58\u5728
......@@ -151,14 +159,14 @@ pro.workOrder.error.error2=\u5F53\u524D\u751F\u4EA7\u4EFB\u52A1\u5BF9\u5E94\u768
pro.workOrder.error.error3=\u5F53\u524D\u751F\u4EA7\u4EFB\u52A1\u5BF9\u5E94\u7684\u5DE5\u5E8F\u4FE1\u606F\u65E0\u6548
pro.workOrder.error.error4=\u9700\u8981\u5173\u95ED\u7684\u5DE5\u5355,\u5DF2\u7ECF\u5173\u95ED\u6216\u8005\u5DF2\u7ECF\u5B8C\u6210
pro.workOrder.error.error5=\u5DE5\u5355\u5F53\u524D\u72B6\u6001\u5DF2\u5173\u95ED\u6216\u8005\u5DF2\u5B8C\u6210,\u4E0D\u53EF\u91CD\u590D\u5173\u95ED
# pro.material
#pro.material
pro.material.error.not.exist=\u7269\u6599\u4E0D\u5B58\u5728
pro.material.error.error1=\u5DE5\u5355\u7F16\u7801\uFF1A{0} ,\u8BE5\u5DE5\u5355\u672A\u627E\u5230\u751F\u4EA7\u9886\u7528\u8BB0\u5F55
pro.material.error.error2=\u91CD\u590D\u6821\u9A8C
pro.material.error.error3="\u65B0\u589E\u7269\u6599{0}\u5931\u8D25\uFF0C\u7269\u6599\u7F16\u7801\u5DF2\u5B58\u5728
# pro.task
#pro.task
pro.task.error.not.exist=\u672A\u627E\u5230\u4EFB\u52A1\u6570\u636E
# pro.schedule
#pro.schedule
pro.schedule.data.export.file.name=\u751F\u4EA7\u4EFB\u52A1\u6570\u636E
pro.schedule.data.not.exists=\u6392\u4EA7\u4EFB\u52A1\u4E0D\u5B58\u5728
pro.schedule.limit.min.quantity=\u6392\u4EA7\u6570\u91CF\u4E0D\u80FD\u5C0F\u4E8E\u7B49\u4E8E0
......@@ -170,6 +178,7 @@ pro.schedule.limit.to.selfMade.min.quantity=\u8F6C\u81EA\u5236\u6570\u91CF\u5FC5
pro.schedule.error.to.selfMade.quantity.lack=\u8F6C\u81EA\u5236\u5931\u8D25\uFF0C\u8F6C\u81EA\u5236\u6570\u91CF\u4E0D\u8DB3
pro.schedule.error.not.null.startTime=\u5F00\u59CB\u65F6\u95F4\u4E0D\u80FD\u4E3A\u7A7A
pro.schedule.error.not.null.duration=\u751F\u4EA7\u65F6\u957F\u5FC5\u987B\u5927\u4E8E0
pro.schedule.error.not.null.vendor=\u59D4\u5916\u52A0\u5DE5\u5546\u4E0D\u80FD\u4E3A\u7A7A
pro.schedule.limit.min.duration=\u751F\u4EA7\u65F6\u957F\u5FC5\u987B\u5927\u4E8E0
pro.schedule.error.canNot.use.standardTime=\u4E0D\u652F\u6301\u5DE5\u65F6\u5355\u4F4D{0}
pro.schedule.error.cal.error1=\u65E5\u5386\u7ED3\u675F\u65F6\u95F4\u5FC5\u987B\u5927\u4E8E\u5F00\u59CB\u65F6\u95F4
......@@ -177,7 +186,7 @@ pro.schedule.error.not.exist.solution=\u751F\u4EA7\u5DE5\u5355\uFF1A{0}\u751F\u4
pro.schedule.error.fail=\u6392\u4EA7\u5931\u8D25{0},{1},{2}
pro.schedule.error.not.exist.main.task=\u6CA1\u6709\u67E5\u5230\u4E3B\u8981\u6392\u4EA7\u4EFB\u52A1
pro.schedule.error.split.quantity.lack=\u62C6\u5206\u6570\u91CF\u5FC5\u9700\u5C0F\u4E8E\u6392\u4EA7\u6570\u91CF
# pro.feedback
#pro.feedback
pro.feedback.error.not.data=\u672A\u627E\u5230\u62A5\u5DE5\u8BB0\u5F55
pro.feedback.error.repeat.serialNo.report=\u8BE5\u5E8F\u5217\u53F7\u4EFB\u52A1\u5DF2\u62A5\u5DE5
pro.feedback.error.serialNo.not.bind.workOrder=\u5E8F\u5217\u53F7\u4E0D\u5C5E\u6027\u8BE5\u5DE5\u5355\u4EFB\u52A1
......@@ -189,7 +198,7 @@ pro.feedback.error.cannot.delete.last.process=\u6700\u540E\u4E00\u9053\u5DE5\u5E
pro.feedback.error.error1=\u4E0B\u4E00\u9053\u5DE5\u5E8F\u53EF\u64A4\u56DE\u7684\u6570\u91CF\u4E0D\u591F
pro.feedback.error.error2=\u8BF7\u8F93\u5165\u5408\u683C\u54C1\u548C\u4E0D\u826F\u54C1\u6570\u91CF
pro.feedback.error.error3=\u5F53\u524D\u4EFB\u52A1\u5DF2\u7ECF\u5F00\u5DE5\uFF0C\u4E0D\u53EF\u91CD\u590D\u5F00\u5DE5
# qc error
#qc
qc.error.status.finished=\u8BE5\u5F02\u5E38\u6570\u636E\u5DF2\u7ECF\u5B8C\u6210\uFF01
qc.error.error1=\u6765\u6599\u68C0\u9A8C\u5355\u4E0D\u5B58\u5728,iqcCode:{0}
qc.error.error2=\u8D28\u68C0\u5355\u4E0D\u5B58\u5728
......@@ -198,5 +207,5 @@ qc.error.error4=\u68C0\u6D4B\u5355\u7F16\u7801\u5DF2\u5B58\u5728
qc.error.error5=\u5F53\u524D\u5DE5\u5355\u751F\u4EA7\u7684\u4EA7\u54C1\u672A\u914D\u7F6E\u6B64\u7C7B\u578B\u7684\u68C0\u9A8C\u6A21\u677F
qc.error.error6=\u68C0\u6D4B\u9879\u7F16\u53F7\u5DF2\u5B58\u5728
qc.error.error7=\u68C0\u6D4B\u9879\u540D\u79F0\u5DF2\u5B58\u5728
# system.printer
#system.printer
system.printer.error.repeat.bind=\u8BE5\u6253\u5370\u673A\u5DF2\u7ED1\u5B9A\u4E86
\ No newline at end of file
package com.ximai.common.annotation;
import com.ximai.common.enums.BusinessType;
import com.ximai.common.enums.InOutType;
import com.ximai.common.enums.OperatorType;
import java.lang.annotation.*;
/**
* 自定义操作日志记录注解
*
*
*/
@Target({ ElementType.PARAMETER, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ApiLog
{
/**
* 模块
*/
public String title() default "";
/**
* 功能
*/
public BusinessType businessType() default BusinessType.OTHER;
/**
* 操作人类别
*/
public OperatorType operatorType() default OperatorType.MANAGE;
/**
* 调入、调出
*/
public InOutType inOutType() default InOutType.IN;
/**
* 是否保存请求的参数
*/
public boolean isSaveRequestData() default true;
/**
* 是否保存响应的参数
*/
public boolean isSaveResponseData() default true;
}
package com.ximai.common.enums;
/**
* 操作人类别
*
*/
public enum InOutType
{
/**
* 其它
*/
IN,
/**
* 后台用户
*/
OUT,
}
......@@ -8,6 +8,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import cn.hutool.core.util.ObjectUtil;
import com.ximai.common.constant.Constants;
import com.ximai.common.utils.data.StringUtils;
import org.springframework.web.context.request.RequestAttributes;
......@@ -74,7 +75,11 @@ public class ServletUtils
*/
public static HttpServletRequest getRequest()
{
return getRequestAttributes().getRequest();
ServletRequestAttributes requestAttributes = getRequestAttributes();
if(ObjectUtil.isEmpty(requestAttributes)){
return null;
}
return requestAttributes.getRequest();
}
/**
......
......@@ -112,7 +112,7 @@ public class IpUtils
*/
public static byte[] textToNumericFormatV4(String text)
{
if (text.length() == 0)
if (StringUtils.isEmpty(text))
{
return null;
}
......
package com.ximai.framework.aspectj;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.ximai.common.annotation.Log;
import com.ximai.common.core.domain.model.LoginUser;
......@@ -64,11 +65,14 @@ public class LogAspect {
SysOperLog operLog = new SysOperLog();
operLog.setStatus(BusinessStatus.SUCCESS.ordinal());
// 请求的地址
String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
operLog.setOperIp(ip);
String requestURI = ServletUtils.getRequest().getRequestURI();
operLog.setOperUrl(requestURI);
HttpServletRequest request = ServletUtils.getRequest();
String requestURI = "";
if(ObjectUtil.isNotEmpty(request)){
String ip = IpUtils.getIpAddr(request);
operLog.setOperIp(ip);
requestURI = request.getRequestURI();
operLog.setOperUrl(requestURI);
}
// 获取当前的用户
LoginUser loginUser = null;
try {
......@@ -78,7 +82,6 @@ public class LogAspect {
}
} catch (Exception ex) {
log.info("url:" + requestURI + "获取接口用户报错: " + ex.getMessage());
// throw new RuntimeException(ex);
}
......@@ -91,16 +94,16 @@ public class LogAspect {
String methodName = joinPoint.getSignature().getName();
operLog.setMethod(className + "." + methodName + "()");
// 设置请求方式
operLog.setRequestMethod(ServletUtils.getRequest().getMethod());
if(ObjectUtil.isNotEmpty(request)) {
operLog.setRequestMethod(request.getMethod());
}
// 处理设置注解上的参数
getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult);
// 保存数据库
AsyncManager.me().execute(AsyncFactory.recordOper(operLog));
} catch (Exception exp) {
// 记录本地异常日志
log.error("==前置通知异常==");
log.error("异常信息:{}", exp.getMessage());
exp.printStackTrace();
log.error("Log前置通知异常:", exp);
}
}
......
package com.ximai.mes.aspect;
import java.lang.annotation.*;
/**
* 方法扩展处理
*/
public interface IExtendedProcess {
public void process(Object[] args, Object returnResult);
}
package com.ximai.mes.aspect;
import java.lang.annotation.*;
/**
* 方法扩展处理
*/
@Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MethodExtendedProcess {
/**
* 系统参数开关名,不配置为默认开启
* @return
*/
String sysSwitchParam() default "";
/**
* 处理实现类
*
* @return
*/
Class<? extends IExtendedProcess> processClz();
/**
* 是否新开线程
* @return
*/
boolean newThread() default false;
/**
* 是否捕获异常
* 仅对非新开线程有效
* @return
*/
boolean errorCatch() default false;
}
package com.ximai.mes.aspect;
import cn.hutool.core.util.ObjectUtil;
import com.ximai.common.core.domain.AjaxResult;
import com.ximai.common.utils.DictUtils;
import com.ximai.framework.config.ApplicationConfig;
import com.ximai.framework.manager.AsyncManager;
import com.ximai.mes.wm.domain.WmBarcodeConfig;
import com.ximai.mes.wm.service.IWmBarcodeConfigService;
import com.ximai.system.domain.SysConfig;
import com.ximai.system.service.ISysConfigService;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import java.util.List;
import java.util.TimerTask;
@Aspect
@Component
public class MethodExtendedProcessAspect {
private static final Logger log = LoggerFactory.getLogger(MethodExtendedProcessAspect.class);
@Autowired
ApplicationContext applicationContext;
@Autowired
ISysConfigService configService;
/**
* 根据扩展业务配置执行处理方法
* @param joinPoint
* @param extendedProcesses
* @param returnResult
*/
@AfterReturning(pointcut = "@annotation(extendedProcesses)",returning = "returnResult")
public void doAfter(JoinPoint joinPoint, MethodExtendedProcesses extendedProcesses, Object returnResult){
for(MethodExtendedProcess extendedProcess : extendedProcesses.config()){
if(ObjectUtil.isNotEmpty(extendedProcess.sysSwitchParam())){
String val = configService.selectConfigByKey(extendedProcess.sysSwitchParam());
if("0".equals(val)){
return;
}
}
IExtendedProcess process = applicationContext.getBean(extendedProcess.processClz());
ServletRequestAttributes requestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
RequestContextHolder.setRequestAttributes(requestAttributes, true);
if(extendedProcess.newThread()){
AsyncManager.me().execute(new TimerTask() {
@Override
public void run() {
process.process(joinPoint.getArgs(), returnResult);
}
});
}else{
if(extendedProcess.errorCatch()){
try {
process.process(joinPoint.getArgs(), returnResult);
} catch (Exception e){
log.error("扩展处理执行失败,", e);
}
}else{
process.process(joinPoint.getArgs(), returnResult);
}
}
}
}
}
package com.ximai.mes.aspect;
import java.lang.annotation.*;
/**
* 方法扩展处理
*/
@Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MethodExtendedProcesses {
MethodExtendedProcess[] config();
}
package com.ximai.mes.config;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.ximai.common.annotation.ApiLog;
import com.ximai.common.annotation.Log;
import com.ximai.common.enums.BusinessStatus;
import com.ximai.common.enums.HttpMethod;
......@@ -45,11 +47,11 @@ public class ApiLogAspect {
*
* @param joinPoint 切点
*/
@AfterReturning(pointcut = "execution(* com.ximai.mes.restful.*.*(..))", returning = "jsonResult")
public void doAfterReturning(JoinPoint joinPoint, Object jsonResult) {
@AfterReturning(pointcut = "@annotation(apiLog)", returning = "jsonResult")
public void doAfterReturning(JoinPoint joinPoint, ApiLog apiLog, Object jsonResult) {
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
Method method = methodSignature.getMethod();
Log controllerLog = method.getAnnotation(Log.class);
ApiLog controllerLog = method.getAnnotation(ApiLog.class);
ApiOperation apiOperation = method.getAnnotation(ApiOperation.class);
LogInfo logInfo = new LogInfo();
if (controllerLog != null) {
......@@ -67,11 +69,11 @@ public class ApiLogAspect {
* @param joinPoint 切点
* @param e 异常
*/
@AfterThrowing(value = "execution(* com.ximai.mes.restful.*.*(..))", throwing = "e")
public void doAfterThrowing(JoinPoint joinPoint, Exception e) {
@AfterThrowing(value = "@annotation(apiLog)", throwing = "e")
public void doAfterThrowing(JoinPoint joinPoint,ApiLog apiLog, Exception e) {
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
Method method = methodSignature.getMethod();
Log controllerLog = method.getAnnotation(Log.class);
ApiLog controllerLog = method.getAnnotation(ApiLog.class);
ApiOperation apiOperation = method.getAnnotation(ApiOperation.class);
LogInfo logInfo = new LogInfo();
if (controllerLog != null) {
......@@ -83,7 +85,7 @@ public class ApiLogAspect {
handleLog(joinPoint, logInfo, e, null);
}
private LogInfo convertLogInfo(Log controllerLog) {
private LogInfo convertLogInfo(ApiLog controllerLog) {
LogInfo logInfo = new LogInfo();
logInfo.setBusinessType(controllerLog.businessType());
logInfo.setSaveRequestData(controllerLog.isSaveRequestData());
......@@ -98,21 +100,25 @@ public class ApiLogAspect {
SysApiLog operLog = new SysApiLog();
operLog.setStatus(BusinessStatus.SUCCESS.ordinal());
// 请求的地址
String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
operLog.setOperIp(ip);
operLog.setOperUrl(ServletUtils.getRequest().getRequestURI());
HttpServletRequest request = ServletUtils.getRequest();
if(ObjectUtil.isNotEmpty(request)){
String ip = IpUtils.getIpAddr(request);
operLog.setOperIp(ip);
operLog.setOperUrl(request.getRequestURI());
}
if (e != null) {
operLog.setStatus(BusinessStatus.FAIL.ordinal());
operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000));
}
// 设置方法名称
String className = joinPoint.getTarget().getClass().getName();
String className = joinPoint.getSignature().getDeclaringType().getName();
String methodName = joinPoint.getSignature().getName();
operLog.setMethod(className + "." + methodName + "()");
// 设置请求方式
operLog.setRequestMethod(ServletUtils.getRequest().getMethod());
if(ObjectUtil.isNotEmpty(request)) {
operLog.setRequestMethod(request.getMethod());
}
// 处理设置注解上的参数
getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult);
// 保存数据库
......@@ -126,9 +132,7 @@ public class ApiLogAspect {
});
} catch (Exception exp) {
// 记录本地异常日志
log.error("==前置通知异常==");
log.error("异常信息:{}", exp.getMessage());
exp.printStackTrace();
log.error("ApiLog前置通知异常:", exp);
}
}
......@@ -162,14 +166,8 @@ public class ApiLogAspect {
* @throws Exception 异常
*/
private void setRequestValue(JoinPoint joinPoint, SysApiLog operLog) throws Exception {
String requestMethod = operLog.getRequestMethod();
if (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod)) {
String params = argsArrayToString(joinPoint.getArgs());
operLog.setOperParam(params);
} else {
Map<?, ?> paramsMap = (Map<?, ?>) ServletUtils.getRequest().getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
operLog.setOperParam(paramsMap.toString());
}
String params = argsArrayToString(joinPoint.getArgs());
operLog.setOperParam(params);
}
/**
......
package com.ximai.mes.config;
import com.ximai.system.service.ISysConfigService;
import feign.Logger;
import feign.Request;
import feign.RequestInterceptor;
import feign.Retryer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
public class EPConfiguration {
@Autowired
private ISysConfigService configService;
@Bean
public RequestInterceptor headerInterceptor() {
return template -> {
template.header("X-Authentication", "e10adc3949ba59abbe56e057f20f883e ");
template.header("Content-Type", "application/json;charset=UTF-8 ");
};
}
@Bean
@ConditionalOnMissingBean //这里如果不加@ConditionalOnMissingBean那么独立配置是无法生效的,原理在后面补充
public Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
@Bean
Request.Options feignOptions() {
// 设置连接超时时间为2秒,设置读取超时时间为5秒
return new Request.Options(20 * 1000, 50 * 1000);
}
@Bean
public Retryer feignRetryer() {
//最大请求次数为5,初始间隔时间为100ms,下次间隔时间1.5倍递增,重试间最大间隔时间为1s,
return new Retryer.Default();
}
}
......@@ -25,5 +25,6 @@ public class FeignConfiguration implements RequestInterceptor {
requestTemplate.header("Content-type", "application/json;charset=utf-8");
String usernameAndPassword = userName + ":" + passWord;
requestTemplate.header("Authorization", "Basic " + Base64.getEncoder().encodeToString(usernameAndPassword.getBytes()));
}
}
package com.ximai.mes.config;
import com.ximai.mes.remote.config.CustomResponseEntityDecoder;
import com.ximai.system.service.ISysConfigService;
import feign.Logger;
import feign.Request;
import feign.RequestInterceptor;
import feign.Retryer;
import feign.codec.Decoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import java.util.Base64;
......@@ -44,5 +48,9 @@ public class FooConfiguration {
return new Retryer.Default();
}
@Bean
public Decoder decoder(ObjectFactory<HttpMessageConverters> messageConverters){
return new CustomResponseEntityDecoder(messageConverters);
}
}
......@@ -380,7 +380,8 @@ public class ProWorkorderController extends BaseController {
*/
@GetMapping(value = "/setStatus/{workorderId}")
public void setStaus(@PathVariable("workorderId") Long workorderId) {
proWorkorderService.updateProWorkorderStatus(Collections.singletonList(workorderId), WorkorderStatusEnum.PUBLISHED);
ProWorkorder workorder = proWorkorderService.selectWorkorderById(workorderId);
proWorkorderService.updateWorkorderState(workorder, WorkorderStatusEnum.PUBLISHED);
}
@PostMapping(value = "/proofMakeProduction")
......
......@@ -2,6 +2,7 @@ package com.ximai.mes.pro.schedule.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.StopWatch;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ximai.common.exception.ServiceException;
import com.ximai.common.utils.MessageUtils;
......@@ -116,6 +117,9 @@ public class AlgorithmDataSourceImpl implements AlgorithmDataSource {
List<ProWorkorder> list = new ArrayList<>();
list.add(workorder);
scheduleJobGroup.setWorkorderList(list);
if(ObjectUtil.isEmpty(workorder.getRequestDate())){
throw new ServiceException(MessageUtils.message("pro.workOrder.error.not.null.requestDate"));
}
LocalDateTime recentDate = list.stream().map(s -> DateUtil.toLocalDateTime(s.getRequestDate())).min(Comparator.comparing(LocalDateTime::toLocalDate)).get();
scheduleJobGroup.setQuantity(workorderScheduleParamsMap.get(workorder.getWorkorderId()).getScheduleQuantity());
scheduleJobGroup.setDemandDate(recentDate);
......
......@@ -20,11 +20,11 @@ import com.ximai.common.utils.data.DataUtil;
import com.ximai.common.utils.data.DateUtils;
import com.ximai.common.utils.data.ExceptionUtil;
import com.ximai.common.utils.data.StringUtils;
import com.ximai.mes.aspect.MethodExtendedProcess;
import com.ximai.mes.aspect.MethodExtendedProcesses;
import com.ximai.mes.constant.*;
import com.ximai.mes.md.domain.MdItem;
import com.ximai.mes.md.domain.MdProductBom;
import com.ximai.mes.md.dto.MdItemWarehouseCreate;
import com.ximai.mes.md.dto.MdItemWarehouseDto;
import com.ximai.mes.md.mapper.MdItemMapper;
import com.ximai.mes.md.service.IMdBaseInfoService;
import com.ximai.mes.md.service.IMdItemService;
......@@ -53,6 +53,8 @@ import com.ximai.mes.pro.service.task.IProTaskService;
import com.ximai.mes.pro.service.task.IProTaskWorkunitService;
import com.ximai.mes.remote.ErpService;
import com.ximai.mes.remote.dto.*;
import com.ximai.mes.remote.process.FinishStockInCreateProcess;
import com.ximai.mes.remote.process.WorkorderStateUpdateProcess;
import com.ximai.mes.tm.domain.TmTool;
import com.ximai.mes.tm.mapper.TmToolMapper;
import com.ximai.mes.wm.domain.WmIssueHeader;
......@@ -76,7 +78,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
import static com.ximai.common.constant.Constants.DateConstant.DATETIME_PATTERN;
......@@ -988,12 +989,6 @@ public class ProWorkorderServiceImpl implements IProWorkorderService {
proWorkorder.setEpItemCode(proWorkorder.getProductCode());
}
}
proWorkorder.setQuantityProduced(BigDecimal.ZERO);
proWorkorder.setQuantityQualify(BigDecimal.ZERO);
proWorkorder.setQuantityUnqualify(BigDecimal.ZERO);
proWorkorder.setQuantityScheduled(BigDecimal.ZERO);
proWorkorder.setBatchSerial(1);
int i = this.insertProWorkorder(proWorkorder);
//新增生产工单BOM表
......@@ -1073,6 +1068,11 @@ public class ProWorkorderServiceImpl implements IProWorkorderService {
}
proWorkorder.setStatus(WorkorderStatusEnum.PUBLISHED.getValue());
proWorkorder.createAction();
proWorkorder.setQuantityProduced(BigDecimal.ZERO);
proWorkorder.setQuantityQualify(BigDecimal.ZERO);
proWorkorder.setQuantityUnqualify(BigDecimal.ZERO);
proWorkorder.setQuantityScheduled(BigDecimal.ZERO);
proWorkorder.setBatchSerial(1);
int r = proWorkorderMapper.insertProWorkorder(proWorkorder);
//未设置生产版本时自动根据产品编号匹配最新生产版本
if(ObjectUtil.isEmpty(proWorkorder.getProductionSolutionId())){
......@@ -1263,22 +1263,6 @@ public class ProWorkorderServiceImpl implements IProWorkorderService {
return i;
}
/**
* 查询生产工单
*
* @param workorderIds 生产工单主键
* @return 生产工单
*/
@Override
public void updateProWorkorderStatus(List<Long> workorderIds, WorkorderStatusEnum workOrderStatusEnum) {
for (Long id : workorderIds) {
ProWorkorder proWorkorder = proWorkorderMapper.selectWorkorderById(id);
proWorkorder.setStatus(workOrderStatusEnum.getValue());
this.updateProWorkorder(proWorkorder);
}
}
@Override
public List<ProWorkOrderProcessToolLoseVo> checkToolNum(Long[] workOrderIds) {
ExceptionUtil.checkTrueThrowException(CollectionUtil.isEmpty(Arrays.asList(workOrderIds)), MessageUtils.message("pro.tool.error.error27"));
......@@ -1315,7 +1299,8 @@ public class ProWorkorderServiceImpl implements IProWorkorderService {
}
});
}
//修改工单状态
proWorkorderService.updateWorkorderState(proWorkorder, WorkorderStatusEnum.PUBLISHED);
}
......@@ -1329,8 +1314,6 @@ public class ProWorkorderServiceImpl implements IProWorkorderService {
throw new ServiceException(buffer.toString());
}
//修改工单状态
proWorkorderService.updateProWorkorderStatus(Arrays.asList(workOrderIds), WorkorderStatusEnum.PUBLISHED);
return rst;
}
......@@ -1819,6 +1802,9 @@ public class ProWorkorderServiceImpl implements IProWorkorderService {
}
workorderId = dbList.get(0).getWorkorderId();
}
if(ObjectUtil.isEmpty(workorderId)){
return;
}
//保存BOM明细
List<ProWorkorderBomErpDto> detailList = s.getWorkorderBomList();
ProWorkOrderBom workOrderBomQuery = new ProWorkOrderBom();
......@@ -1855,4 +1841,29 @@ public class ProWorkorderServiceImpl implements IProWorkorderService {
throw new ServiceException(rst.getErrorMessage());
}
}
@MethodExtendedProcesses(config ={
@MethodExtendedProcess(sysSwitchParam = "erp.finish.stockin.create.enable", processClz = FinishStockInCreateProcess.class,
newThread = true, errorCatch = true)
})
@Override
public void reportUpdateProWorkorder(ProWorkorder workorder, BigDecimal qualifyQuantity, BigDecimal unQualifyQuantity) {
workorder.setQuantityQualify(workorder.getQuantityQualify().add(qualifyQuantity));
workorder.setQuantityUnqualify(workorder.getQuantityUnqualify().add(unQualifyQuantity));
workorder.setQuantityProduced(DataUtil.getNormalData(workorder.getQuantityProduced()).add(qualifyQuantity));
if(workorder.getQuantityProduced().compareTo(workorder.getQuantity())>=0){
proWorkorderService.updateWorkorderState(workorder, WorkorderStatusEnum.FINISHED);
}
proWorkorderService.updateProWorkorder(workorder);
}
@MethodExtendedProcesses(config ={
@MethodExtendedProcess(sysSwitchParam = "erp.workorder.state.update", processClz = WorkorderStateUpdateProcess.class,
newThread = true, errorCatch = true)
})
@Override
public void updateWorkorderState(ProWorkorder workorder, WorkorderStatusEnum workorderStatusEnum){
workorder.setStatus(workorderStatusEnum.getValue());
proWorkorderService.updateProWorkorder(workorder);
}
}
......@@ -5,7 +5,6 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.StopWatch;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ximai.common.constant.UserConstants;
import com.ximai.common.exception.ServiceException;
import com.ximai.common.utils.MessageUtils;
import com.ximai.common.utils.SecurityUtils;
import com.ximai.common.utils.data.DataUtil;
......@@ -815,47 +814,29 @@ public class ProTaskServiceImpl implements IProTaskService {
}
}
}
if (workorderId != null && workorderId != 0) {
// 查看当前工单已报工数量
if (proWorkorders.size() == 1) {
if (feedbackQualityDouConst >= task.getQuantity().doubleValue() || taskQuantityWaitDouConst == 0) {
taskWorkunit.setStatus(FINISHED.getStatus());
}
// 判断已经报工数和未报工数
if (execQuantityQualifySumConst >= 0) {
// 第一次进入
if (maxWorkunitQuantityConst > execQuantityQualifySumConst) {
// 工单大于已报工数量 工单减去已报工数量
feedbackQualityVal = new BigDecimal(maxWorkunitQuantityConst - execQuantityQualifySumConst);
// 报工数量大于可报工数量取报工数量
if (feedbackQualityVal.doubleValue() > feedbackQualityDouConst) {
feedbackQualityVal = feedbackQualifyConst;
}
} else {
feedbackQualityVal = BigDecimal.valueOf(Math.min(maxWorkunitQuantityConst, feedbackQualityDouConst));
}
}
quantityWaitVal = taskQuantityWaitConst.subtract(feedbackQualityVal);
}
} else {
// 工单数量数量小于或者等于已报工数量 报工数量 大于等待数量 否则
double v1 = maxWorkunitQuantityConst - execQuantityQualifySumConst;
if (feedbackQualityDouConst >= v1) {
// 查看当前工单已报工数量
if (proWorkorders.size() == 1) {
if (feedbackQualityDouConst >= task.getQuantity().doubleValue() || taskQuantityWaitDouConst == 0) {
taskWorkunit.setStatus(FINISHED.getStatus());
feedbackQualityVal = BigDecimal.valueOf(v1);
}
if (feedbackQualityDouConst > taskQuantityWaitDouConst) {
feedbackQualityVal = taskQuantityWaitConst;
// 判断已经报工数和未报工数
if (execQuantityQualifySumConst >= 0) {
// 第一次进入
if (maxWorkunitQuantityConst > execQuantityQualifySumConst) {
// 工单大于已报工数量 工单减去已报工数量
feedbackQualityVal = new BigDecimal(maxWorkunitQuantityConst - execQuantityQualifySumConst);
// 报工数量大于可报工数量取报工数量
if (feedbackQualityVal.doubleValue() > feedbackQualityDouConst) {
feedbackQualityVal = feedbackQualifyConst;
}
} else {
feedbackQualityVal = BigDecimal.valueOf(Math.min(maxWorkunitQuantityConst, feedbackQualityDouConst));
}
}
quantityWaitVal = taskQuantityWaitConst.subtract(feedbackQualityVal);
}
task.setQuantityWait(quantityWaitVal.doubleValue() < 0D ? BigDecimal.ZERO : quantityWaitVal);
task.setQuantityProduced(DataUtil.getNormalData(task.getQuantityProduced()).add(feedbackQualityVal));
task.setQuantityQualify(DataUtil.getNormalData(task.getQuantityQualify()).add(feedbackQualityVal));
......@@ -878,7 +859,6 @@ public class ProTaskServiceImpl implements IProTaskService {
feedback.setWorkunitId(taskWorkunit.getWorkunitId());
feedback.setNickName(sysUserMapper.selectUserById(SecurityUtils.getUserId()).getNickName());
//暂停更新记录
if (Objects.equals(taskWorkunit.getStatus(), FINISHED.getStatus())) {
proStartWorkService.closeObj(feedback);
......@@ -905,26 +885,16 @@ public class ProTaskServiceImpl implements IProTaskService {
//如果为最后一道工序,回写工单数量
if (StringUtils.isEmpty(nextTask)) {
feedbackWorkorder.forEach((k, v) -> {
ProWorkorder workorder = v.getWorkorder();
workorder.setQuantityQualify(workorder.getQuantityQualify().add(v.getQuantityQualify()));
workorder.setQuantityUnqualify(workorder.getQuantityUnqualify().add(v.getQuantityUnqualify()));
workorder.setQuantityProduced(DataUtil.getNormalData(workorder.getQuantityProduced()).add(v.getQuantityQualify()));
proWorkorderService.updateProWorkorder(workorder);
proWorkorderService.reportUpdateProWorkorder(v.getWorkorder(), v.getQuantityQualify(), v.getQuantityUnqualify());
});
}
}
proTaskWorkunitService.updateProTaskWorkunit(taskWorkunit);
//打印记录
if ("1".equals(feedback.getPrintContents())) {
proFdQrcodePrintRecordService.insertProFdQrcodePrintRecordfeedback(feedback);
}
//扣减刀具寿命
proTaskWorkunitService.updateProTaskWorkunitlife(feedback);
//报工满足条件下架刀模版具
tmToolMachinesService.feedbackToolDismount(taskWorkunit);
return response;
}
@Transactional
@Override
public void changeStatus(ProTask proTask) {
......@@ -948,20 +918,12 @@ public class ProTaskServiceImpl implements IProTaskService {
proTasks = proTaskMapper.selectProTaskVoList(taskWorkunitId, task.getArrangeCode());
task = proTasks.get(0);
proTaskWorkunit.setStatus(proTask.getStatus());
proTaskWorkunitService.updateProTaskWorkunit(proTaskWorkunit);
if (proTask.getStatus().equals(TaskStatusEnum.BEGINNING.getStatus())) {
//设置工单状态为生产中
List<ProWorkorder> orderList = proWorkorderMapper.selectProWorkorderJoinTask(new QueryWrapper<ProWorkorder>().eq("t2.task_id", proTask.getTaskId()));
for (ProWorkorder proWorkorder : orderList) {
if (WorkorderStatusEnum.ISSUED.getValue().equals(proWorkorder.getStatus())) {
proWorkorder.setStatus(WorkorderStatusEnum.PRODUCING.getValue());
Long workorderId = proWorkorder.getWorkorderId();
proWorkorderService.updateProWorkorderStatus(Collections.singletonList(workorderId), WorkorderStatusEnum.PRODUCING);
}
}
proTaskWorkunit.setStatus(proTask.getStatus());
proTaskWorkunitService.updateProTaskWorkunitState(proTaskWorkunit, TaskStatusEnum.get(proTask.getStatus()));
}
if (proTask.getStatus().equals(TaskStatusEnum.FINISHED.getStatus())) {
......
......@@ -3,24 +3,20 @@ package com.ximai.mes.pro.service.impl.task;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ximai.common.core.domain.BaseEntity;
import com.ximai.common.core.domain.entity.SysUser;
import com.ximai.common.exception.ServiceException;
import com.ximai.common.utils.MessageUtils;
import com.ximai.common.utils.data.DataUtil;
import com.ximai.common.utils.data.ExceptionUtil;
import com.ximai.common.utils.data.StringUtils;
import com.ximai.mes.aspect.MethodExtendedProcess;
import com.ximai.mes.aspect.MethodExtendedProcesses;
import com.ximai.mes.constant.*;
import com.ximai.mes.md.domain.MdWorkunit;
import com.ximai.mes.md.mapper.MdWorkunitMapper;
import com.ximai.mes.md.service.IMdWorkunitService;
import com.ximai.mes.pro.domain.ProArrange;
import com.ximai.mes.pro.domain.ProFeedback;
import com.ximai.mes.pro.domain.proWorkOrder.ProWorkorder;
import com.ximai.mes.pro.domain.task.*;
import com.ximai.mes.pro.domain.vo.ProTaskVo;
import com.ximai.mes.pro.domain.vo.task.ProTaskWorkunitQuery;
import com.ximai.mes.pro.domain.vo.task.TaskWorkunitOutsourceSplitParam;
import com.ximai.mes.pro.domain.vo.task.TaskWorkunitToOutsourceParam;
......@@ -28,11 +24,13 @@ import com.ximai.mes.pro.domain.vo.task.TaskWorkunitToSelfMadeParam;
import com.ximai.mes.pro.dto.task.ProTaskWorkunitConvertRecordCreate;
import com.ximai.mes.pro.mapper.ProArrangeMapper;
import com.ximai.mes.pro.mapper.ProFeedbackMapper;
import com.ximai.mes.pro.mapper.proWorkOrder.ProWorkorderMapper;
import com.ximai.mes.pro.mapper.task.ProTaskWorkunitMapper;
import com.ximai.mes.pro.service.IProAllocationMaterialService;
import com.ximai.mes.pro.service.IProMaterialRequestService;
import com.ximai.mes.pro.service.proWorkOrder.IProWorkorderService;
import com.ximai.mes.pro.service.task.*;
import com.ximai.mes.remote.process.PurchasingRequisitionCreateProcess;
import com.ximai.mes.tm.domain.TmTool;
import com.ximai.mes.tm.domain.TmToolMachines;
import com.ximai.mes.tm.domain.TmToolRequestUseItem;
......@@ -48,7 +46,6 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
import static com.ximai.mes.constant.WorkorderStatusEnum.CLOSE;
......@@ -70,7 +67,7 @@ public class ProTaskWorkunitServiceImpl implements IProTaskWorkunitService {
@Autowired
private IProTaskWorkunitService proTaskWorkunitService;
@Resource
private ProArrangeMapper proArrangeMapper;
private ProWorkorderMapper proWorkorderMapper;
@Resource
private SysUserMapper sysUserMapper;
......@@ -189,6 +186,22 @@ public class ProTaskWorkunitServiceImpl implements IProTaskWorkunitService {
return proTaskWorkunitMapper.updateProTaskWorkunit(proTaskWorkunit);
}
@Override
public void updateProTaskWorkunitState(ProTaskWorkunit proTaskWorkunit, TaskStatusEnum taskStatusEnum) {
if(taskStatusEnum == TaskStatusEnum.BEGINNING){
//判断是否设置工单开工
List<ProWorkorder> orderList = proWorkorderMapper.selectProWorkorderJoinTask(new QueryWrapper<ProWorkorder>().eq("t2.task_id", proTaskWorkunit.getTaskId()));
for (ProWorkorder proWorkorder : orderList) {
if (WorkorderStatusEnum.ISSUED.getValue().equals(proWorkorder.getStatus())) {
proWorkorder.setStatus(WorkorderStatusEnum.PRODUCING.getValue());
proWorkorderService.updateWorkorderState(proWorkorder, WorkorderStatusEnum.PRODUCING);
}
}
}
proTaskWorkunit.setStatus(taskStatusEnum.getStatus());
this.updateProTaskWorkunit(proTaskWorkunit);
}
/**
* 修改任务工作单元
*
......@@ -412,6 +425,7 @@ public class ProTaskWorkunitServiceImpl implements IProTaskWorkunitService {
query.le(proTaskWorkunit.getScheduleEndDateTo() != null, "ptw.schedule_start_date", proTaskWorkunit.getScheduleEndDateTo());
query.eq(StringUtils.isNotEmpty(proTaskWorkunit.getArrangeCode()), "t.arrange_code", proTaskWorkunit.getArrangeCode());
query.eq(proTaskWorkunit.getOutsourced()!=null, "ptw.outsourced", proTaskWorkunit.getOutsourced());
query.gt("ptw.quantity",0);
query.orderByAsc("schedule_start_date");
List<ProTaskWorkunit> list = proTaskWorkunitService.selectTaskWorkUnitJoinTask(query);
return list;
......@@ -521,9 +535,21 @@ public class ProTaskWorkunitServiceImpl implements IProTaskWorkunitService {
if(taskWorkunit.getVendorId()==null){
throw new ServiceException(MessageUtils.message("pro.schedule.error.not.null.vendor"));
}
taskWorkunit.setOutsourced(1);
taskWorkunit.setStatus(TaskStatusEnum.BEGINNING.getStatus());
this.updateProTaskWorkunit(taskWorkunit);
if(ObjectUtil.equal(taskWorkunit.getOutsourced(), 1)){
throw new ServiceException(MessageUtils.message("basic.error.repeat.confirm"));
}
proTaskWorkunitService.outsourceConfirm(taskWorkunit);
});
}
@MethodExtendedProcesses(config ={
@MethodExtendedProcess(sysSwitchParam = "erp.purchasing.requisition.create.enable", processClz = PurchasingRequisitionCreateProcess.class,
newThread = true, errorCatch = true)
})
@Override
public void outsourceConfirm(ProTaskWorkunit taskWorkunit) {
taskWorkunit.setOutsourced(1);
this.updateProTaskWorkunit(taskWorkunit);
this.updateProTaskWorkunitState(taskWorkunit, TaskStatusEnum.BEGINNING);
}
}
......@@ -16,6 +16,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
......@@ -91,6 +92,19 @@ public interface IProWorkorderService {
*/
int insertProWorkorderVo(ProWorkorderVo proWorkorderVo);
/**
* 生产完工,更新工单数量信息
*
* @param proWorkorder 生产工单
* @param qualifyQuantity 完工数量
* @param unQualifyQuantity 不合格数量
* @return 结果
*/
void reportUpdateProWorkorder(ProWorkorder proWorkorder, BigDecimal qualifyQuantity, BigDecimal unQualifyQuantity);
void updateWorkorderState(ProWorkorder workorder, WorkorderStatusEnum workorderStatusEnum);
/**
* 修改生产工单
*
......@@ -132,15 +146,6 @@ public interface IProWorkorderService {
*/
int updateProWorkorderWithBomAndProcess(ProWorkorderVo proWorkorderVo);
/**
* 修改生产工单方法
*
* @param workorderId 生产工单主键 status 工单状态
* @return 生产工单
*/
void updateProWorkorderStatus(List<Long> workorderId, WorkorderStatusEnum workOrderStatusEnum);
/**
* 工单工装齐套检查
*
......
package com.ximai.mes.pro.service.task;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ximai.mes.constant.TaskStatusEnum;
import com.ximai.mes.pro.domain.ProFeedback;
import com.ximai.mes.pro.domain.proWorkOrder.ProWorkorder;
import com.ximai.mes.pro.domain.task.ProTaskWorkunit;
......@@ -68,6 +69,14 @@ public interface IProTaskWorkunitService {
*/
int updateProTaskWorkunit(ProTaskWorkunit proTaskWorkunit);
/**
* 修改任务工作单元状态
*
* @param proTaskWorkunit 任务工作单元
* @return 结果
*/
void updateProTaskWorkunitState(ProTaskWorkunit proTaskWorkunit, TaskStatusEnum taskStatusEnum);
/**
* 修改任务工作单元排产时间、工作单元
*
......@@ -154,4 +163,10 @@ public interface IProTaskWorkunitService {
*/
void outsourceConfirm(List<Long> taskWorkunitIds);
/**
* 委外确认
* @param taskWorkunit
*/
void outsourceConfirm(ProTaskWorkunit taskWorkunit);
}
package com.ximai.mes.remote;
import com.ximai.common.annotation.Log;
import com.ximai.common.annotation.ApiLog;
import com.ximai.common.enums.BusinessType;
import com.ximai.common.enums.InOutType;
import com.ximai.mes.remote.dto.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
......@@ -15,60 +16,60 @@ import java.util.List;
@FeignClient(value = "erp-service", url = "${remote.erp.url}")
public interface ErpService {
@Log(businessType = BusinessType.QUERY)
@ApiLog(businessType = BusinessType.QUERY, inOutType = InOutType.OUT)
@ApiOperation(value = "查询ERP供应商")
@PostMapping(value = "/purma/getPurmaList")
ErpResponseResult<List<MdVendorErpDto>> getVendorList(MdVendorErpQuery vendorErpQuery);
@Log(businessType = BusinessType.QUERY)
@ApiLog(businessType = BusinessType.QUERY, inOutType = InOutType.OUT)
@ApiOperation(value = "查询ERP客户")
@PostMapping(value = "/copma/getCopmaList")
ErpResponseResult<List<MdClientErpDto>> getClientList(MdClientErpQuery clientErpQuery);
@Log(businessType = BusinessType.QUERY)
@ApiLog(businessType = BusinessType.QUERY, inOutType = InOutType.OUT)
@ApiOperation(value = "查询ERP仓库")
@PostMapping(value = "/cmsmc/getCmsmcList")
ErpResponseResult<List<WmWarehouseErpDto>> getWarehouseList(WmWarehouseErpQuery warehouseErpQuery);
@Log(businessType = BusinessType.QUERY)
@ApiLog(businessType = BusinessType.QUERY, inOutType = InOutType.OUT)
@ApiOperation(value = "查询ERP物料")
@PostMapping(value = "/invmb/getInvmbList")
ErpResponseResult<List<MdItemErpDto>> getItemList(MdItemErpQuery itemErpQuery);
@Log(businessType = BusinessType.QUERY)
@ApiLog(businessType = BusinessType.QUERY, inOutType = InOutType.OUT)
@ApiOperation(value = "查询工单")
@PostMapping(value = "/mocta/getMoctaList")
ErpResponseResult<List<ProWorkorderErpDto>> getWorkorderList(ProWorkorderErpQuery workorderErpQuery);
@Log(businessType = BusinessType.UPDATE)
@ApiLog(businessType = BusinessType.UPDATE, inOutType = InOutType.OUT)
@ApiOperation(value = "工单同步标识")
@PostMapping(value = "/mocta/syncMark")
ErpResponseResult<Object> workorderSyncMark(ProWorkorderSyncMarkUpdate syncMarkUpdate);
@Log(businessType = BusinessType.UPDATE)
@ApiLog(businessType = BusinessType.UPDATE, inOutType = InOutType.OUT)
@ApiOperation(value = "物料同步标识")
@PostMapping(value = "/invmb/syncMark")
ErpResponseResult<Object> materialSyncMark(MdItemSyncMarkUpdate syncMarkUpdate);
@Log(businessType = BusinessType.UPDATE)
@ApiLog(businessType = BusinessType.UPDATE, inOutType = InOutType.OUT)
@ApiOperation(value = "工单状态更新")
@PostMapping(value = "/mocta/updateState")
ErpResponseResult<Object> updateState(ProWorkorderSyncMarkUpdate syncMarkUpdate);
ErpResponseResult<Object> updateWorkorderState(ProWorkorderStateUpdate stateUpdate);
@Log(businessType = BusinessType.UPDATE)
@ApiLog(businessType = BusinessType.UPDATE, inOutType = InOutType.OUT)
@ApiOperation(value = "请购单创建")
@PostMapping(value = "/purta/create")
ErpResponseResult<Object> purchasingRequisitionCreate(ProWorkorderSyncMarkUpdate syncMarkUpdate);
ErpResponseResult<Object> purchasingRequisitionCreate(PurchasingRequisitionCreate create);
@Log(businessType = BusinessType.UPDATE)
@ApiLog(businessType = BusinessType.UPDATE, inOutType = InOutType.OUT)
@ApiOperation(value = "完工入库创建")
@PostMapping(value = "/moctf/create")
ErpResponseResult<Object> finishStockInCreate(ProWorkorderSyncMarkUpdate syncMarkUpdate);
ErpResponseResult<Object> finishStockInCreate(FinishStockInCreate create);
}
package com.ximai.mes.remote.config;
import com.ximai.common.exception.ServiceException;
import com.ximai.mes.remote.dto.ErpResponseResult;
import feign.FeignException;
import feign.Response;
import feign.codec.Decoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.SmartInitializingSingleton;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.support.ResponseEntityDecoder;
import org.springframework.cloud.openfeign.support.SpringDecoder;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.lang.reflect.Type;
@Component
public class CustomResponseEntityDecoder extends SpringDecoder {
public CustomResponseEntityDecoder(ObjectFactory<HttpMessageConverters> messageConverters) {
super(messageConverters);
}
@Override
public Object decode(Response response, Type type) throws IOException, FeignException {
Object obj = super.decode(response, type);
if(obj instanceof ErpResponseResult){
ErpResponseResult result = (ErpResponseResult)obj;
if(!result.isSuccess()){
throw new ServiceException("api error:"+result.getErrorMessage());
}
}
return obj;
}
}
package com.ximai.mes.remote.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* 完工入库 FinishStockInCreate
*
* @date 2024-10-25
*/
@Data
public class FinishStockInCreate
{
@ApiModelProperty("入库单号")
@JsonProperty("tf002")
private String stockInNo;
@ApiModelProperty("备注")
@JsonProperty("tf005")
private String remark;
@ApiModelProperty("明细")
private List<FinishStockInCreateDetail> details;
}
package com.ximai.mes.remote.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 完工入库 FinishStockInCreate
*
* @date 2024-10-25
*/
@Data
public class FinishStockInCreateDetail
{
@ApiModelProperty("入库单号")
@JsonProperty("tg002")
private String stockInNo;
@ApiModelProperty("入库数量")
@JsonProperty("tg011")
private BigDecimal inQuantity;
@ApiModelProperty("工单单别")
@JsonProperty("tg014")
private String workorderType;
@ApiModelProperty("工单单号")
@JsonProperty("tg015")
private String workorderCode;
@ApiModelProperty("验收数量")
@JsonProperty("tg013")
private BigDecimal checkQuantity;
}
package com.ximai.mes.remote.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 工单对象 ProWorkorderErpQuery
*
* @date 2024-10-18
*/
@Data
public class ProWorkorderStateUpdate
{
@ApiModelProperty("工单单别")
@JsonProperty("ta001")
private String workorderType;
@ApiModelProperty("工单单号")
@JsonProperty("ta002")
private String workorderCode;
/**
* 生产中:3
* 关闭:y
*/
@ApiModelProperty("ERP工单状态")
@JsonProperty("ta011")
private String state;
}
package com.ximai.mes.remote.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 物料对象 MdItemErpQuery
*
* @date 2024-10-25
*/
@Data
public class PurchasingRequisitionCreate
{
@ApiModelProperty("工单类型")
@JsonProperty("workorderType")
private String workorderType;
@ApiModelProperty("工单号")
@JsonProperty("workorderCode")
private String workorderCode;
@ApiModelProperty("请购单号")
@JsonProperty("ta002")
private String requisitionCode;
@ApiModelProperty("数量合计")
@JsonProperty("ta011")
private BigDecimal totalQuantity;
@ApiModelProperty("明细")
private List<PurchasingRequisitionDetailCreate> details;
}
package com.ximai.mes.remote.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 物料对象 MdItemErpQuery
*
* @date 2024-10-25
*/
@Data
public class PurchasingRequisitionDetailCreate
{
@ApiModelProperty("需求日期")
@JsonProperty("tb011")
private String requestDate;
@ApiModelProperty("委外加工数量")
@JsonProperty("udf11")
private String quantity;
@ApiModelProperty("委外工艺")
@JsonProperty("udf12")
private String processName;
}
package com.ximai.mes.remote.process;
import com.ximai.mes.aspect.IExtendedProcess;
import com.ximai.mes.pro.domain.proWorkOrder.ProWorkorder;
import com.ximai.mes.remote.ErpService;
import com.ximai.mes.remote.dto.FinishStockInCreate;
import com.ximai.mes.remote.dto.FinishStockInCreateDetail;
import com.ximai.system.strategy.AutoCodeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Component
public class FinishStockInCreateProcess implements IExtendedProcess {
@Autowired
ErpService erpService;
@Autowired
private AutoCodeUtil autoCodeUtil;
@Override
public void process(Object[] args, Object returnResult) {
ProWorkorder workorder = (ProWorkorder)args[0];
BigDecimal qualifyQuantity = (BigDecimal)args[1];
String requestCode = autoCodeUtil.genSerialCode("ERP_FINISH_STOCK_IN","");
FinishStockInCreate create = new FinishStockInCreate();
create.setStockInNo(requestCode);
List<FinishStockInCreateDetail> details = new ArrayList<>();
FinishStockInCreateDetail detail = new FinishStockInCreateDetail();
detail.setStockInNo(requestCode);
detail.setWorkorderType(workorder.getWorkorderType());
detail.setWorkorderCode(workorder.getWorkorderCode());
detail.setCheckQuantity(qualifyQuantity);
detail.setInQuantity(qualifyQuantity);
details.add(detail);
create.setDetails(details);
erpService.finishStockInCreate(create);
}
}
package com.ximai.mes.remote.process;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ximai.mes.aspect.IExtendedProcess;
import com.ximai.mes.pro.domain.proWorkOrder.ProWorkorder;
import com.ximai.mes.pro.domain.task.ProTask;
import com.ximai.mes.pro.domain.task.ProTaskWorkunit;
import com.ximai.mes.pro.mapper.proWorkOrder.ProWorkorderMapper;
import com.ximai.mes.pro.service.task.IProTaskService;
import com.ximai.mes.remote.ErpService;
import com.ximai.mes.remote.dto.PurchasingRequisitionCreate;
import com.ximai.mes.remote.dto.PurchasingRequisitionDetailCreate;
import com.ximai.system.strategy.AutoCodeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class PurchasingRequisitionCreateProcess implements IExtendedProcess {
@Autowired
ErpService erpService;
@Autowired
IProTaskService taskService;
@Autowired
ProWorkorderMapper proWorkorderMapper;
@Autowired
private AutoCodeUtil autoCodeUtil;
@Override
public void process(Object[] args, Object returnResult) {
ProTaskWorkunit taskWorkunit = (ProTaskWorkunit)args[0];
ProTask task = taskService.selectProTaskByTaskId(taskWorkunit.getTaskId());
QueryWrapper<ProWorkorder> workorderQuery = new QueryWrapper<>();
workorderQuery.eq("t2.task_id", task.getTaskId());
List<ProWorkorder> workorderList = proWorkorderMapper.selectProWorkorderJoinTask(workorderQuery);
PurchasingRequisitionCreate create = new PurchasingRequisitionCreate();
String requestCode = autoCodeUtil.genSerialCode("ERP_PURCHASING_REQUISITION","");
if(workorderList.size()>0){
create.setWorkorderType(workorderList.get(0).getWorkorderType());
create.setWorkorderCode(workorderList.get(0).getWorkorderCode());
}
create.setRequisitionCode(requestCode);
create.setTotalQuantity(taskWorkunit.getQuantity());
List<PurchasingRequisitionDetailCreate> details = new ArrayList<>();
PurchasingRequisitionDetailCreate detailCreate = new PurchasingRequisitionDetailCreate();
detailCreate.setQuantity(taskWorkunit.getQuantity()+"");
detailCreate.setProcessName(task.getProcessName());
detailCreate.setRequestDate(DateUtil.format(taskWorkunit.getScheduleEndDate(),"yyyyMMdd"));
details.add(detailCreate);
create.setDetails(details);
erpService.purchasingRequisitionCreate(create);
}
}
package com.ximai.mes.remote.process;
import com.ximai.mes.aspect.IExtendedProcess;
import com.ximai.mes.constant.WorkorderStatusEnum;
import com.ximai.mes.pro.domain.proWorkOrder.ProWorkorder;
import com.ximai.mes.remote.ErpService;
import com.ximai.mes.remote.dto.ProWorkorderStateUpdate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class WorkorderStateUpdateProcess implements IExtendedProcess {
@Autowired
ErpService erpService;
@Override
public void process(Object[] args, Object returnResult) {
ProWorkorder workorder = (ProWorkorder)args[0];
WorkorderStatusEnum workorderStatusEnum = (WorkorderStatusEnum)args[1];
ProWorkorderStateUpdate stateUpdate = new ProWorkorderStateUpdate();
stateUpdate.setWorkorderCode(workorder.getWorkorderCode());
stateUpdate.setWorkorderType(workorder.getWorkorderType());
if(workorderStatusEnum==WorkorderStatusEnum.FINISHED){
stateUpdate.setState("y");
erpService.updateWorkorderState(stateUpdate);
}else if(workorderStatusEnum==WorkorderStatusEnum.PRODUCING){
stateUpdate.setState("3");
erpService.updateWorkorderState(stateUpdate);
}
}
}
......@@ -49,7 +49,8 @@
ptw.status,
ptw.create_by,
ptw.create_time,
ptw.remark
ptw.remark,
ptw.outsourced
from pro_task_workunit ptw
left join md_workunit mw
on mw.workunit_id = ptw.workunit_id
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment