Commit f55f42d268bebf4a0b8cbad1a362c75080ba81e7

Authored by yeqianyong
2 parents 0f32db3e 14bc0f1f

Merge remote-tracking branch 'origin/master_0929' into master_0929

Showing 18 changed files with 1034 additions and 11 deletions
... ... @@ -184,7 +184,7 @@ create table `tbl_contract_std_processing_line`
184 184 `industry` VARCHAR(100) COMMENT '行业',
185 185 `quality` VARCHAR(100) COMMENT '品质',
186 186 `loss_rate` VARCHAR(50) COMMENT '损耗',
187   - `supply_time` DATE COMMENT '提供时间',
  187 + `supply_time` VARCHAR(50) COMMENT '提供时间',
188 188 `material_product_ratio` VARCHAR(50) COMMENT '原材料与产品数量比',
189 189 `material_product_ratio_remarks` VARCHAR(100) COMMENT '原材料与产品数量比备注',
190 190 `product_id` VARCHAR(50) NOT NULL COMMENT '定作物名称',
... ... @@ -212,4 +212,24 @@ create table `tbl_contract_std_processing_line`
212 212 `update_by` varchar(20) not null comment '更新人',
213 213 `create_time` datetime default now() comment '创建时间',
214 214 `update_time` datetime default now() comment '更新时间'
215   -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '加工标准合同物料行' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
  215 +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '加工标准合同物料行' ROW_FORMAT = DYNAMIC;
  216 +
  217 +-- 锁价无规格操作申请单
  218 +DROP TABLE IF EXISTS `tbl_spec_lock_delay_application`;
  219 +create table `tbl_spec_lock_delay_application`
  220 +(
  221 + `id` varchar(32) primary key comment 'ID',
  222 + `contract_id` varchar(32) NOT NULL COMMENT '合同主表ID',
  223 + `spec_lock_date` DATE COMMENT '现申请锁规格日期',
  224 + `application_count` INT COMMENT '申请次数(第几次申请)',
  225 + `delay_reason` VARCHAR(200) COMMENT '延迟原因',
  226 + `approval_status` VARCHAR(50) COMMENT '审核状态',
  227 + `approver_id` VARCHAR(32) COMMENT '审核人',
  228 + `approved_at` datetime COMMENT '审核时间',
  229 + `create_by_id` varchar(32) not null comment '创建人ID',
  230 + `create_by` varchar(20) not null comment '创建人',
  231 + `update_by_id` varchar(32) not null comment '更新人ID',
  232 + `update_by` varchar(20) not null comment '更新人',
  233 + `create_time` datetime default now() comment '创建时间',
  234 + `update_time` datetime default now() comment '更新时间'
  235 +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '锁价无规格操作申请单' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
... ...
... ... @@ -70,8 +70,7 @@ public class GetContractStdProcessingLineBo extends BaseBo<ContractStdProcessing
70 70 * 提供时间
71 71 */
72 72 @ApiModelProperty("提供时间")
73   - @JsonFormat(pattern = StringPool.DATE_PATTERN)
74   - private LocalDate supplyTime;
  73 + private String supplyTime;
75 74
76 75 /**
77 76 * 原材料与产品数量比
... ...
  1 +package com.lframework.xingyun.sc.bo.contract;
  2 +
  3 +import com.fasterxml.jackson.annotation.JsonFormat;
  4 +import com.lframework.starter.common.constants.StringPool;
  5 +import com.lframework.starter.web.core.bo.BaseBo;
  6 +import com.lframework.xingyun.sc.entity.SpecLockDelayApplication;
  7 +import io.swagger.annotations.ApiModelProperty;
  8 +import lombok.Data;
  9 +
  10 +import java.math.BigDecimal;
  11 +import java.time.LocalDate;
  12 +
  13 +/**
  14 + * <p>
  15 + * 锁价无规格操作申请单 GetBo
  16 + * </p>
  17 + */
  18 +@Data
  19 +public class GetSpecLockDelayApplicationBo extends BaseBo<SpecLockDelayApplication> {
  20 +
  21 + /**
  22 + * ID
  23 + */
  24 + @ApiModelProperty("ID")
  25 + private String id;
  26 +
  27 + /**
  28 + * 合同主表ID
  29 + */
  30 + @ApiModelProperty("合同主表ID")
  31 + private String contractId;
  32 +
  33 + /**
  34 + * 合同编号
  35 + */
  36 + @ApiModelProperty("合同编号")
  37 + private String contractCode;
  38 +
  39 + /**
  40 + * 办事处名称
  41 + */
  42 + @ApiModelProperty("办事处名称")
  43 + private String deptName;
  44 +
  45 + /**
  46 + * 制单日期
  47 + */
  48 + @ApiModelProperty("制单日期")
  49 + private LocalDate contractDocumentDate;
  50 +
  51 + /**
  52 + * 订货日期
  53 + */
  54 + @ApiModelProperty("订货日期")
  55 + @JsonFormat(pattern = StringPool.DATE_PATTERN)
  56 + private LocalDate orderDate;
  57 +
  58 + /**
  59 + * 现申请锁规格日期
  60 + */
  61 + @ApiModelProperty("现申请锁规格日期")
  62 + @JsonFormat(pattern = StringPool.DATE_PATTERN)
  63 + private LocalDate specLockDate;
  64 +
  65 + /**
  66 + * 申请次数(第几次申请)
  67 + */
  68 + @ApiModelProperty("申请次数(第几次申请)")
  69 + private Integer applicationCount;
  70 +
  71 + /**
  72 + * 客户名称
  73 + */
  74 + @ApiModelProperty("客户名称")
  75 + private String customerName;
  76 +
  77 + /**
  78 + * 延迟原因
  79 + */
  80 + @ApiModelProperty("延迟原因")
  81 + private String delayReason;
  82 +
  83 + /**
  84 + * 审核状态
  85 + */
  86 + @ApiModelProperty("审核状态")
  87 + private String approvalStatus;
  88 +
  89 + private String approvalStatusName;
  90 +
  91 + /**
  92 + * 订单类型
  93 + */
  94 + @ApiModelProperty("订单类型")
  95 + private String contractType;
  96 +
  97 + /**
  98 + * 生产厂名称
  99 + */
  100 + @ApiModelProperty("生产厂名称")
  101 + private String workshopName;
  102 +
  103 + /**
  104 + * 数量(t)
  105 + */
  106 + @ApiModelProperty(value = "数量(t)")
  107 + private BigDecimal totalQuantity;
  108 +
  109 + public GetSpecLockDelayApplicationBo() {
  110 +
  111 + }
  112 +
  113 + public GetSpecLockDelayApplicationBo(SpecLockDelayApplication dto) {
  114 +
  115 + super(dto);
  116 + }
  117 +
  118 + @Override
  119 + public BaseBo<SpecLockDelayApplication> convert(SpecLockDelayApplication dto) {
  120 + return super.convert(dto);
  121 + }
  122 +
  123 + @Override
  124 + protected void afterInit(SpecLockDelayApplication dto) {
  125 +
  126 + }
  127 +}
... ...
  1 +package com.lframework.xingyun.sc.bo.contract;
  2 +
  3 +import com.fasterxml.jackson.annotation.JsonFormat;
  4 +import com.lframework.starter.common.constants.StringPool;
  5 +import com.lframework.starter.web.core.bo.BaseBo;
  6 +import com.lframework.xingyun.sc.entity.SpecLockDelayApplication;
  7 +import io.swagger.annotations.ApiModelProperty;
  8 +import lombok.Data;
  9 +import org.hibernate.validator.constraints.Length;
  10 +
  11 +import java.math.BigDecimal;
  12 +import java.time.LocalDate;
  13 +
  14 +/**
  15 + * <p>
  16 + * 锁价无规格操作申请单 QueryBo
  17 + * </p>
  18 + */
  19 +@Data
  20 +public class QuerySpecLockDelayApplicationBo extends BaseBo<SpecLockDelayApplication> {
  21 +
  22 + /**
  23 + * ID
  24 + */
  25 + @ApiModelProperty("ID")
  26 + private String id;
  27 +
  28 + /**
  29 + * 合同主表ID
  30 + */
  31 + @ApiModelProperty("合同主表ID")
  32 + private String contractId;
  33 +
  34 + /**
  35 + * 合同编号
  36 + */
  37 + @ApiModelProperty("合同编号")
  38 + private String contractCode;
  39 +
  40 + /**
  41 + * 办事处名称
  42 + */
  43 + @ApiModelProperty("办事处名称")
  44 + private String deptName;
  45 +
  46 + /**
  47 + * 制单日期
  48 + */
  49 + @ApiModelProperty("制单日期")
  50 + private LocalDate contractDocumentDate;
  51 +
  52 + /**
  53 + * 订货日期
  54 + */
  55 + @ApiModelProperty("订货日期")
  56 + @JsonFormat(pattern = StringPool.DATE_PATTERN)
  57 + private LocalDate orderDate;
  58 +
  59 + /**
  60 + * 现申请锁规格日期
  61 + */
  62 + @ApiModelProperty("现申请锁规格日期")
  63 + private LocalDate specLockDate;
  64 +
  65 + /**
  66 + * 申请次数(第几次申请)
  67 + */
  68 + @ApiModelProperty("申请次数(第几次申请)")
  69 + private Integer applicationCount;
  70 +
  71 + /**
  72 + * 客户名称
  73 + */
  74 + @ApiModelProperty("客户名称")
  75 + private String customerName;
  76 +
  77 + /**
  78 + * 审核状态
  79 + */
  80 + @ApiModelProperty("审核状态")
  81 + private String approvalStatus;
  82 +
  83 + private String approvalStatusName;
  84 +
  85 + /**
  86 + * 订单类型
  87 + */
  88 + @ApiModelProperty("订单类型")
  89 + private String contractType;
  90 +
  91 + /**
  92 + * 生产厂名称
  93 + */
  94 + @ApiModelProperty("生产厂名称")
  95 + private String workshopName;
  96 +
  97 + /**
  98 + * 延迟原因
  99 + */
  100 + @ApiModelProperty(value = "延迟原因")
  101 + private String delayReason;
  102 +
  103 + /**
  104 + * 数量(t)
  105 + */
  106 + @ApiModelProperty(value = "数量(t)")
  107 + private BigDecimal totalQuantity;
  108 +
  109 + public QuerySpecLockDelayApplicationBo() {
  110 +
  111 + }
  112 +
  113 + public QuerySpecLockDelayApplicationBo(SpecLockDelayApplication dto) {
  114 +
  115 + super(dto);
  116 + }
  117 +
  118 + @Override
  119 + public BaseBo<SpecLockDelayApplication> convert(SpecLockDelayApplication dto) {
  120 + return super.convert(dto);
  121 + }
  122 +
  123 + @Override
  124 + protected void afterInit(SpecLockDelayApplication dto) {
  125 +
  126 + }
  127 +}
... ...
... ... @@ -538,7 +538,8 @@ public class ContractDistributorStandardController extends DefaultBaseController
538 538 List<String> remarksList = contractDistributorStandardList.stream()
539 539 .map(ContractDistributorStandard::getRemarks)
540 540 .filter(StringUtils::isNotEmpty)
541   - .limit(3) // 限制前3个
  541 + .distinct() // 去重
  542 + .limit(3) // 限制前3个不重复的
542 543 .collect(Collectors.toList());
543 544
544 545 return InvokeResultBuilder.success(remarksList);
... ...
  1 +package com.lframework.xingyun.sc.controller.contract;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.Wrapper;
  4 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  5 +import com.lframework.starter.common.exceptions.impl.DefaultClientException;
  6 +import com.lframework.starter.common.utils.CollectionUtil;
  7 +import com.lframework.starter.common.utils.DateUtil;
  8 +import com.lframework.starter.web.core.annotations.security.HasPermission;
  9 +import com.lframework.starter.web.core.components.resp.InvokeResult;
  10 +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder;
  11 +import com.lframework.starter.web.core.components.resp.PageResult;
  12 +import com.lframework.starter.web.core.controller.DefaultBaseController;
  13 +import com.lframework.starter.web.core.utils.PageResultUtil;
  14 +import com.lframework.starter.web.inner.entity.SysDataDicItem;
  15 +import com.lframework.starter.web.inner.entity.SysDept;
  16 +import com.lframework.starter.web.inner.service.system.SysDataDicItemService;
  17 +import com.lframework.starter.web.inner.service.system.SysDeptService;
  18 +import com.lframework.xingyun.basedata.entity.Customer;
  19 +import com.lframework.xingyun.basedata.entity.Workshop;
  20 +import com.lframework.xingyun.basedata.service.customer.CustomerService;
  21 +import com.lframework.xingyun.basedata.service.workshop.WorkshopService;
  22 +import com.lframework.xingyun.sc.bo.contract.GetSpecLockDelayApplicationBo;
  23 +import com.lframework.xingyun.sc.bo.contract.QueryContractDistributorStandardBo;
  24 +import com.lframework.xingyun.sc.bo.contract.QuerySpecLockDelayApplicationBo;
  25 +import com.lframework.xingyun.sc.entity.ContractDistributorStandard;
  26 +import com.lframework.xingyun.sc.entity.SpecLockDelayApplication;
  27 +import com.lframework.xingyun.sc.service.contract.ContractDistributorStandardService;
  28 +import com.lframework.xingyun.sc.service.contract.SpecLockDelayApplicationService;
  29 +import com.lframework.xingyun.sc.vo.contract.createVo.CreateSpecLockDelayApplicationVo;
  30 +import com.lframework.xingyun.sc.vo.contract.queryVo.QuerySpecLockDelayApplicationVo;
  31 +import com.lframework.xingyun.sc.vo.contract.updateVo.UpdateSpecLockDelayApplicationVo;
  32 +import io.swagger.annotations.Api;
  33 +import io.swagger.annotations.ApiImplicitParam;
  34 +import io.swagger.annotations.ApiOperation;
  35 +import org.apache.commons.collections4.CollectionUtils;
  36 +import org.apache.commons.lang3.StringUtils;
  37 +import org.springframework.beans.factory.annotation.Autowired;
  38 +import org.springframework.validation.annotation.Validated;
  39 +import org.springframework.web.bind.annotation.*;
  40 +
  41 +import javax.validation.constraints.NotBlank;
  42 +import java.util.List;
  43 +import java.util.Map;
  44 +import java.util.function.Function;
  45 +import java.util.stream.Collectors;
  46 +
  47 +/**
  48 + * 锁价无规格操作申请单 Controller
  49 + */
  50 +@Api(tags = "锁价无规格操作申请单")
  51 +@Validated
  52 +@RestController
  53 +@RequestMapping("/contract/specLockDelayApplication")
  54 +public class SpecLockDelayApplicationController extends DefaultBaseController {
  55 +
  56 + @Autowired
  57 + private SpecLockDelayApplicationService specLockDelayApplicationService;
  58 + @Autowired
  59 + private ContractDistributorStandardService contractDistributorStandardService;
  60 + @Autowired
  61 + private SysDeptService sysDeptService;
  62 + @Autowired
  63 + private SysDataDicItemService sysDataDicItemService;
  64 + @Autowired
  65 + private CustomerService customerService;
  66 + @Autowired
  67 + private WorkshopService workshopService;
  68 +
  69 + public static final String AUDIT_STATUS_DIC_CODE = "AUDIT_STATUS"; // 审核状态
  70 +
  71 +
  72 + /**
  73 + * 查询列表
  74 + */
  75 + @ApiOperation("查询列表")
  76 + @HasPermission({"entity:speclockdelayapplication:query"})
  77 + @GetMapping("/query")
  78 + public InvokeResult<PageResult<QuerySpecLockDelayApplicationBo>> query(QuerySpecLockDelayApplicationVo vo) {
  79 + if (vo != null && StringUtils.isNotBlank(vo.getContractCode())) {
  80 + Wrapper<ContractDistributorStandard> wrapper = Wrappers.lambdaQuery(ContractDistributorStandard.class)
  81 + .like(ContractDistributorStandard::getCode, vo.getContractCode());
  82 + List<ContractDistributorStandard> contractDistributorStandardList = contractDistributorStandardService.list(wrapper);
  83 + if (CollectionUtils.isEmpty(contractDistributorStandardList)) {
  84 + return InvokeResultBuilder.success(new PageResult<>());
  85 + }
  86 +
  87 + vo.setContractIdList(contractDistributorStandardList.stream().map(ContractDistributorStandard::getId).collect(Collectors.toList()));
  88 + }
  89 +
  90 +
  91 + PageResult<SpecLockDelayApplication> pageResult = specLockDelayApplicationService.query(getPageIndex(vo), getPageSize(vo), vo);
  92 +
  93 + List<SpecLockDelayApplication> datas = pageResult.getDatas();
  94 + List<QuerySpecLockDelayApplicationBo> results = null;
  95 +
  96 + if (!CollectionUtil.isEmpty(datas)) {
  97 + results = datas.stream().map(QuerySpecLockDelayApplicationBo::new).collect(Collectors.toList());
  98 + }
  99 +
  100 + if (CollectionUtils.isEmpty(results)) {
  101 + return InvokeResultBuilder.success(new PageResult<>());
  102 + }
  103 +
  104 + List<String> contractIdList = results.stream().map(QuerySpecLockDelayApplicationBo::getContractId).collect(Collectors.toList());
  105 + List<ContractDistributorStandard> contractDistributorStandardList = contractDistributorStandardService.listByIds(contractIdList);
  106 + Map<String, ContractDistributorStandard> contractDistributorStandardMap = contractDistributorStandardList
  107 + .stream().collect(Collectors.toMap(ContractDistributorStandard::getId, Function.identity()));
  108 + List<String> deptIdList = contractDistributorStandardList.stream().map(ContractDistributorStandard::getDeptId).collect(Collectors.toList());
  109 + Map<String, SysDept> sysDeptMap = CollectionUtils.emptyIfNull(sysDeptService.listByIds(deptIdList))
  110 + .stream()
  111 + .collect(Collectors.toMap(SysDept::getId, Function.identity()));
  112 + List<String> buyerIdList = contractDistributorStandardList.stream().map(ContractDistributorStandard::getBuyer).collect(Collectors.toList());
  113 + Map<String, Customer> customerMap = CollectionUtils.emptyIfNull(customerService.listByIds(buyerIdList))
  114 + .stream()
  115 + .collect(Collectors.toMap(Customer::getId, Function.identity()));
  116 + List<SysDataDicItem> sysDataDicItemList = sysDataDicItemService.findByDicCode(AUDIT_STATUS_DIC_CODE);
  117 + Map<String, String> auditCodeAndNameMap = CollectionUtils.emptyIfNull(sysDataDicItemList)
  118 + .stream()
  119 + .collect(Collectors.toMap(SysDataDicItem::getCode, SysDataDicItem::getName));
  120 + List<String> workshopIdList = contractDistributorStandardList.stream().map(ContractDistributorStandard::getWorkshopId).collect(Collectors.toList());
  121 + Map<String, Workshop> workshopMap = CollectionUtils.emptyIfNull(workshopService.listByIds(workshopIdList))
  122 + .stream()
  123 + .collect(Collectors.toMap(Workshop::getId, Function.identity()));
  124 +
  125 + results.forEach(result -> {
  126 + if (result == null || StringUtils.isBlank(result.getContractId())) {
  127 + return;
  128 + }
  129 +
  130 + ContractDistributorStandard contractDistributorStandard = contractDistributorStandardMap.get(result.getContractId());
  131 + if (contractDistributorStandard == null) {
  132 + return;
  133 + }
  134 +
  135 + Customer customer = customerMap.get(contractDistributorStandard.getBuyer());
  136 + String auditName = auditCodeAndNameMap.get(result.getApprovalStatus());
  137 + SysDept sysDept = sysDeptMap.get(contractDistributorStandard.getDeptId());
  138 + Workshop workshop = workshopMap.get(contractDistributorStandard.getWorkshopId());
  139 + result.setContractCode(contractDistributorStandard.getCode());
  140 + result.setDeptName(sysDept.getName());
  141 + result.setContractDocumentDate(contractDistributorStandard.getCreateTime().toLocalDate());
  142 + result.setOrderDate(contractDistributorStandard.getOrderDate());
  143 + result.setCustomerName(customer.getName());
  144 + result.setApprovalStatusName(auditName);
  145 + result.setContractType(contractDistributorStandard.getType());
  146 + result.setWorkshopName(workshop.getName());
  147 + result.setTotalQuantity(contractDistributorStandard.getTotalQuantity());
  148 + });
  149 +
  150 + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results));
  151 + }
  152 +
  153 + /**
  154 + * 根据ID查询
  155 + */
  156 + @ApiOperation("根据ID查询")
  157 + @ApiImplicitParam(value = "id", name = "id", paramType = "query", required = true)
  158 + @HasPermission({"entity:speclockdelayapplication:query"})
  159 + @GetMapping
  160 + public InvokeResult<GetSpecLockDelayApplicationBo> get(@NotBlank(message = "id不能为空!") String id) {
  161 +
  162 + SpecLockDelayApplication data = specLockDelayApplicationService.findById(id);
  163 + if (data == null) {
  164 + throw new DefaultClientException("锁价无规格操作申请单不存在!");
  165 + }
  166 +
  167 + GetSpecLockDelayApplicationBo result = new GetSpecLockDelayApplicationBo(data);
  168 + ContractDistributorStandard contractDistributorStandard = contractDistributorStandardService.findById(result.getContractId());
  169 + if (contractDistributorStandard == null) {
  170 + throw new DefaultClientException("对应锁价无规格合同不存在!");
  171 + }
  172 +
  173 + SysDept sysDept = sysDeptService.findById(contractDistributorStandard.getDeptId());
  174 + Customer customer = customerService.findById(contractDistributorStandard.getBuyer());
  175 + SysDataDicItem sysDataDicItem = sysDataDicItemService.findByCode(AUDIT_STATUS_DIC_CODE, result.getApprovalStatus());
  176 + Workshop workshop = workshopService.findById(contractDistributorStandard.getWorkshopId());
  177 + result.setContractCode(contractDistributorStandard.getCode());
  178 + result.setDeptName(sysDept.getName());
  179 + result.setContractDocumentDate(contractDistributorStandard.getCreateTime().toLocalDate());
  180 + result.setOrderDate(contractDistributorStandard.getOrderDate());
  181 + result.setCustomerName(customer.getName());
  182 + result.setApprovalStatusName(sysDataDicItem.getName());
  183 + result.setContractType(contractDistributorStandard.getType());
  184 + result.setWorkshopName(workshop.getName());
  185 + result.setTotalQuantity(contractDistributorStandard.getTotalQuantity());
  186 +
  187 + return InvokeResultBuilder.success(result);
  188 + }
  189 +
  190 + /**
  191 + * 新增
  192 + */
  193 + @ApiOperation("新增")
  194 + @HasPermission({"entity:speclockdelayapplication:add"})
  195 + @PostMapping
  196 + public InvokeResult<Void> create(@RequestBody CreateSpecLockDelayApplicationVo vo) {
  197 +
  198 + specLockDelayApplicationService.create(vo);
  199 +
  200 + return InvokeResultBuilder.success();
  201 + }
  202 +
  203 + /**
  204 + * 修改
  205 + */
  206 + @ApiOperation("修改")
  207 + @HasPermission({"entity:speclockdelayapplication:modify"})
  208 + @PutMapping
  209 + public InvokeResult<Void> update(@RequestBody UpdateSpecLockDelayApplicationVo vo) {
  210 +
  211 + specLockDelayApplicationService.update(vo);
  212 +
  213 + specLockDelayApplicationService.cleanCacheByKey(vo.getId());
  214 +
  215 + return InvokeResultBuilder.success();
  216 + }
  217 +
  218 + /**
  219 + * 获取订单申请延期数据
  220 + */
  221 + @ApiOperation("获取订单申请延期数据")
  222 + @GetMapping("/showContract")
  223 + public InvokeResult<GetSpecLockDelayApplicationBo> showContract(@NotBlank(message = "id不能为空!") String id) {
  224 +
  225 + ContractDistributorStandard contractDistributorStandard = contractDistributorStandardService.findById(id);
  226 + if (contractDistributorStandard == null) {
  227 + throw new DefaultClientException("对应锁价无规格合同不存在!");
  228 + }
  229 +
  230 + QuerySpecLockDelayApplicationVo vo = new QuerySpecLockDelayApplicationVo();
  231 + vo.setContractId(id);
  232 + List<SpecLockDelayApplication> specLockDelayApplicationList = specLockDelayApplicationService.query(vo);
  233 +
  234 + GetSpecLockDelayApplicationBo result = new GetSpecLockDelayApplicationBo();
  235 +
  236 + SysDept sysDept = sysDeptService.findById(contractDistributorStandard.getDeptId());
  237 + Customer customer = customerService.findById(contractDistributorStandard.getBuyer());
  238 + Workshop workshop = workshopService.findById(contractDistributorStandard.getWorkshopId());
  239 + result.setContractCode(contractDistributorStandard.getCode());
  240 + result.setContractId(id);
  241 + result.setDeptName(sysDept.getName());
  242 + result.setContractDocumentDate(contractDistributorStandard.getCreateTime().toLocalDate());
  243 + result.setOrderDate(contractDistributorStandard.getOrderDate());
  244 + result.setCustomerName(customer.getName());
  245 + result.setContractType(contractDistributorStandard.getType());
  246 + result.setWorkshopName(workshop.getName());
  247 + result.setApplicationCount(CollectionUtils.isEmpty(specLockDelayApplicationList) ? 1 : specLockDelayApplicationList.size() + 1);
  248 + result.setTotalQuantity(contractDistributorStandard.getTotalQuantity());
  249 +
  250 + return InvokeResultBuilder.success(result);
  251 + }
  252 +
  253 +}
... ...
... ... @@ -65,7 +65,7 @@ public class ContractStdProcessingLine extends BaseEntity implements BaseDto {
65 65 /**
66 66 * 提供时间
67 67 */
68   - private LocalDate supplyTime;
  68 + private String supplyTime;
69 69
70 70 /**
71 71 * 原材料与产品数量比
... ...
  1 +package com.lframework.xingyun.sc.entity;
  2 +
  3 +
  4 +import com.baomidou.mybatisplus.annotation.FieldFill;
  5 +import com.baomidou.mybatisplus.annotation.TableField;
  6 +import com.baomidou.mybatisplus.annotation.TableName;
  7 +import com.lframework.starter.web.core.dto.BaseDto;
  8 +import com.lframework.starter.web.core.entity.BaseEntity;
  9 +import lombok.Data;
  10 +
  11 +import java.time.LocalDate;
  12 +import java.time.LocalDateTime;
  13 +
  14 +/**
  15 + * <p>
  16 + * 锁价无规格操作申请单
  17 + * </p>
  18 + */
  19 +@Data
  20 +@TableName("tbl_spec_lock_delay_application")
  21 +public class SpecLockDelayApplication extends BaseEntity implements BaseDto {
  22 +
  23 + private static final long serialVersionUID = 1L;
  24 +
  25 + public static final String CACHE_NAME = "SpecLockDelayApplication";
  26 +
  27 + /**
  28 + * ID
  29 + */
  30 + private String id;
  31 +
  32 + /**
  33 + * 合同主表ID
  34 + */
  35 + private String contractId;
  36 +
  37 + /**
  38 + * 现申请锁规格日期
  39 + */
  40 + private LocalDate specLockDate;
  41 +
  42 + /**
  43 + * 申请次数(第几次申请)
  44 + */
  45 + private Integer applicationCount;
  46 +
  47 + /**
  48 + * 延迟原因
  49 + */
  50 + private String delayReason;
  51 +
  52 + /**
  53 + * 审核状态
  54 + */
  55 + private String approvalStatus;
  56 +
  57 + /**
  58 + * 审核人
  59 + */
  60 + private String approverId;
  61 +
  62 + /**
  63 + * 审核时间
  64 + */
  65 + private LocalDateTime approvedAt;
  66 +
  67 + /**
  68 + * 创建人ID
  69 + */
  70 + @TableField(fill = FieldFill.INSERT)
  71 + private String createById;
  72 +
  73 + /**
  74 + * 创建人
  75 + */
  76 + @TableField(fill = FieldFill.INSERT)
  77 + private String createBy;
  78 +
  79 + /**
  80 + * 更新人ID
  81 + */
  82 + @TableField(fill = FieldFill.INSERT_UPDATE)
  83 + private String updateById;
  84 +
  85 + /**
  86 + * 更新人
  87 + */
  88 + @TableField(fill = FieldFill.INSERT_UPDATE)
  89 + private String updateBy;
  90 +
  91 + /**
  92 + * 创建时间
  93 + */
  94 + @TableField(fill = FieldFill.INSERT)
  95 + private LocalDateTime createTime;
  96 +
  97 + /**
  98 + * 更新时间
  99 + */
  100 + @TableField(fill = FieldFill.INSERT_UPDATE)
  101 + private LocalDateTime updateTime;
  102 +
  103 +}
... ...
... ... @@ -174,7 +174,7 @@ public class ContractStdProcessingLineServiceImpl extends BaseMpServiceImpl<Cont
174 174 .set(ContractStdProcessingLine::getIndustry, StringUtil.isBlank(vo.getIndustry()) ? null : vo.getIndustry())
175 175 .set(ContractStdProcessingLine::getQuality, StringUtil.isBlank(vo.getQuality()) ? null : vo.getQuality())
176 176 .set(ContractStdProcessingLine::getLossRate, StringUtil.isBlank(vo.getLossRate()) ? null : vo.getLossRate())
177   - .set(ContractStdProcessingLine::getSupplyTime, vo.getSupplyTime() == null ? null : vo.getSupplyTime())
  177 + .set(ContractStdProcessingLine::getSupplyTime, StringUtil.isBlank(vo.getSupplyTime()) ? null : vo.getSupplyTime())
178 178 .set(ContractStdProcessingLine::getMaterialProductRatio, StringUtil.isBlank(vo.getMaterialProductRatio()) ? null : vo.getMaterialProductRatio())
179 179 .set(ContractStdProcessingLine::getMaterialProductRatioRemarks, StringUtil.isBlank(vo.getMaterialProductRatioRemarks()) ? null : vo.getMaterialProductRatioRemarks())
180 180 .set(ContractStdProcessingLine::getProductId, StringUtil.isBlank(vo.getProductId()) ? null : vo.getProductId())
... ...
  1 +package com.lframework.xingyun.sc.impl.contract;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  4 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  5 +import com.github.pagehelper.PageInfo;
  6 +import com.lframework.starter.common.exceptions.impl.DefaultClientException;
  7 +import com.lframework.starter.common.utils.Assert;
  8 +import com.lframework.starter.common.utils.ObjectUtil;
  9 +import com.lframework.starter.web.core.annotations.oplog.OpLog;
  10 +import com.lframework.starter.web.core.components.resp.PageResult;
  11 +import com.lframework.starter.web.core.impl.BaseMpServiceImpl;
  12 +import com.lframework.starter.web.core.utils.IdUtil;
  13 +import com.lframework.starter.web.core.utils.OpLogUtil;
  14 +import com.lframework.starter.web.core.utils.PageHelperUtil;
  15 +import com.lframework.starter.web.core.utils.PageResultUtil;
  16 +import com.lframework.starter.web.inner.components.oplog.OtherOpLogType;
  17 +import com.lframework.xingyun.sc.entity.SpecLockDelayApplication;
  18 +import com.lframework.xingyun.sc.mappers.SpecLockDelayApplicationMapper;
  19 +import com.lframework.xingyun.sc.service.contract.SpecLockDelayApplicationService;
  20 +import com.lframework.xingyun.sc.vo.contract.createVo.CreateSpecLockDelayApplicationVo;
  21 +import com.lframework.xingyun.sc.vo.contract.queryVo.QuerySpecLockDelayApplicationVo;
  22 +import com.lframework.xingyun.sc.vo.contract.updateVo.UpdateSpecLockDelayApplicationVo;
  23 +import org.springframework.cache.annotation.CacheEvict;
  24 +import org.springframework.cache.annotation.Cacheable;
  25 +import org.springframework.stereotype.Service;
  26 +import org.springframework.transaction.annotation.Transactional;
  27 +
  28 +import java.io.Serializable;
  29 +import java.util.List;
  30 +
  31 +@Service
  32 +public class SpecLockDelayApplicationServiceImpl extends BaseMpServiceImpl<SpecLockDelayApplicationMapper, SpecLockDelayApplication> implements SpecLockDelayApplicationService {
  33 +
  34 + @Override
  35 + public PageResult<SpecLockDelayApplication> query(Integer pageIndex, Integer pageSize, QuerySpecLockDelayApplicationVo vo) {
  36 +
  37 + Assert.greaterThanZero(pageIndex);
  38 + Assert.greaterThanZero(pageSize);
  39 +
  40 + PageHelperUtil.startPage(pageIndex, pageSize);
  41 + List<SpecLockDelayApplication> datas = this.query(vo);
  42 +
  43 + return PageResultUtil.convert(new PageInfo<>(datas));
  44 + }
  45 +
  46 + @Override
  47 + public List<SpecLockDelayApplication> query(QuerySpecLockDelayApplicationVo vo) {
  48 +
  49 + return getBaseMapper().query(vo);
  50 + }
  51 +
  52 + @Cacheable(value = SpecLockDelayApplication.CACHE_NAME, key = "@cacheVariables.tenantId() + #id", unless = "#result == null")
  53 + @Override
  54 + public SpecLockDelayApplication findById(String id) {
  55 +
  56 + return getBaseMapper().selectById(id);
  57 + }
  58 +
  59 + @OpLog(type = OtherOpLogType.class, name = "新增锁价无规格操作申请单,ID:{}", params = {"#id"})
  60 + @Transactional(rollbackFor = Exception.class)
  61 + @Override
  62 + public String create(CreateSpecLockDelayApplicationVo vo) {
  63 +
  64 + SpecLockDelayApplication data = new SpecLockDelayApplication();
  65 + data.setId(IdUtil.getUUID());
  66 + data.setContractId(vo.getContractId());
  67 + data.setSpecLockDate(vo.getSpecLockDate());
  68 + data.setApplicationCount(vo.getApplicationCount());
  69 + data.setDelayReason(vo.getDelayReason());
  70 + data.setApprovalStatus(vo.getApprovalStatus());
  71 +
  72 + getBaseMapper().insert(data);
  73 +
  74 + OpLogUtil.setVariable("id", data.getId());
  75 + OpLogUtil.setExtra(vo);
  76 +
  77 + return data.getId();
  78 + }
  79 +
  80 + @OpLog(type = OtherOpLogType.class, name = "修改锁价无规格操作申请单,ID:{}", params = {"#id"})
  81 + @Transactional(rollbackFor = Exception.class)
  82 + @Override
  83 + public void update(UpdateSpecLockDelayApplicationVo vo) {
  84 +
  85 + SpecLockDelayApplication data = getBaseMapper().selectById(vo.getId());
  86 + if (ObjectUtil.isNull(data)) {
  87 + throw new DefaultClientException("锁价无规格操作申请单不存在!");
  88 + }
  89 +
  90 + LambdaUpdateWrapper<SpecLockDelayApplication> updateWrapper = Wrappers.lambdaUpdate(SpecLockDelayApplication.class)
  91 + .set(SpecLockDelayApplication::getContractId, vo.getContractId())
  92 + .set(SpecLockDelayApplication::getSpecLockDate, vo.getSpecLockDate())
  93 + .set(SpecLockDelayApplication::getApplicationCount, vo.getApplicationCount())
  94 + .set(SpecLockDelayApplication::getDelayReason, vo.getDelayReason())
  95 + .set(SpecLockDelayApplication::getApprovalStatus, vo.getApprovalStatus())
  96 + .eq(SpecLockDelayApplication::getId, vo.getId());
  97 +
  98 + getBaseMapper().update(updateWrapper);
  99 +
  100 + OpLogUtil.setVariable("id", data.getId());
  101 + OpLogUtil.setExtra(vo);
  102 + }
  103 +
  104 + @CacheEvict(value = SpecLockDelayApplication.CACHE_NAME, key = "@cacheVariables.tenantId() + #key")
  105 + @Override
  106 + public void cleanCacheByKey(Serializable key) {
  107 +
  108 + }
  109 +}
... ...
  1 +package com.lframework.xingyun.sc.mappers;
  2 +
  3 +import com.lframework.starter.web.core.mapper.BaseMapper;
  4 +import com.lframework.xingyun.sc.entity.SpecLockDelayApplication;
  5 +import com.lframework.xingyun.sc.vo.contract.queryVo.QuerySpecLockDelayApplicationVo;
  6 +import org.apache.ibatis.annotations.Param;
  7 +
  8 +import java.util.List;
  9 +
  10 +/**
  11 + * <p>
  12 + * 锁价无规格操作申请单 Mapper 接口
  13 + * </p>
  14 + */
  15 +public interface SpecLockDelayApplicationMapper extends BaseMapper<SpecLockDelayApplication> {
  16 +
  17 + /**
  18 + * 查询列表
  19 + *
  20 + * @param vo
  21 + * @return
  22 + */
  23 + List<SpecLockDelayApplication> query(@Param("vo") QuerySpecLockDelayApplicationVo vo);
  24 +}
... ...
  1 +package com.lframework.xingyun.sc.service.contract;
  2 +
  3 +import com.lframework.starter.web.core.components.resp.PageResult;
  4 +import com.lframework.starter.web.core.service.BaseMpService;
  5 +import com.lframework.xingyun.sc.entity.SpecLockDelayApplication;
  6 +import com.lframework.xingyun.sc.vo.contract.createVo.CreateSpecLockDelayApplicationVo;
  7 +import com.lframework.xingyun.sc.vo.contract.queryVo.QuerySpecLockDelayApplicationVo;
  8 +import com.lframework.xingyun.sc.vo.contract.updateVo.UpdateSpecLockDelayApplicationVo;
  9 +
  10 +import java.util.List;
  11 +
  12 +/**
  13 + * 锁价无规格操作申请单 Service
  14 + */
  15 +public interface SpecLockDelayApplicationService extends BaseMpService<SpecLockDelayApplication> {
  16 +
  17 + /**
  18 + * 查询列表
  19 + *
  20 + * @return
  21 + */
  22 + PageResult<SpecLockDelayApplication> query(Integer pageIndex, Integer pageSize, QuerySpecLockDelayApplicationVo vo);
  23 +
  24 + /**
  25 + * 查询列表
  26 + *
  27 + * @param vo
  28 + * @return
  29 + */
  30 + List<SpecLockDelayApplication> query(QuerySpecLockDelayApplicationVo vo);
  31 +
  32 + /**
  33 + * 根据ID查询
  34 + *
  35 + * @param id
  36 + * @return
  37 + */
  38 + SpecLockDelayApplication findById(String id);
  39 +
  40 + /**
  41 + * 创建
  42 + *
  43 + * @param vo
  44 + * @return
  45 + */
  46 + String create(CreateSpecLockDelayApplicationVo vo);
  47 +
  48 + /**
  49 + * 修改
  50 + *
  51 + * @param vo
  52 + */
  53 + void update(UpdateSpecLockDelayApplicationVo vo);
  54 +
  55 +}
  56 +
... ...
... ... @@ -62,8 +62,7 @@ public class CreateContractStdProcessingLineVo implements BaseVo, Serializable {
62 62 * 提供时间
63 63 */
64 64 @ApiModelProperty("提供时间")
65   - @TypeMismatch(message = "提供时间格式有误!")
66   - private LocalDate supplyTime;
  65 + private String supplyTime;
67 66
68 67 /**
69 68 * 原材料与产品数量比
... ...
  1 +package com.lframework.xingyun.sc.vo.contract.createVo;
  2 +
  3 +import com.lframework.starter.web.core.components.validation.TypeMismatch;
  4 +import com.lframework.starter.web.core.vo.BaseVo;
  5 +import io.swagger.annotations.ApiModelProperty;
  6 +import lombok.Data;
  7 +import org.hibernate.validator.constraints.Length;
  8 +
  9 +import java.io.Serializable;
  10 +import java.time.LocalDate;
  11 +
  12 +@Data
  13 +public class CreateSpecLockDelayApplicationVo implements BaseVo, Serializable {
  14 +
  15 + private static final long serialVersionUID = 1L;
  16 +
  17 + /**
  18 + * 合同主表ID
  19 + */
  20 + @ApiModelProperty(value = "合同主表ID")
  21 + @Length(message = "合同主表ID最多允许32个字符!")
  22 + private String contractId;
  23 +
  24 + /**
  25 + * 现申请锁规格日期
  26 + */
  27 + @ApiModelProperty(value = "现申请锁规格日期")
  28 + @TypeMismatch(message = "现申请锁规格日期格式有误!")
  29 + private LocalDate specLockDate;
  30 +
  31 + /**
  32 + * 申请次数(第几次申请)
  33 + */
  34 + @ApiModelProperty(value = "申请次数(第几次申请)")
  35 + @TypeMismatch(message = "申请次数(第几次申请)格式有误!")
  36 + private Integer applicationCount;
  37 +
  38 + /**
  39 + * 延迟原因
  40 + */
  41 + @ApiModelProperty(value = "延迟原因")
  42 + @Length(message = "延迟原因最多允许200个字符!")
  43 + private String delayReason;
  44 +
  45 + /**
  46 + * 审核状态
  47 + */
  48 + @ApiModelProperty(value = "审核状态")
  49 + @Length(message = "审核状态最多允许50个字符!")
  50 + private String approvalStatus;
  51 +
  52 +}
... ...
  1 +package com.lframework.xingyun.sc.vo.contract.queryVo;
  2 +
  3 +import com.lframework.starter.web.core.vo.BaseVo;
  4 +import com.lframework.starter.web.core.vo.PageVo;
  5 +import io.swagger.annotations.ApiModelProperty;
  6 +import lombok.Data;
  7 +
  8 +import java.io.Serializable;
  9 +import java.util.List;
  10 +
  11 +@Data
  12 +public class QuerySpecLockDelayApplicationVo extends PageVo implements BaseVo, Serializable {
  13 +
  14 + private static final long serialVersionUID = 1L;
  15 +
  16 + /**
  17 + * 合同主表ID
  18 + */
  19 + @ApiModelProperty("合同主表ID")
  20 + private String contractId;
  21 +
  22 + /**
  23 + * 合同编号
  24 + */
  25 + @ApiModelProperty("合同编号")
  26 + private String contractCode;
  27 +
  28 + /**
  29 + * 审核状态
  30 + */
  31 + @ApiModelProperty("审核状态")
  32 + private String approvalStatus;
  33 +
  34 + /**
  35 + * 合同主表ID集合
  36 + */
  37 + @ApiModelProperty("合同主表ID集合")
  38 + private List<String> contractIdList;
  39 +}
... ...
... ... @@ -70,8 +70,7 @@ public class UpdateContractStdProcessingLineVo implements BaseVo, Serializable {
70 70 * 提供时间
71 71 */
72 72 @ApiModelProperty("提供时间")
73   - @TypeMismatch(message = "提供时间格式有误!")
74   - private LocalDate supplyTime;
  73 + private String supplyTime;
75 74
76 75 /**
77 76 * 原材料与产品数量比
... ...
  1 +package com.lframework.xingyun.sc.vo.contract.updateVo;
  2 +
  3 +import com.lframework.starter.web.core.components.validation.TypeMismatch;
  4 +import com.lframework.starter.web.core.vo.BaseVo;
  5 +import io.swagger.annotations.ApiModelProperty;
  6 +import lombok.Data;
  7 +import org.hibernate.validator.constraints.Length;
  8 +
  9 +import java.io.Serializable;
  10 +import java.time.LocalDate;
  11 +
  12 +@Data
  13 +public class UpdateSpecLockDelayApplicationVo implements BaseVo, Serializable {
  14 +
  15 + private static final long serialVersionUID = 1L;
  16 +
  17 + /**
  18 + * ID
  19 + */
  20 + @ApiModelProperty(value = "ID")
  21 + private String id;
  22 +
  23 + /**
  24 + * 合同主表ID
  25 + */
  26 + @ApiModelProperty(value = "合同主表ID")
  27 + @Length(message = "合同主表ID最多允许32个字符!")
  28 + private String contractId;
  29 +
  30 + /**
  31 + * 现申请锁规格日期
  32 + */
  33 + @ApiModelProperty(value = "现申请锁规格日期")
  34 + @TypeMismatch(message = "现申请锁规格日期格式有误!")
  35 + private LocalDate specLockDate;
  36 +
  37 + /**
  38 + * 申请次数(第几次申请)
  39 + */
  40 + @ApiModelProperty(value = "申请次数(第几次申请)")
  41 + @TypeMismatch(message = "申请次数(第几次申请)格式有误!")
  42 + private Integer applicationCount;
  43 +
  44 + /**
  45 + * 延迟原因
  46 + */
  47 + @ApiModelProperty(value = "延迟原因")
  48 + @Length(message = "延迟原因最多允许200个字符!")
  49 + private String delayReason;
  50 +
  51 + /**
  52 + * 审核状态
  53 + */
  54 + @ApiModelProperty(value = "审核状态")
  55 + @Length(message = "审核状态最多允许50个字符!")
  56 + private String approvalStatus;
  57 +
  58 +}
... ...
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3 +<mapper namespace="com.lframework.xingyun.sc.mappers.SpecLockDelayApplicationMapper">
  4 +
  5 + <resultMap id="SpecLockDelayApplication" type="com.lframework.xingyun.sc.entity.SpecLockDelayApplication">
  6 + <id column="id" property="id"/>
  7 + <result column="contract_id" property="contractId"/>
  8 + <result column="spec_lock_date" property="specLockDate"/>
  9 + <result column="application_count" property="applicationCount"/>
  10 + <result column="delay_reason" property="delayReason"/>
  11 + <result column="approval_status" property="approvalStatus"/>
  12 + <result column="approver_id" property="approverId"/>
  13 + <result column="approved_at" property="approvedAt"/>
  14 + <result column="create_by_id" property="createById"/>
  15 + <result column="create_by" property="createBy"/>
  16 + <result column="update_by_id" property="updateById"/>
  17 + <result column="update_by" property="updateBy"/>
  18 + <result column="create_time" property="createTime"/>
  19 + <result column="update_time" property="updateTime"/>
  20 + </resultMap>
  21 +
  22 + <sql id="SpecLockDelayApplication_sql">
  23 + SELECT tb.id,
  24 + tb.contract_id,
  25 + tb.spec_lock_date,
  26 + tb.application_count,
  27 + tb.delay_reason,
  28 + tb.approval_status,
  29 + tb.approver_id,
  30 + tb.approved_at,
  31 + tb.create_by_id,
  32 + tb.create_by,
  33 + tb.update_by_id,
  34 + tb.update_by,
  35 + tb.create_time,
  36 + tb.update_time
  37 + FROM tbl_spec_lock_delay_application AS tb
  38 + </sql>
  39 +
  40 + <select id="query" resultMap="SpecLockDelayApplication">
  41 + <include refid="SpecLockDelayApplication_sql"/>
  42 + <where>
  43 + <if test="vo.contractId != null and vo.contractId != ''">
  44 + AND tb.contract_id = #{vo.contractId}
  45 + </if>
  46 + <if test="vo.approvalStatus != null and vo.approvalStatus != ''">
  47 + AND tb.approval_status = #{vo.approvalStatus}
  48 + </if>
  49 + <if test="vo.contractIdList != null and vo.contractIdList.size() > 0">
  50 + AND tb.contract_id IN
  51 + <foreach collection="vo.contractIdList" open="(" separator="," close=")" item="item">
  52 + #{item}
  53 + </foreach>
  54 + </if>
  55 + </where>
  56 + </select>
  57 +</mapper>
... ...