qiuhongwu 6 months ago
commit b1f3618d32

@ -84,10 +84,14 @@ public enum OperateTypeEnum {
*
* */
CANCEL(17),
/**
/*
*
*/
**/
COMPLETE_RECEIPT(18),
/*
*
* */
DISPATCH(19),
/**
*
*

@ -9,13 +9,9 @@ import lombok.Getter;
*/
@Getter
public enum ProjectOrderStatusEnum {
REPULSE(3, "已打回"),
SAVE(4, "已保存"),
ALTER(8, "发起变更"),
SUBMIT_AUDIT(8, "已送审"),
AUDIT(16, "已审核"),
APPROVE(32, "已启动"),
TERMINATE(64, "已终止")
DISPATCH(8, "下发"),
TERMINATE(16, "已终止"),
;
private int code;

@ -1,6 +1,6 @@
package com.chanko.yunxi.mes.module.biz.config;
import com.chanjet.openapi.sdk.java.ChanjetClient;
import com.chanjet.openapi.sdk.java.AbstractChanjetClient;
import com.chanjet.openapi.sdk.java.DefaultChanjetClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -13,7 +13,7 @@ import org.springframework.context.annotation.Configuration;
@Configuration
public class ChanjetClientConfig {
@Bean
public ChanjetClient chanjetClient(ChanjetOpenApiConfig chanjetOpenApiConfig) {
public AbstractChanjetClient chanjetClient(ChanjetOpenApiConfig chanjetOpenApiConfig) {
return new DefaultChanjetClient(chanjetOpenApiConfig.getGatewayUrl(), chanjetOpenApiConfig.getSecret());
}
}

@ -1,4 +1,4 @@
package com.chanko.yunxi.mes.module.biz.chanjet;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet;
import com.chanjet.openapi.sdk.java.exception.ChanjetApiException;
import com.chanjet.openapi.sdk.java.response.GetTokenResponse;
@ -7,9 +7,7 @@ import com.chanko.yunxi.mes.framework.tenant.core.aop.TenantIgnore;
import com.chanko.yunxi.mes.module.biz.controller.admin.procedure.vo.ProcedureSaveReqVO;
import com.chanko.yunxi.mes.module.biz.controller.admin.storage.vo.StorageSaveReqVO;
import com.chanko.yunxi.mes.module.biz.controller.admin.taskreport.vo.TaskReportSaveReqVO;
import com.chanko.yunxi.mes.module.biz.controller.admin.workshop.vo.WorkshopSaveReqVO;
import com.chanko.yunxi.mes.module.biz.manager.ChanjetManager;
import com.chanko.yunxi.mes.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO;
import com.chanko.yunxi.mes.module.system.controller.admin.user.vo.user.UserSaveReqVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@ -42,6 +40,8 @@ public class ChanjetController {
private ChanjetSpi chanjetSpi;
@Resource
private ChanjetManager chanjetManager;
@Resource
private ChanjetTokenHolder chanjetTokenHolder;
/**
* OAuth
@ -57,22 +57,24 @@ public class ChanjetController {
log.debug("接收授权码推送:{}", code);
GetTokenResponse response = chanjetSpi.getToken(code);
// 如成功 保存token
ChanjetTokenHolder.setToken(response);
chanjetTokenHolder.installToken(response);
return response;
}
@PostMapping("/dept/create")
@Operation(summary = "创建部门")
@PreAuthorize("@ss.hasPermission('system:dept:create')")
public CommonResult<Long> createDept(@Valid @RequestBody DeptSaveReqVO createReqVO) throws ChanjetApiException {
return success(chanjetManager.createDepartment(createReqVO));
@GetMapping("/dept/query")
@Operation(summary = "获取部门数据")
@PreAuthorize("@ss.hasPermission('system:dept:query')")
public CommonResult<Boolean> queryDept() throws ChanjetApiException {
chanjetManager.queryDept();
return success(true);
}
@PostMapping("/workshop/create")
@Operation(summary = "创建车间")
@PreAuthorize("@ss.hasPermission('biz:workshop:create')")
public CommonResult<Long> createWorkshop(@Valid @RequestBody WorkshopSaveReqVO createReqVO) throws ChanjetApiException {
return success(chanjetManager.createWorkshop(createReqVO));
@GetMapping("/workshop/query")
@Operation(summary = "获取车间数据")
@PreAuthorize("@ss.hasPermission('biz:workshop:query')")
public CommonResult<Boolean> queryWorkshop() throws ChanjetApiException {
chanjetManager.queryWorkshop();
return success(true);
}
@PostMapping("/customer/query")

@ -1,10 +1,9 @@
package com.chanko.yunxi.mes.module.biz.chanjet;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet;
import com.chanjet.openapi.sdk.java.ChanjetContent;
import com.chanjet.openapi.sdk.java.ChanjetResponse;
import com.chanjet.openapi.sdk.java.enums.HttpMethod;
import com.chanko.yunxi.mes.module.biz.chanjet.vo.*;
import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo.*;
import lombok.Getter;
/**
@ -15,8 +14,7 @@ import lombok.Getter;
@Getter
public enum ChanjetInterfaceEnum {
CREATE_DEPARTMENT("/tplus/api/v2/department/Create", "创建部门", CreateDepartmentReqVO.class, SimpleChanjetResponse.class),
CREATE_WORKSHOP("/tplus/api/v2/department/Create", "创建车间", CreateDepartmentReqVO.class, SimpleChanjetResponse.class),
QUERY_DEPARTMENT_OR_WORKSHOP("/tplus/api/v2/department/Query", "查询部门/车间", CreateDepartmentReqVO.class, QueryDepartmentResVO.class),
QUERY_CUSTOMER("/tplus/api/v2/partner/Query", "查询客户", QueryPartnerReqVO.class, SimpleChanjetResponse.class), // TODO reponse
QUERY_SUPPLIER("/tplus/api/v2/partner/Query", "查询供应商", QueryPartnerReqVO.class, SimpleChanjetResponse.class), // TODO reponse
CREATE_PROCEDURE("/tplus/api/v2/process/Create", "创建工序", CreateProcedureReqVO.class, SimpleChanjetResponse.class),
@ -35,9 +33,9 @@ public enum ChanjetInterfaceEnum {
private HttpMethod httpMethod;
private String description;
private Class<? extends ChanjetContent> requestContentClass;
private Class<? extends ChanjetResponse> responseContentClass;
private Class<?> responseContentClass;
ChanjetInterfaceEnum(String uri, String description, Class<? extends ChanjetContent> requestContentClass, Class<? extends ChanjetResponse> responseContentClass) {
ChanjetInterfaceEnum(String uri, String description, Class<? extends ChanjetContent> requestContentClass, Class<?> responseContentClass) {
this.uri = uri;
this.description = description;
this.requestContentClass = requestContentClass;

@ -1,8 +1,13 @@
package com.chanko.yunxi.mes.module.biz.chanjet;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet;
import com.chanjet.openapi.sdk.java.ChanjetClient;
import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.util.ParameterizedTypeImpl;
import com.chanjet.openapi.sdk.java.AbstractChanjetClient;
import com.chanjet.openapi.sdk.java.ChanjetContent;
import com.chanjet.openapi.sdk.java.ChanjetResponse;
import com.chanjet.openapi.sdk.java.HttpResponse;
import com.chanjet.openapi.sdk.java.domain.GetAppAccessTokenContent;
import com.chanjet.openapi.sdk.java.domain.GetOrgAccessTokenContent;
import com.chanjet.openapi.sdk.java.domain.GetPermanentAuthCodeContent;
@ -10,13 +15,15 @@ import com.chanjet.openapi.sdk.java.domain.GetTokenByPermanentCodeContent;
import com.chanjet.openapi.sdk.java.exception.ChanjetApiException;
import com.chanjet.openapi.sdk.java.request.*;
import com.chanjet.openapi.sdk.java.response.*;
import com.chanko.yunxi.mes.module.biz.chanjet.ChanjetInterfaceEnum;
import com.chanko.yunxi.mes.module.biz.chanjet.vo.SimpleChanjetRequest;
import com.chanko.yunxi.mes.module.biz.chanjet.vo.SimpleChanjetResponse;
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
import com.chanko.yunxi.mes.module.biz.config.ChanjetOpenApiConfig;
import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo.SimpleChanjetRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
/**
@ -30,7 +37,7 @@ public class ChanjetSpi {
@Autowired
private ChanjetOpenApiConfig chanjetOpenApiConfig;
@Autowired
private ChanjetClient chanjetClient;
private AbstractChanjetClient chanjetClient;
/**
*
@ -94,7 +101,7 @@ public class ChanjetSpi {
//填写开发者的真实OAuth回调地址
getTokenRequest.addQueryParam("redirectUri", chanjetOpenApiConfig.getRedirectUri());
getTokenRequest.addQueryParam("code", code);
getTokenRequest.setRequestUri("/auth/v2/getToken");
getTokenRequest.setRequestUri("/auth/getToken");
return chanjetClient.execute(getTokenRequest);
}
@ -147,4 +154,57 @@ public class ChanjetSpi {
return execute(chanjetInterfaceEnum, null, chanjetContent);
}
public <T> CommonResult<T> invoke(ChanjetInterfaceEnum chanjetInterfaceEnum, Map<String, String> queryParams, ChanjetContent chanjetContent, Class<T> responseClass) throws ChanjetApiException {
CommonResult<T> result = CommonResult.success(null);
SimpleChanjetRequest simpleChanjetRequest = new SimpleChanjetRequest(chanjetInterfaceEnum, queryParams, chanjetContent);
HttpResponse response = chanjetClient.invoke(simpleChanjetRequest);
if(response.getStatusCode() == HttpStatus.HTTP_OK){
if(!StringUtils.isEmpty(response.getBody())){
result.setData(JSON.parseObject(response.getBody(), buildType(responseClass)));
}
}else{
return CommonResult.error(response.getStatusCode(), response.getBody());
}
return result;
}
public <T> CommonResult<List<T>> invokeRetList(ChanjetInterfaceEnum chanjetInterfaceEnum, Map<String, String> queryParams, ChanjetContent chanjetContent, Class<T> responseClass) throws ChanjetApiException {
CommonResult<List<T>> result = CommonResult.success(null);
SimpleChanjetRequest simpleChanjetRequest = new SimpleChanjetRequest(chanjetInterfaceEnum, queryParams, chanjetContent);
HttpResponse response = chanjetClient.invoke(simpleChanjetRequest);
if(response.getStatusCode() == HttpStatus.HTTP_OK){
if(!StringUtils.isEmpty(response.getBody())){
result.setData(JSON.parseObject(response.getBody(), buildType(List.class, responseClass)));
}
}else{
return CommonResult.error(response.getStatusCode(), response.getBody());
}
return result;
}
public <T> CommonResult<T> invoke(ChanjetInterfaceEnum chanjetInterfaceEnum, Map<String, String> queryParams, Class<T> responseClass) throws ChanjetApiException {
return invoke(chanjetInterfaceEnum, queryParams, null, responseClass);
}
public <T> CommonResult<T> invoke(ChanjetInterfaceEnum chanjetInterfaceEnum, ChanjetContent chanjetContent, Class<T> responseClass) throws ChanjetApiException {
return invoke(chanjetInterfaceEnum, null, chanjetContent, responseClass);
}
public <T> CommonResult<List<T>> invokeRetList(ChanjetInterfaceEnum chanjetInterfaceEnum, Map<String, String> queryParams, Class<T> responseClass) throws ChanjetApiException {
return invokeRetList(chanjetInterfaceEnum, queryParams, null, responseClass);
}
public <T> CommonResult<List<T>> invokeRetList(ChanjetInterfaceEnum chanjetInterfaceEnum, ChanjetContent chanjetContent, Class<T> responseClass) throws ChanjetApiException {
return invokeRetList(chanjetInterfaceEnum, null, chanjetContent, responseClass);
}
public static Type buildType(Type... types) {
ParameterizedTypeImpl beforeType = null;
if (types != null && types.length > 0) {
for (int i = types.length - 1; i > 0; i--) {
beforeType = new ParameterizedTypeImpl(new Type[]{beforeType == null ? types[i] : beforeType}, null, types[i - 1]);
}
}
return beforeType;
}
}

@ -1,4 +1,4 @@
package com.chanko.yunxi.mes.module.biz.chanjet;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet;
import com.alibaba.fastjson.JSON;
import com.chanjet.openapi.sdk.java.exception.ChanjetApiException;
@ -7,6 +7,7 @@ import com.chanjet.openapi.sdk.java.response.RefreshTokenResponse;
import com.chanko.yunxi.mes.module.biz.config.ChanjetOpenApiConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@ -27,23 +28,34 @@ public class ChanjetTokenHolder {
public static String REFRESH_TOKEN = null;
public static String APP_KEY = null;
public static String APP_SECRET = null;
public static final String MAJOYS_CHANJET_TOKEN_KEY = "MAJOYS_CHANJET_TOKEN_KEY";
public static final String MAJOYS_CHANJET_REFRESH_TOKEN_KEY = "MAJOYS_CHANJET_REFRESH_TOKEN_KEY";
@Resource
private ChanjetSpi chanjetSpi;
@Resource
private ChanjetOpenApiConfig chanjetOpenApiConfig;
@Resource
private RedisTemplate<String,String> redisTemplate;
@PostConstruct
public void init(){
APP_KEY = chanjetOpenApiConfig.getAppKey();
APP_SECRET = chanjetOpenApiConfig.getAppSecret();
if(redisTemplate.hasKey(MAJOYS_CHANJET_TOKEN_KEY)){
TOKEN = redisTemplate.opsForValue().get(MAJOYS_CHANJET_TOKEN_KEY);
}
if(redisTemplate.hasKey(MAJOYS_CHANJET_REFRESH_TOKEN_KEY)){
REFRESH_TOKEN = redisTemplate.opsForValue().get(MAJOYS_CHANJET_REFRESH_TOKEN_KEY);
}
}
public static void setToken(GetTokenResponse response) {
public void installToken(GetTokenResponse response) {
log.debug("ChanjetTokenHolder.setToken: {}", JSON.toJSONString(response));
if("200".equals(response.getCode())){
TOKEN = response.getResult().getAccessToken();
REFRESH_TOKEN = response.getResult().getRefreshToken();
setToken(response.getResult().getAccessToken());
setRefreshToken(response.getResult().getRefreshToken());
}else{
log.error("ChanjetTokenHolder.setToken error: {}", JSON.toJSONString(response));
}
@ -58,18 +70,28 @@ public class ChanjetTokenHolder {
public void refreshToken() throws ChanjetApiException {
if(!StringUtils.isEmpty(REFRESH_TOKEN)){
RefreshTokenResponse refreshTokenResponse = chanjetSpi.refreshToken(REFRESH_TOKEN);
setToken(refreshTokenResponse);
installToken(refreshTokenResponse);
}
}
private void setToken(RefreshTokenResponse response) {
private void installToken(RefreshTokenResponse response) {
log.debug("ChanjetTokenHolder.refreshToken: {}", JSON.toJSONString(response));
if("200".equals(response.getCode())){
TOKEN = response.getResult().getAccessToken();
REFRESH_TOKEN = response.getResult().getRefreshToken();
setToken(response.getResult().getAccessToken());
setRefreshToken(response.getResult().getRefreshToken());
}else{
log.error("ChanjetTokenHolder.refreshToken error: {}", JSON.toJSONString(response));
}
}
public void setToken(String token){
TOKEN = token;
redisTemplate.opsForValue().set(MAJOYS_CHANJET_TOKEN_KEY, token);
}
private void setRefreshToken(String refreshToken) {
REFRESH_TOKEN = refreshToken;
redisTemplate.opsForValue().set(MAJOYS_CHANJET_REFRESH_TOKEN_KEY, refreshToken);
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 16:43:39
@ -35,4 +35,4 @@ public class AdjustCostDetails {
return Amount;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -19,4 +19,4 @@ public class BusinessType {
return Code;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
import lombok.Data;
import lombok.experimental.Accessors;

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
import lombok.Data;
import lombok.experimental.Accessors;

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -19,4 +19,4 @@ public class Customer {
return Code;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -19,4 +19,4 @@ public class Department {
return Code;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -11,4 +11,4 @@ package com.chanko.yunxi.mes.module.biz.chanjet.dto;
*/
public class DynamicPropertyKeys {
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -11,4 +11,4 @@ package com.chanko.yunxi.mes.module.biz.chanjet.dto;
*/
public class DynamicPropertyValues {
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -19,4 +19,4 @@ public class InspectionReturnReason {
return Code;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -19,4 +19,4 @@ public class Inventory {
return Code;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
import java.util.List;
/**
@ -15,7 +15,7 @@ public class ManufactureReportDetails {
private String SourceVoucherId;
private MultiMaterialWasteReasonSelect MultiMaterialWasteReasonSelect;
private String Inventory_Code;
private Process Process;
private com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto.Process Process;
private List<ManufactureReportTeamDetails> ManufactureReportTeamDetails;
private Unit Unit;
private int QualifiedQuantity;
@ -62,10 +62,10 @@ public class ManufactureReportDetails {
return Inventory_Code;
}
public void setProcess(Process Process) {
public void setProcess(com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto.Process Process) {
this.Process = Process;
}
public Process getProcess() {
public com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto.Process getProcess() {
return Process;
}
@ -244,4 +244,4 @@ public class ManufactureReportDetails {
return Inventory;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -91,4 +91,4 @@ public class ManufactureReportTeamDetails {
return QualifiedQuantity;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -19,4 +19,4 @@ public class MultiArtificialWasteReasonSelect {
return Code;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -19,4 +19,4 @@ public class MultiMaterialWasteReasonSelect {
return Code;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -19,4 +19,4 @@ public class Partner {
return Code;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -19,4 +19,4 @@ public class Person {
return Code;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -27,4 +27,4 @@ public class Process {
return Code;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -19,4 +19,4 @@ public class ProcessSubUnit {
return Name;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -19,4 +19,4 @@ public class ProcessTeam {
return Code;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -19,4 +19,4 @@ public class Project {
return Code;
}
}
}

@ -0,0 +1,13 @@
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
import lombok.Data;
/**
* @author chenxi
* @date 2024-04-22 16:43
*/
@Data
public class QueryDepartmentDTO {
private String SelectFields = "ID,Code,Name,Parent.Code,Parent.Name";
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -19,4 +19,4 @@ public class Routing {
return Code;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
import java.util.List;
/**
@ -20,4 +20,4 @@ public class SNObject {
return SnAccountDetails;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -19,4 +19,4 @@ public class SalaryType {
return Code;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -19,4 +19,4 @@ public class SnAccountDetails {
return SNCode;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -19,4 +19,4 @@ public class Unit {
return Name;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -19,4 +19,4 @@ public class Unit2 {
return Name;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 16:43:39
@ -19,4 +19,4 @@ public class Warehouse {
return Code;
}
}
}

@ -1,7 +1,7 @@
/**
* Copyright 2024 bejson.com
* Copyright 2024 bejson.com
*/
package com.chanko.yunxi.mes.module.biz.chanjet.dto;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
/**
* Auto-generated: 2024-04-20 15:37:29
@ -19,4 +19,4 @@ public class WorkShop {
return Code;
}
}
}

@ -1,4 +1,4 @@
package com.chanko.yunxi.mes.module.biz.chanjet.vo;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo;
import com.chanjet.openapi.sdk.java.AbstractChanjetContent;
import lombok.AllArgsConstructor;

@ -1,4 +1,4 @@
package com.chanko.yunxi.mes.module.biz.chanjet.vo;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo;
import com.chanjet.openapi.sdk.java.AbstractChanjetContent;
import lombok.AllArgsConstructor;

@ -1,4 +1,4 @@
package com.chanko.yunxi.mes.module.biz.chanjet.vo;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo;
import com.chanjet.openapi.sdk.java.AbstractChanjetContent;
import lombok.AllArgsConstructor;

@ -1,7 +1,7 @@
package com.chanko.yunxi.mes.module.biz.chanjet.vo;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo;
import com.chanjet.openapi.sdk.java.AbstractChanjetContent;
import com.chanko.yunxi.mes.module.biz.chanjet.dto.CreateReportDto;
import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto.CreateReportDto;
import lombok.AllArgsConstructor;
import lombok.Data;

@ -1,7 +1,7 @@
package com.chanko.yunxi.mes.module.biz.chanjet.vo;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo;
import com.chanjet.openapi.sdk.java.AbstractChanjetContent;
import com.chanko.yunxi.mes.module.biz.chanjet.dto.CreateStockOutOrderDto;
import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto.CreateStockOutOrderDto;
import lombok.AllArgsConstructor;
import lombok.Data;

@ -1,4 +1,4 @@
package com.chanko.yunxi.mes.module.biz.chanjet.vo;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo;
import com.chanjet.openapi.sdk.java.AbstractChanjetContent;
import lombok.AllArgsConstructor;

@ -1,4 +1,4 @@
package com.chanko.yunxi.mes.module.biz.chanjet.vo;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo;
import com.chanjet.openapi.sdk.java.AbstractChanjetContent;
import lombok.AllArgsConstructor;

@ -0,0 +1,17 @@
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo;
import com.chanjet.openapi.sdk.java.AbstractChanjetContent;
import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto.QueryDepartmentDTO;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @author chenxi
* @date 2024-04-22 16:43
*/
@Data
@AllArgsConstructor
public class QueryDepartmentReqVO extends AbstractChanjetContent {
private QueryDepartmentDTO dto;
}

@ -0,0 +1,24 @@
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo;
import lombok.Data;
/**
* @author chenxi
* @date 2024-04-22 16:49
*/
@Data
public class QueryDepartmentResVO {
private Long id;
private String code;
private String name;
private ParentVO parent;
@Data
public static class ParentVO {
private Long id;
private String code;
private String name;
}
}

@ -1,4 +1,4 @@
package com.chanko.yunxi.mes.module.biz.chanjet.vo;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo;
import com.chanjet.openapi.sdk.java.AbstractChanjetContent;
import lombok.AllArgsConstructor;

@ -1,4 +1,4 @@
package com.chanko.yunxi.mes.module.biz.chanjet.vo;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo;
import com.chanjet.openapi.sdk.java.AbstractChanjetContent;
import lombok.AllArgsConstructor;

@ -1,4 +1,4 @@
package com.chanko.yunxi.mes.module.biz.chanjet.vo;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo;
import com.chanjet.openapi.sdk.java.AbstractChanjetContent;
import lombok.AllArgsConstructor;

@ -1,4 +1,4 @@
package com.chanko.yunxi.mes.module.biz.chanjet.vo;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo;
import com.chanjet.openapi.sdk.java.AbstractChanjetContent;
import lombok.AllArgsConstructor;

@ -1,11 +1,10 @@
package com.chanko.yunxi.mes.module.biz.chanjet.vo;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo;
import com.chanjet.openapi.sdk.java.AbstractChanjetRequest;
import com.chanjet.openapi.sdk.java.ChanjetContent;
import com.chanjet.openapi.sdk.java.ChanjetResponse;
import com.chanjet.openapi.sdk.java.enums.HttpMethod;
import com.chanko.yunxi.mes.module.biz.chanjet.ChanjetInterfaceEnum;
import com.chanko.yunxi.mes.module.biz.chanjet.ChanjetTokenHolder;
import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.ChanjetInterfaceEnum;
import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.ChanjetTokenHolder;
import java.util.Map;
@ -16,28 +15,27 @@ import java.util.Map;
*/
public class SimpleChanjetRequest extends AbstractChanjetRequest {
private Class<? extends ChanjetResponse> responseClass;
private Class<?> responseClass;
public SimpleChanjetRequest(String uri, Class<? extends ChanjetResponse> responseClass){
public SimpleChanjetRequest(String uri, Class<?> responseClass){
this(uri, responseClass, null, null);
}
public SimpleChanjetRequest(String uri, Class<? extends ChanjetResponse> responseClass, ChanjetContent chanjetContent){
public SimpleChanjetRequest(String uri, Class<?> responseClass, ChanjetContent chanjetContent){
this(uri, responseClass, chanjetContent, null);
}
public SimpleChanjetRequest(String uri, Class<? extends ChanjetResponse> responseClass, Map<String,String> queryParams){
public SimpleChanjetRequest(String uri, Class<?> responseClass, Map<String,String> queryParams){
this(uri, responseClass, null, queryParams);
}
public SimpleChanjetRequest(String uri, Class<? extends ChanjetResponse> responseClass, ChanjetContent chanjetContent, Map<String,String> queryParams){
public SimpleChanjetRequest(String uri, Class<?> responseClass, ChanjetContent chanjetContent, Map<String,String> queryParams){
this.setRequestUri(uri);
this.setAppKey(ChanjetTokenHolder.APP_KEY);
this.setAppSecret(ChanjetTokenHolder.APP_SECRET);
this.setOpenToken(ChanjetTokenHolder.TOKEN);
if(chanjetContent != null) this.setBizContent(chanjetContent);
if(queryParams != null) this.addQueryParams(queryParams);
this.responseClass = responseClass;
}
public SimpleChanjetRequest(ChanjetInterfaceEnum chanjetInterfaceEnum, Map<String, String> queryParams, ChanjetContent chanjetContent) {
@ -45,7 +43,7 @@ public class SimpleChanjetRequest extends AbstractChanjetRequest {
}
@Override
public Class<? extends ChanjetResponse> getResponseClass() {
public Class<?> getResponseClass() {
return responseClass;
}

@ -1,4 +1,4 @@
package com.chanko.yunxi.mes.module.biz.chanjet.vo;
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo;
import com.chanjet.openapi.sdk.java.AbstractChanjetResponse;
import lombok.Data;

@ -9,11 +9,11 @@ import com.chanko.yunxi.mes.framework.operatelog.core.annotations.OperateLog;
import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum;
import com.chanko.yunxi.mes.framework.operatelog.core.service.OperateLogFrameworkService;
import com.chanko.yunxi.mes.module.biz.controller.admin.projectorder.vo.*;
import com.chanko.yunxi.mes.module.biz.manager.CrossOrderManager;
import com.chanko.yunxi.mes.module.biz.service.projectorder.ProjectOrderService;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.chanko.yunxi.mes.module.biz.enums.BusinessTypeEnum;
import com.chanko.yunxi.mes.module.biz.manager.CrossOrderManager;
import com.chanko.yunxi.mes.module.biz.service.projectorder.ProjectOrderService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -141,9 +141,9 @@ public class ProjectOrderController {
@GetMapping("/page-schedule-track")
@Operation(summary = "获得订单进度跟踪分页")
@PreAuthorize("@ss.hasPermission('biz:project-order:query')")
public CommonResult<PageResult<ProjectOrderRespVO>> getProjectOrderScheduleTrackPage(@Valid ProjectOrderPageReqVO pageReqVO) {
PageResult<ProjectOrderDO> pageResult = projectOrderService.getProjectOrderScheduleTrackPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ProjectOrderRespVO.class));
public CommonResult<PageResult<ProjectOrderSubDO>> getProjectOrderScheduleTrackPage(@Valid ProjectOrderPageReqVO pageReqVO) {
PageResult<ProjectOrderSubDO> pageResult = projectOrderService.getProjectOrderScheduleTrackPage(pageReqVO);
return success(pageResult);
}
// ==================== 子表(项目订单子项目) ====================

@ -140,9 +140,9 @@ public class ProjectOrderPageReqVO extends PageParam {
private List<Long> idList;
@Schema(description = "子项目名称")
private String planSubName;
private String projectSubName;
@Schema(description = "子项目编号")
private String planSubCode;
private String projectSubCode;
}

@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.annotation.TableName;
import com.chanko.yunxi.mes.framework.mybatis.core.dataobject.BaseDO;
import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum;
import com.chanko.yunxi.mes.module.biz.enums.ProjectOrderStatusEnum;
import com.chanko.yunxi.mes.module.biz.enums.YesOrNoEnum;
import lombok.*;
import java.math.BigDecimal;
@ -256,57 +255,28 @@ public class ProjectOrderDO extends BaseDO {
private Integer restDays;
public boolean canSave(){
return this.orderStatus.intValue() <= ProjectOrderStatusEnum.SAVE.getCode();
return this.orderStatus.intValue() == ProjectOrderStatusEnum.SAVE.getCode();
}
public boolean canSubmitAudit(){
return this.orderStatus.intValue() < ProjectOrderStatusEnum.SUBMIT_AUDIT.getCode();
}
public boolean canAudit(){
return this.orderStatus.intValue() == ProjectOrderStatusEnum.SUBMIT_AUDIT.getCode();
}
public boolean canApprove(){
return this.orderStatus.intValue() == ProjectOrderStatusEnum.AUDIT.getCode();
public boolean canDispatch(){
return this.orderStatus.intValue() == ProjectOrderStatusEnum.SAVE.getCode();
}
public boolean canTerminate(){
return this.orderStatus.intValue() == ProjectOrderStatusEnum.APPROVE.getCode();
}
public boolean canRepulse(){
return this.orderStatus.intValue() == ProjectOrderStatusEnum.SUBMIT_AUDIT.getCode() ||
this.orderStatus.intValue() == ProjectOrderStatusEnum.AUDIT.getCode();
}
public boolean canDelete(){
return this.orderStatus.intValue() == ProjectOrderStatusEnum.SAVE.getCode() && this.hasAlter.intValue() == YesOrNoEnum.N.getCode();
return this.orderStatus.intValue() == ProjectOrderStatusEnum.DISPATCH.getCode();
}
public boolean canOperate(OperateTypeEnum operateTypeEnum){
switch (operateTypeEnum){
case SAVE:
return canSave();
case SUBMIT_AUDIT:
return canSubmitAudit();
case AUDIT:
return canAudit();
case APPROVE:
return canApprove();
case REPULSE:
return canRepulse();
case DISPATCH:
return canDispatch();
case TERMINATE:
return canTerminate();
case ALTER:
return canAlter();
default:
return false;
}
}
private boolean canAlter() {
return this.orderStatus.intValue() == ProjectOrderStatusEnum.APPROVE.getCode();
}
}

@ -31,6 +31,10 @@ public class ProjectOrderSubDO extends BaseDO {
* id
*/
private Long projectOrderId;
/**
* id
*/
private Long materialId;
/**
*
*/

@ -5,13 +5,7 @@ import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.module.biz.controller.admin.projectorder.vo.ProjectOrderPageReqVO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.customer.CustomerDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.deliverorder.DeliverOrderDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.deliverorder.DeliverOrderSubDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.plan.PlanDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.chanko.yunxi.mes.module.biz.enums.ProjectOrderDeliverStatusEnum;
import com.chanko.yunxi.mes.module.biz.enums.ProjectOrderStatusEnum;
import com.chanko.yunxi.mes.module.system.dal.dataobject.dept.DeptDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
@ -67,31 +61,4 @@ public interface ProjectOrderMapper extends BaseMapperX<ProjectOrderDO> {
return selectOne(query);
}
default PageResult<ProjectOrderDO> selectProjectScheduleTrackPage(ProjectOrderPageReqVO reqVO) {
MPJLambdaWrapper<ProjectOrderDO> query = new MPJLambdaWrapper<>();
query.selectAll(ProjectOrderDO.class)
.select("pp.plan_no as planNo", "pp.status as planStatus")
.select("so.name as planSubName", "ps.project_sub_code as planSubCode" )
.select("ifNull(so.amount,0) as allAmount", "SUM(case when do.deliver_status=2 and do.deleted=0 then ifNull(pdo.amount,0) else 0 end) as sendAmount")
.select("(ifNull(so.amount,0)- SUM(case when do.deliver_status=2 and do.deleted=0 then ifNull(pdo.amount,0) else 0 end)) as restAmount")
.select("DateDiff(t.project_end_time,CURRENT_DATE) as restDays ")
.leftJoin(ProjectOrderSubDO.class, "so", ProjectOrderSubDO::getProjectOrderId, ProjectOrderDO::getId)
.leftJoin(PlanDO.class, "pp", PlanDO::getProjectId, ProjectOrderDO::getId)
.leftJoin(" project_plan_sub ps ON (ps.project_plan_id = pp.id and so.id=ps.project_sub_id and t.id=ps.project_id) ")
.leftJoin(DeliverOrderSubDO.class, "pdo", DeliverOrderSubDO::getSaleOrderSubId, ProjectOrderSubDO::getId)
.leftJoin(DeliverOrderDO.class, "do", DeliverOrderDO::getId, DeliverOrderSubDO::getDeliveryOrderId)
.disableSubLogicDel()
.groupBy("ps.project_sub_id,pp.plan_no")
.orderByAsc(ProjectOrderDO::getProjectEndTime);
query.like(!StringUtils.isEmpty(reqVO.getCode()), ProjectOrderDO::getCode, reqVO.getCode())
.like(!StringUtils.isEmpty(reqVO.getProjectName()), ProjectOrderDO::getProjectName, reqVO.getProjectName())
.like(!StringUtils.isEmpty(reqVO.getPlanSubCode()), "ps.project_sub_code", reqVO.getPlanSubCode())
.like(!StringUtils.isEmpty(reqVO.getPlanSubName()), "so.name", reqVO.getPlanSubName())
.ne(true, ProjectOrderDO::getDeliveryStatus, ProjectOrderDeliverStatusEnum.ALL.getCode())
.eq(true,ProjectOrderDO::getOrderStatus, ProjectOrderStatusEnum.APPROVE.getCode())
.eq(true,ProjectOrderDO::getIsSnapshot,0)
;
return selectPage(reqVO, query);
}
}

@ -2,11 +2,14 @@ package com.chanko.yunxi.mes.module.biz.dal.mysql.projectorder;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.mybatis.core.mapper.BaseMapperX;
import com.chanko.yunxi.mes.module.biz.controller.admin.projectorder.vo.ProjectOrderPageReqVO;
import com.chanko.yunxi.mes.module.biz.controller.admin.projectorder.vo.ProjectOrderSubPageReqVO;
import com.chanko.yunxi.mes.module.biz.controller.admin.qualitymanagement.vo.InspectionReportPageReqVO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.composition.CompositionDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.customer.CustomerDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.equip.EquipDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.plan.PlanDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.plansub.PlanSubDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.projectorder.ProjectOrderSubDO;
@ -63,7 +66,7 @@ public interface ProjectOrderSubMapper extends BaseMapperX<ProjectOrderSubDO> {
.groupBy(ProjectOrderSubDO::getId)
.orderByDesc(ProjectOrderDO::getId)
;
query.eq(ProjectOrderDO::getOrderStatus, ProjectOrderStatusEnum.APPROVE.getCode())
query.eq(ProjectOrderDO::getOrderStatus, ProjectOrderStatusEnum.DISPATCH.getCode())
.eq(ProjectOrderDO::getIsSnapshot, YesOrNoEnum.N.getCode())
.like(!StringUtils.isEmpty(pageReqVO.getProjectCode()), ProjectOrderDO::getCode, pageReqVO.getProjectCode())
.like(!StringUtils.isEmpty(pageReqVO.getProjectName()), ProjectOrderDO::getProjectName, pageReqVO.getProjectName())
@ -106,7 +109,7 @@ public interface ProjectOrderSubMapper extends BaseMapperX<ProjectOrderSubDO> {
.disableSubLogicDel()
.orderByDesc(ProjectOrderDO::getId);
query.eq(ProjectOrderDO::getOrderStatus, ProjectOrderStatusEnum.APPROVE.getCode())
query.eq(ProjectOrderDO::getOrderStatus, ProjectOrderStatusEnum.DISPATCH.getCode())
.eq(ProjectOrderDO::getIsSnapshot, YesOrNoEnum.N.getCode())
.like(!StringUtils.isEmpty(pageReqVO.getProjectCode()), ProjectOrderDO::getCode, pageReqVO.getProjectCode())
.like(!StringUtils.isEmpty(pageReqVO.getProjectName()), ProjectOrderDO::getProjectName, pageReqVO.getProjectName())
@ -115,4 +118,24 @@ public interface ProjectOrderSubMapper extends BaseMapperX<ProjectOrderSubDO> {
return selectPage(pageReqVO, query);
}
default PageResult<ProjectOrderSubDO> selectProjectScheduleTrackPage(ProjectOrderPageReqVO reqVO) {
MPJLambdaWrapper<ProjectOrderSubDO> query = new MPJLambdaWrapper<>();
query.selectAll(ProjectOrderSubDO.class)
.leftJoin(ProjectOrderSubDO.class, "a", ProjectOrderSubDO::getProjectOrderId, ProjectOrderDO::getId)
.leftJoin(PlanDO.class, "b", PlanDO::getProjectId, ProjectOrderDO::getId)
.leftJoin(CustomerDO.class, "c", CustomerDO::getId, ProjectOrderDO::getCustomerId)
.leftJoin(MaterialDO.class, "d", MaterialDO::getId, ProjectOrderSubDO::getMaterialId)
.disableSubLogicDel()
.groupBy(ProjectOrderSubDO::getId)
.orderByAsc(ProjectOrderDO::getProjectEndTime);
query.like(!StringUtils.isEmpty(reqVO.getCode()), ProjectOrderDO::getCode, reqVO.getCode())
.like(!StringUtils.isEmpty(reqVO.getProjectSubCode()), MaterialDO::getCode, reqVO.getProjectSubCode())
.like(!StringUtils.isEmpty(reqVO.getProjectSubName()), MaterialDO::getName, reqVO.getProjectSubName())
.like(!StringUtils.isEmpty(reqVO.getCustomerName()), CustomerDO::getName, reqVO.getCustomerName())
.eq(ProjectOrderDO::getOrderStatus, ProjectOrderStatusEnum.DISPATCH.getCode())
.eq(ProjectOrderDO::getIsSnapshot,YesOrNoEnum.N.getCode())
;
return selectPage(reqVO, query);
}
}

@ -1,19 +1,22 @@
package com.chanko.yunxi.mes.module.biz.manager;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.chanjet.openapi.sdk.java.exception.ChanjetApiException;
import com.chanko.yunxi.mes.framework.common.enums.CommonStatusEnum;
import com.chanko.yunxi.mes.module.biz.chanjet.ChanjetSpi;
import com.chanko.yunxi.mes.module.biz.chanjet.dto.CreateReportDto;
import com.chanko.yunxi.mes.module.biz.chanjet.dto.CreateStockOutOrderDto;
import com.chanko.yunxi.mes.module.biz.chanjet.dto.ManufactureReportDetails;
import com.chanko.yunxi.mes.module.biz.chanjet.vo.*;
import com.chanko.yunxi.mes.framework.common.pojo.CommonResult;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.ChanjetSpi;
import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto.CreateReportDto;
import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto.CreateStockOutOrderDto;
import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto.ManufactureReportDetails;
import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto.QueryDepartmentDTO;
import com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.vo.*;
import com.chanko.yunxi.mes.module.biz.controller.admin.procedure.vo.ProcedureSaveReqVO;
import com.chanko.yunxi.mes.module.biz.controller.admin.storage.vo.StorageSaveReqVO;
import com.chanko.yunxi.mes.module.biz.controller.admin.taskreport.vo.TaskReportSaveReqVO;
import com.chanko.yunxi.mes.module.biz.controller.admin.workshop.vo.WorkshopSaveReqVO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.customer.CustomerDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.material.MaterialDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.procedure.ProcedureDO;
@ -31,10 +34,10 @@ import com.chanko.yunxi.mes.module.biz.service.procedure.ProcedureService;
import com.chanko.yunxi.mes.module.biz.service.storage.StorageService;
import com.chanko.yunxi.mes.module.biz.service.taskreport.TaskReportService;
import com.chanko.yunxi.mes.module.biz.service.workshop.WorkshopService;
import com.chanko.yunxi.mes.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO;
import com.chanko.yunxi.mes.module.system.controller.admin.user.vo.user.UserSaveReqVO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.dept.DeptDO;
import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO;
import com.chanko.yunxi.mes.module.system.dal.mysql.dept.DeptMapper;
import com.chanko.yunxi.mes.module.system.service.dept.DeptService;
import com.chanko.yunxi.mes.module.system.service.user.AdminUserService;
import org.springframework.stereotype.Component;
@ -42,11 +45,10 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.*;
import java.util.stream.Collectors;
import static com.chanko.yunxi.mes.module.biz.chanjet.ChanjetInterfaceEnum.*;
import static com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.ChanjetInterfaceEnum.*;
/**
*
@ -60,8 +62,6 @@ public class ChanjetManager {
@Resource
private ChanjetSpi chanjetSpi;
@Resource
private DeptService deptService;
@Resource
private WorkshopService workshopService;
@Resource
private CustomerMapper customerMapper;
@ -79,48 +79,66 @@ public class ChanjetManager {
private TaskReportService taskReportService;
@Resource
private StorageService storageService;
@Resource
private DeptMapper deptMapper;
/**
*
* @param deptSaveReqVO
* @return
*
* @throws ChanjetApiException
*/
@Transactional(rollbackFor = Exception.class)
public Long createDepartment(@Valid DeptSaveReqVO deptSaveReqVO) throws ChanjetApiException {
Long deptId = deptService.createDept(deptSaveReqVO);
public void queryDept() throws ChanjetApiException {
CommonResult<List<QueryDepartmentResVO>> result = chanjetSpi.invokeRetList(QUERY_DEPARTMENT_OR_WORKSHOP, new QueryDepartmentReqVO(new QueryDepartmentDTO()), QueryDepartmentResVO.class);
if(!result.isSuccess()){
throw new RuntimeException(result.getMsg());
}
DeptDO deptDO = deptService.getDept(deptId);
if(CollUtil.isNotEmpty(result.getData())){
// 过滤车间数据
List<QueryDepartmentResVO> deptDataList = result.getData().stream().filter(queryDepartmentResVO -> queryDepartmentResVO.getName().indexOf("车间") < 0).collect(Collectors.toList());
if(CollUtil.isNotEmpty(deptDataList)){
ArrayList<DeptDO> insertList = new ArrayList<>(16);
ArrayList<DeptDO> updateList = new ArrayList<>(16);
Map<Long, List<QueryDepartmentResVO>> queryDeptGroupById = deptDataList.stream().collect(Collectors.groupingBy(QueryDepartmentResVO::getId));
LambdaQueryWrapper<DeptDO> query = new LambdaQueryWrapper<>();
query.in(DeptDO::getId, queryDeptGroupById.keySet());
List<DeptDO> existsDOList = deptMapper.selectList(query);
Map<Long, List<DeptDO>> existsDOGroupById = existsDOList.stream().collect(Collectors.groupingBy(DeptDO::getId));
// 处理
queryDeptGroupById.forEach((id, voList) -> {
QueryDepartmentResVO queryDept = voList.get(0);
QueryDepartmentResVO.ParentVO parent = queryDept.getParent();
long parentId = parent != null && parent.getId() != null ? parent.getId() : 0;
List<DeptDO> existsDOs = existsDOGroupById.get(id);
if(CollUtil.isNotEmpty(existsDOs)){
DeptDO existsDO = existsDOs.get(0);
existsDO.setCode(queryDept.getCode()).setName(existsDO.getName()).setParentId(parentId);
updateList.add(existsDO);
}else{
DeptDO deptDO = BeanUtils.toBean(queryDept, DeptDO.class);
deptDO.setParentId(parentId);
insertList.add(deptDO);
}
});
CreateDepartmentReqVO.DepartmentVO departmentVO = new CreateDepartmentReqVO.DepartmentVO(String.valueOf(deptDO.getId()), deptDO.getName(), new HashMap<String, String>(1) {{
put("Code", String.valueOf(deptDO.getParentId()));
}});
SimpleChanjetResponse response = (SimpleChanjetResponse) chanjetSpi.execute(CREATE_DEPARTMENT, new CreateDepartmentReqVO(departmentVO));
if(!response.isSuccess()){
throw new RuntimeException(response.getMessage());
// 入库
if(CollUtil.isNotEmpty(updateList)) deptMapper.updateBatch(updateList);
if(CollUtil.isNotEmpty(insertList)) deptMapper.insertBatch(insertList);
}
}
return deptId;
}
/**
*
* @param createReqVO
* @return
*
* @throws ChanjetApiException
*/
@Transactional(rollbackFor = Exception.class)
public Long createWorkshop(WorkshopSaveReqVO createReqVO) throws ChanjetApiException {
Long workshopId = workshopService.createWorkshop(createReqVO);
WorkshopDO workshop = workshopService.getWorkshop(workshopId);
public void queryWorkshop() throws ChanjetApiException {
CreateDepartmentReqVO.DepartmentVO departmentVO = new CreateDepartmentReqVO.DepartmentVO(String.valueOf(workshop.getCode()), workshop.getName(), new HashMap<String, String>(1) {{
put("Code", String.valueOf(workshop.getDeptId()));
}});
SimpleChanjetResponse response = (SimpleChanjetResponse) chanjetSpi.execute(CREATE_DEPARTMENT, new CreateDepartmentReqVO(departmentVO));
if(!response.isSuccess()){
throw new RuntimeException(response.getMessage());
}
return workshopId;
}
/**
@ -528,4 +546,5 @@ public class ChanjetManager {
return id;
}
}

@ -88,5 +88,5 @@ public interface ProjectOrderService {
* @param pageReqVO
* @return
*/
PageResult<ProjectOrderDO> getProjectOrderScheduleTrackPage(ProjectOrderPageReqVO pageReqVO);
PageResult<ProjectOrderSubDO> getProjectOrderScheduleTrackPage(ProjectOrderPageReqVO pageReqVO);
}

@ -5,9 +5,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum;
import com.chanko.yunxi.mes.module.biz.dal.mysql.deliverorder.DeliverOrderSubMapper;
import com.chanko.yunxi.mes.module.biz.dal.mysql.projectorder.ProjectOrderMapper;
import com.chanko.yunxi.mes.module.biz.dal.mysql.projectorder.ProjectOrderSubMapper;
import com.chanko.yunxi.mes.module.biz.controller.admin.projectorder.vo.ProjectOrderPageReqVO;
import com.chanko.yunxi.mes.module.biz.controller.admin.projectorder.vo.ProjectOrderSaveReqVO;
import com.chanko.yunxi.mes.module.biz.controller.admin.projectorder.vo.ProjectOrderSubPageReqVO;
@ -17,11 +14,13 @@ import com.chanko.yunxi.mes.module.biz.dal.dataobject.deliverorder.DeliverOrderS
import com.chanko.yunxi.mes.module.biz.dal.dataobject.projectorder.ProjectOrderDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.projectorder.ProjectOrderSubDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.biz.dal.mysql.deliverorder.DeliverOrderSubMapper;
import com.chanko.yunxi.mes.module.biz.dal.mysql.projectorder.ProjectOrderMapper;
import com.chanko.yunxi.mes.module.biz.dal.mysql.projectorder.ProjectOrderSubMapper;
import com.chanko.yunxi.mes.module.biz.enums.BusinessTypeEnum;
import com.chanko.yunxi.mes.module.biz.enums.DeliverOrderStatusEnum;
import com.chanko.yunxi.mes.module.biz.enums.ProjectOrderStatusEnum;
import com.chanko.yunxi.mes.module.biz.enums.YesOrNoEnum;
import com.chanko.yunxi.mes.module.biz.manager.CrossOrderManager;
import com.chanko.yunxi.mes.module.biz.service.customer.CustomerService;
import com.chanko.yunxi.mes.module.biz.service.serialnumber.SerialNumberService;
import com.chanko.yunxi.mes.module.infra.controller.admin.file.vo.file.FilePageReqVO;
@ -72,9 +71,6 @@ public class ProjectOrderServiceImpl implements ProjectOrderService {
@Resource
private FileService fileService;
@Resource
private CrossOrderManager crossOrderManager;
@Resource
private DeliverOrderSubMapper deliverOrderSubMapper;
@ -171,10 +167,6 @@ public class ProjectOrderServiceImpl implements ProjectOrderService {
// 更新子表
if(CollUtil.isNotEmpty(updateReqVO.getProjectOrderSubs())) updateProjectOrderSubList(updateReqVO.getId(), updateReqVO.getProjectOrderSubs());
// 如已启动 按子项目生成虚拟物料数据
if(updateObj.getOrderStatus().intValue() == ProjectOrderStatusEnum.APPROVE.getCode()){
crossOrderManager.generateVirtualMaterial(updateReqVO.getCode(), updateObj.getId());
}
}
@Override
@ -182,9 +174,9 @@ public class ProjectOrderServiceImpl implements ProjectOrderService {
public void deleteProjectOrder(Long id) {
// 校验存在
ProjectOrderDO projectOrderDO = validateProjectOrderExists(id);
if(!projectOrderDO.canDelete()){
/*if(!projectOrderDO.canDelete()){
throw exception(INVALID_OPERATE);
}
}*/
// 删除
projectOrderMapper.deleteById(id);
@ -261,8 +253,8 @@ public class ProjectOrderServiceImpl implements ProjectOrderService {
}
@Override
public PageResult<ProjectOrderDO> getProjectOrderScheduleTrackPage(ProjectOrderPageReqVO pageReqVO) {
return projectOrderMapper.selectProjectScheduleTrackPage(pageReqVO);
public PageResult<ProjectOrderSubDO> getProjectOrderScheduleTrackPage(ProjectOrderPageReqVO pageReqVO) {
return projectOrderSubMapper.selectProjectScheduleTrackPage(pageReqVO);
}
// ==================== 子表(项目订单子项目) ====================

@ -334,7 +334,7 @@ public class ScreenServiceImpl implements ScreenService {
.selectCount(ProjectOrderDO::getId, "projectCount")
.select("DATE_FORMAT(create_time, '%m') as projectMonth")
.ge(ProjectOrderDO::getCreateTime, firstDayInNewYearTime)
.eq(ProjectOrderDO::getOrderStatus, ProjectOrderStatusEnum.APPROVE.getCode())
.eq(ProjectOrderDO::getOrderStatus, ProjectOrderStatusEnum.DISPATCH.getCode())
.groupBy("t.business_line", "DATE_FORMAT(create_time, '%m')");
List<ProjectOrderDO> projectOrderDOList = projectOrderMapper.selectList(query);
@ -387,7 +387,7 @@ public class ScreenServiceImpl implements ScreenService {
.selectCount(ProjectOrderDO::getId, "projectCount")
.select("DATE_FORMAT(create_time, '%Y') as projectYear")
.ge(ProjectOrderDO::getCreateTime, fiveYeasAgoTime)
.eq(ProjectOrderDO::getOrderStatus, ProjectOrderStatusEnum.APPROVE.getCode())
.eq(ProjectOrderDO::getOrderStatus, ProjectOrderStatusEnum.DISPATCH.getCode())
.groupBy("t.business_line", "DATE_FORMAT(create_time, '%Y')");
List<ProjectOrderDO> projectOrderDOList = projectOrderMapper.selectList(query);

@ -19,6 +19,10 @@ public class DeptRespDTO {
*
*/
private String name;
/**
*
*/
private String code;
/**
*
*/

@ -10,6 +10,9 @@ public class DeptListReqVO {
@Schema(description = "部门名称,模糊匹配", example = "芋道")
private String name;
@Schema(description = "部门编码,模糊匹配", example = "芋道")
private String code;
@Schema(description = "展示状态,参见 CommonStatusEnum 枚举类", example = "1")
private Integer status;

@ -15,6 +15,9 @@ public class DeptRespVO {
@Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道")
private String name;
@Schema(description = "部门编码", example = "芋道")
private String code;
@Schema(description = "父部门 ID", example = "1024")
private Long parentId;

@ -22,6 +22,10 @@ public class DeptSaveReqVO {
@Size(max = 30, message = "部门名称长度不能超过 30 个字符")
private String name;
@Schema(description = "部门编码")
@Size(max = 16, message = "部门名称长度不能超过 16 个字符")
private String code;
@Schema(description = "父部门 ID", example = "1024")
private Long parentId;

@ -17,6 +17,9 @@ public class DeptSimpleRespVO {
@Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道")
private String name;
@Schema(description = "部门编码")
private String code;
@Schema(description = "父部门 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Long parentId;

@ -30,6 +30,10 @@ public class DeptDO extends TenantBaseDO {
*
*/
private String name;
/**
*
*/
private String code;
/**
* ID
*

@ -15,6 +15,7 @@ public interface DeptMapper extends BaseMapperX<DeptDO> {
default List<DeptDO> selectList(DeptListReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<DeptDO>()
.likeIfPresent(DeptDO::getName, reqVO.getName())
.likeIfPresent(DeptDO::getCode, reqVO.getCode())
.eqIfPresent(DeptDO::getStatus, reqVO.getStatus()));
}

@ -224,4 +224,4 @@ chanjet:
appKey: fZtARspH #需要填写在开放平台申请的appKey
appSecret: B071433DABBE48DB2241AE12280C8CBC #需要填写在开放平台申请的appSecret
secret: 1234567890123456 #秘钥,用于解密,需要去开放平台自主填写,然后配置在此处
redirectUri: http://192.168.0.158:9021/admin-api/mes/chanjet/receiveCode #Oauth重定向地址需要去开放平台自主填写然后配置在此处
redirectUri: http://192.168.0.72:9021/admin-api/mes/chanjet/receiveCode #Oauth重定向地址需要去开放平台自主填写然后配置在此处

@ -190,7 +190,7 @@ mes:
- /jmreport/* # 积木报表,无法携带租户编号
- /ureport/* # UReport 报表,无法携带租户编号
- /admin-api/mp/open/** # 微信公众号开放平台,微信回调接口,无法携带租户编号
- /admin-api/mes/chanjet/** # 畅捷通开放平台 无需租户
- /admin-api/biz/chanjet/receiveCode # 畅捷通开放平台 无需租户
ignore-tables:
- system_tenant
- system_tenant_package

@ -9,14 +9,14 @@
<el-form-item label="订单单号" prop="code">
<el-input v-model="queryParams.code" placeholder="请输入订单单号" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="客户名称" prop="projectName">
<el-input v-model="queryParams.projectName" placeholder="请输入客户名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
<el-form-item label="客户名称" prop="customerName">
<el-input v-model="queryParams.customerName" placeholder="请输入客户名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="产品编号" prop="planSubCode">
<el-input v-model="queryParams.planSubCode" placeholder="请输入子项目编号" clearable @keyup.enter="handleQuery" class="!w-240px" />
<el-form-item label="产品编号" prop="projectSubCode">
<el-input v-model="queryParams.projectSubCode" placeholder="请输入子项目编号" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item label="产品名称" prop="planSubName">
<el-input v-model="queryParams.planSubName" placeholder="请输入子项目名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
<el-form-item label="产品名称" prop="projectSubName">
<el-input v-model="queryParams.projectSubName" placeholder="请输入子项目名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
</el-form-item>
<el-form-item style="margin-left: 20px;">
@ -44,8 +44,8 @@
<dict-tag :type="DICT_TYPE.BIZ_PROJECT_PLAN_STATUS" :value="scope.row.planStatus" />
</template>
</el-table-column>
<el-table-column label="产品编号" align="center" prop="planSubCode" min-width="350" />
<el-table-column label="产品名称" align="center" prop="planSubName" min-width="240" />
<el-table-column label="产品编号" align="center" prop="projectSubCode" min-width="350" />
<el-table-column label="产品名称" align="center" prop="projectSubName" min-width="240" />
<el-table-column label="订单数量" align="center" prop="allAmount" min-width="180" />
<el-table-column label="下线数量" align="center" prop="sendAmount" min-width="180" />
<el-table-column label="项目结束日期" align="center" prop="projectEndTime" :formatter="dateFormatter2" min-width="180" />
@ -79,9 +79,9 @@ const queryParams = reactive({
pageNo: 1,
pageSize: 10,
code: undefined,
projectName: undefined,
planSubCode: undefined,
planSubName:undefined
projectSubCode: undefined,
projectSubName:undefined,
customerName: undefined
})
const queryFormRef = ref() //

@ -3,3 +3,56 @@ ALTER TABLE base_procedure ADD COLUMN standard_labour_price DECIMAL ( 20, 2 ) CO
ALTER TABLE base_procedure ADD COLUMN piecework_basis CHAR ( 2 ) COMMENT '计件依据 01合格数量02报工数量' AFTER `procedure_type`;
ALTER TABLE project_sale_order ADD COLUMN `external_code` VARCHAR ( 64 ) COMMENT '销售订单号 来源用友 唯一' AFTER `code`;
ALTER TABLE system_dept ADD COLUMN `code` VARCHAR ( 16 ) COMMENT '部门编码' AFTER `name`;
ALTER TABLE project_sale_order_sub ADD COLUMN `material_id` BIGINT ( 20 ) NOT NULL COMMENT '物料id' AFTER project_order_id;
alter table project_sale_order_sub DROP INDEX uk_project_name;
alter table project_sale_order_sub ADD UNIQUE KEY `uk_project_material`(`project_order_id`, `material_id`);
alter table project_sale_order_sub MODIFY COLUMN `name` varchar(128) COMMENT '子项目名称,唯一';
DROP TABLE IF EXISTS `project_sale_order`;
CREATE TABLE `project_sale_order` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增字段,唯一',
`code` varchar(64) NOT NULL COMMENT '项目编号,唯一',
`external_code` varchar(64) DEFAULT NULL COMMENT '销售订单号 来源用友 唯一',
`order_status` int(11) NOT NULL DEFAULT '0' COMMENT '单据状态 已保存/已送审/已审核/已启动/已打回/已终止',
`order_time` datetime NOT NULL COMMENT '单据日期',
`delivery_status` tinyint(1) COMMENT '发货状态 未发货/部分发货/全部发货',
`business_man` bigint(20) COMMENT '业务员',
`business_dept_id` bigint(20) NOT NULL COMMENT '提出部门id',
`customer_id` bigint(20) NOT NULL COMMENT '客户id',
`contract_no` varchar(128) DEFAULT NULL COMMENT '合同编号',
`project_name` varchar(255) COMMENT '项目名称',
`business_line` char(1) NOT NULL COMMENT '业务线',
`blueprint_no` varchar(32) DEFAULT NULL COMMENT '图号',
`has_price` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否有价格',
`price` decimal(20,6) DEFAULT NULL COMMENT '价格 保留四位小数',
`currency` char(1) DEFAULT NULL COMMENT '币种',
`project_start_time` datetime NOT NULL COMMENT '项目开始时间',
`project_end_time` datetime NOT NULL COMMENT '项目结束时间',
`is_urgency` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否紧急',
`property` tinyint(1) COMMENT '性质 新制|维修',
`reference_technology` varchar(255) DEFAULT NULL COMMENT '可引用的原有技术',
`has_alter` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否已变更',
`last_alter_time` datetime DEFAULT NULL COMMENT '上一次变更时间',
`quality_requirement` varchar(255) DEFAULT NULL COMMENT '检验要求',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`has_contract` tinyint(1) NOT NULL DEFAULT '0' COMMENT '有无合同',
`has_technology_protocol` tinyint(1) NOT NULL DEFAULT '0' COMMENT '有无技术协议',
`has_blueprint` tinyint(1) NOT NULL DEFAULT '0' COMMENT '有无图纸/数模',
`blueprint_remark` varchar(255) DEFAULT NULL COMMENT '图纸/数模 说明',
`is_snapshot` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否快照',
`snapshot_order_time` datetime DEFAULT NULL COMMENT '快照原始单据日期',
`snapshot_id` bigint(20) DEFAULT NULL COMMENT '快照原始id',
`snapshot_code` varchar(64) DEFAULT NULL COMMENT '快照原始单据号',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态,1表示正常2表示禁用',
`creator` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updater` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
`tenant_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '租户编号',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uk_code` (`code`,`tenant_id`) USING BTREE
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC COMMENT='项目销售订单表';

Loading…
Cancel
Save