diff --git a/base-fast/src/main/java/com/boge/common/publisher/BaseEvent.java b/base-fast/src/main/java/com/boge/common/publisher/BaseEvent.java new file mode 100644 index 0000000..b3e53e5 --- /dev/null +++ b/base-fast/src/main/java/com/boge/common/publisher/BaseEvent.java @@ -0,0 +1,14 @@ +package com.boge.common.publisher; + +import org.springframework.context.ApplicationEvent; + +public abstract class BaseEvent extends ApplicationEvent { + + private final long timestamp; + + public BaseEvent(Object source) { + super(source); + this.timestamp = System.currentTimeMillis(); + } + +} diff --git a/base-fast/src/main/java/com/boge/common/publisher/EventConsumer.java b/base-fast/src/main/java/com/boge/common/publisher/EventConsumer.java new file mode 100644 index 0000000..d4ebbe8 --- /dev/null +++ b/base-fast/src/main/java/com/boge/common/publisher/EventConsumer.java @@ -0,0 +1,13 @@ +package com.boge.common.publisher; + +import com.boge.modules.orderRecord.record.RecordEvent; +import org.springframework.context.event.EventListener; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +public abstract class EventConsumer { + + @Order(1) + @EventListener + public abstract void consumerEvents(T t); +} diff --git a/base-fast/src/main/java/com/boge/common/publisher/EventPublisher.java b/base-fast/src/main/java/com/boge/common/publisher/EventPublisher.java new file mode 100644 index 0000000..43efcf5 --- /dev/null +++ b/base-fast/src/main/java/com/boge/common/publisher/EventPublisher.java @@ -0,0 +1,31 @@ +package com.boge.common.publisher; + +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class EventPublisher { + private final ApplicationEventPublisher eventPublisher; + + public EventPublisher(ApplicationEventPublisher eventPublisher) { + this.eventPublisher = eventPublisher; + } + + // 同步发布(立即执行) + public void publishSync(BaseEvent event) { + try { + eventPublisher.publishEvent(event); + } catch (Exception e) { + throw e; + } + } + + // 批量发布 + public void publishBatch(List events) { + events.forEach( + baseEvent -> publishSync(baseEvent) + ); + } +} diff --git a/base-fast/src/main/java/com/boge/common/publisher/EventType.java b/base-fast/src/main/java/com/boge/common/publisher/EventType.java new file mode 100644 index 0000000..9112e42 --- /dev/null +++ b/base-fast/src/main/java/com/boge/common/publisher/EventType.java @@ -0,0 +1,9 @@ +package com.boge.common.publisher; + +public enum EventType { + CREATE, + RUNING, + FINISH, + Deprecated, + ; +} diff --git a/base-fast/src/main/java/com/boge/common/utils/CodeUtil.java b/base-fast/src/main/java/com/boge/common/utils/CodeUtil.java new file mode 100644 index 0000000..43124cf --- /dev/null +++ b/base-fast/src/main/java/com/boge/common/utils/CodeUtil.java @@ -0,0 +1,29 @@ +package com.boge.common.utils; + +import com.boge.modules.sys.coderule.ISysCodeRuleService; +import lombok.SneakyThrows; +import org.springframework.stereotype.Service; + + +/** + *

+ * 编码工具类 + *

+ * + * @author lyd + * @since 2023-05-03 + */ +@Service +public class CodeUtil { + + private static ISysCodeRuleService iSysCodeRuleService; + + // 使用构造函数注入(推荐) + public CodeUtil(ISysCodeRuleService sysCodeRuleService) { + this.iSysCodeRuleService = sysCodeRuleService; + } + @SneakyThrows + public static String getNewCode(String ruleCode){ + return iSysCodeRuleService.codeProduce(ruleCode,"1"); + } +} diff --git a/base-fast/src/main/java/com/boge/common/utils/R.java b/base-fast/src/main/java/com/boge/common/utils/R.java index 60d6469..96cdbbd 100644 --- a/base-fast/src/main/java/com/boge/common/utils/R.java +++ b/base-fast/src/main/java/com/boge/common/utils/R.java @@ -22,7 +22,7 @@ public class R extends HashMap { private static final long serialVersionUID = 1L; public R() { - put("code", 0); + put("code", 200); put("msg", "success"); } diff --git a/base-fast/src/main/java/com/boge/modules/contract/controller/ContractController.java b/base-fast/src/main/java/com/boge/modules/contract/controller/ContractController.java index a5aa45d..05f954c 100644 --- a/base-fast/src/main/java/com/boge/modules/contract/controller/ContractController.java +++ b/base-fast/src/main/java/com/boge/modules/contract/controller/ContractController.java @@ -1,19 +1,35 @@ package com.boge.modules.contract.controller; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.boge.common.publisher.EventPublisher; +import com.boge.common.publisher.EventType; import com.boge.common.query.PageQuery; +import com.boge.common.utils.CodeUtil; import com.boge.common.utils.PageUtils; import com.boge.common.utils.R; +import com.boge.common.utils.ShiroUtils; import com.boge.modules.client.entity.ClientQuery; +import com.boge.modules.contract.dao.ContractDao; import com.boge.modules.contract.entity.ContractEntity; import com.boge.modules.contract.entity.ContractQuery; import com.boge.modules.contract.service.ContractService; +import com.boge.modules.orderRecord.record.RecordEvent; +import com.boge.modules.price.entity.PriceEntity; +import com.boge.modules.price.enums.PriceApprovalEnum; +import com.boge.modules.tickets.entity.LocalStorage; +import com.boge.modules.tickets.service.LocalStorageService; +import lombok.val; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.util.Arrays; +import java.util.Date; +import java.util.List; import java.util.Map; - +import java.util.stream.Collectors; /** @@ -28,6 +44,10 @@ import java.util.Map; public class ContractController { @Autowired private ContractService contractService; + @Autowired + private LocalStorageService localStorageService; + @Autowired + private EventPublisher eventPublisher; /** * 列表 @@ -55,9 +75,15 @@ public class ContractController { */ @RequestMapping("/save") //@RequiresPermissions("flow:contract:save") - public R save(@RequestBody ContractEntity contract){ - contractService.save(contract); - + public R save(@RequestParam("form") String form, @RequestParam(value = "file",required = false) MultipartFile[] file){ + List batch = localStorageService.createBatch(file); + ContractEntity entity = JSONObject.parseObject(form, ContractEntity.class); + entity.setCreateTime(new Date()); + entity.setCreateName(ShiroUtils.getUserEntity().getUsername()); + entity.setAnnex(batch.stream().map(a->String.valueOf(a.getStorageId())).collect(Collectors.joining(","))); + entity.setStatus(PriceApprovalEnum.ASSIGN.getCode()); + entity.setContractCode(CodeUtil.getNewCode("VEHICLE_CODE")); + contractService.save(entity); return R.ok(); } @@ -66,12 +92,22 @@ public class ContractController { */ @RequestMapping("/update") //@RequiresPermissions("flow:contract:update") - public R update(@RequestBody ContractEntity contract){ - contractService.updateById(contract); - + public R update(@RequestParam("form") String form, @RequestParam(value = "file",required = false) MultipartFile[] file){ + List batch = localStorageService.createBatch(file); + ContractEntity entity = JSONObject.parseObject(form, ContractEntity.class); + List collect = batch.stream().map(a -> String.valueOf(a.getStorageId())).collect(Collectors.toList()); + if (StringUtils.isNotEmpty(entity.getAnnex())){ + String[] split = entity.getAnnex().split(","); + collect.addAll(Arrays.asList(split)); + } + entity.setAnnex(collect.stream().collect(Collectors.joining(","))); + entity.setUpdateTime(new Date()); + contractService.updateById(entity); + eventPublisher.publishSync(new RecordEvent("销售合同",entity.getContractCode(), (JSONObject)JSONObject.toJSON(entity),"ContractEntity",entity.getAnnex(), EventType.CREATE)); return R.ok(); } + /** * 删除 */ diff --git a/base-fast/src/main/java/com/boge/modules/contract/dao/ContractDao.java b/base-fast/src/main/java/com/boge/modules/contract/dao/ContractDao.java index b41f6d9..6ac1d48 100644 --- a/base-fast/src/main/java/com/boge/modules/contract/dao/ContractDao.java +++ b/base-fast/src/main/java/com/boge/modules/contract/dao/ContractDao.java @@ -4,8 +4,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.boge.modules.contract.dto.ContractDto; import com.boge.modules.contract.entity.ContractEntity; import io.swagger.models.auth.In; +import lombok.Synchronized; import org.apache.ibatis.annotations.Mapper; +import javax.transaction.Synchronization; + /** * * @@ -20,6 +23,6 @@ public interface ContractDao extends BaseMapper { * @param id * @return */ - ContractDto selectDtlById(Integer id); + ContractDto selectDtlById(Integer id); } diff --git a/base-fast/src/main/java/com/boge/modules/contract/entity/ContractEntity.java b/base-fast/src/main/java/com/boge/modules/contract/entity/ContractEntity.java index 269ab0e..3ecaddd 100644 --- a/base-fast/src/main/java/com/boge/modules/contract/entity/ContractEntity.java +++ b/base-fast/src/main/java/com/boge/modules/contract/entity/ContractEntity.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; /** @@ -25,50 +26,116 @@ public class ContractEntity implements Serializable { @TableId private Integer contractId; /** - * 合同类型 + * 1购销合同2服务合同' */ - private Integer contractType; + private String contractType; /** - * 是否是主合同 + * 项目类型:agv/集成' */ - private Integer isMaster; + private String projectType; /** - * 合同编号 + * 是否是主合同' */ - private String contractNumber; + private Boolean isMaster; /** - * 客户id + * 主合同id' */ - private Long clientId; + private Integer parentContract; /** - * 物料信息 + * 合同编号' + */ + private String contractCode; + + private String totalPrice; + /** + * 客户id' + */ + private String clientId; + /** + * 物料信息' */ private String materialJson; /** - /** - * 报价单编码 + * 是否验收' */ - private String fileNo; + private String isAcceptance; /** - * 是否验收 - */ - private Integer isAcceptance; - /** - * 创建日期 - */ - private Date createTime; - /** - * 创建日期 + * 验收日期' */ private Date acceptanceTime; /** - * 备注 + * 报价单id' + */ + private Integer priceId; + /** + * 合同生效日期 + */ + private Date effectiveTime; + /** + * 创建日期' + */ + private Date createTime; + private String CreateName; + /** + * 修改日期' + */ + private Date updateTime; + /** + * 质量标准' + */ + private String qc; + /** + * 售后说明 + */ + private String afterSales; + /** + * 交货期' + */ + private String delivery; + /** + * 交货地点' + */ + private String place; + /** + * 运输说明' + */ + private String transport; + /** + * 结算方式' + */ + private String pay; + /** + * 付款方式' + */ + private String payment; + /** + * 违约说明' + */ + private String breach; + /** + * 处理纠纷说明 + */ + private String solveDispute; + /** + * 补充说明' + */ + private String supplement; + /** + * 包装说明 + */ + private String packaging; + /** + * 附件说明 + */ + private String annex; + /** + * 审核状态1待审核2审核完毕3.审核驳回' + */ + private String status; + /** + * 备注' */ private String remarks; - /** - * 文件id - */ - private String storageId; - private String status; + } diff --git a/base-fast/src/main/java/com/boge/modules/flow/controller/FlwInstanceController.java b/base-fast/src/main/java/com/boge/modules/flow/controller/FlwInstanceController.java index 78d621b..626c46b 100644 --- a/base-fast/src/main/java/com/boge/modules/flow/controller/FlwInstanceController.java +++ b/base-fast/src/main/java/com/boge/modules/flow/controller/FlwInstanceController.java @@ -1,19 +1,29 @@ package com.boge.modules.flow.controller; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.boge.common.utils.R; import com.boge.common.utils.ShiroUtils; +import com.boge.modules.contract.entity.ContractEntity; +import com.boge.modules.flow.dto.FlowProcessParam; +import com.boge.modules.flow.entity.ActHiProcessinfoEntity; import com.boge.modules.flow.entity.FlwDeModelEntity; import com.boge.modules.flow.entity.FlwHiTaskEntity; +import com.boge.modules.flow.service.ActHiProcessinfoService; import com.boge.modules.flow.service.FlwInstanceService; import com.boge.modules.sys.entity.SysUserEntity; +import com.boge.modules.tickets.entity.LocalStorage; +import com.boge.modules.tickets.service.LocalStorageService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @RestController @RequestMapping("/flw/instance") @@ -22,9 +32,10 @@ public class FlwInstanceController { @Autowired @Lazy private FlwInstanceService instanceService; - - - + @Autowired + private LocalStorageService localStorageService; + @Autowired + private ActHiProcessinfoService actHiProcessinfoService; /** * 我的待办 @@ -60,12 +71,29 @@ public class FlwInstanceController { /** * 提交审批 */ - @PostMapping("/completeFlow") - public R completeFlow(@RequestBody Map params){ + @PostMapping("/completeFlow2") + public R completeFlow2(@RequestBody Map params){ R r = instanceService.completeTaskById(params); return r; } + @RequestMapping("/completeFlow") + public R completeFlow(@RequestParam("form") String form, @RequestParam(value = "file",required = false) MultipartFile[] file){; + List batch = localStorageService.createBatch(file); + List collect = batch.stream().map(a -> String.valueOf(a.getStorageId())).collect(Collectors.toList()); + FlowProcessParam entity = JSONObject.parseObject(form, FlowProcessParam.class); + entity.setAnnex(collect.stream().collect(Collectors.joining(","))); + R r = instanceService.completeTaskById(entity); + return r; + } + + @GetMapping("/flowProcessList") + public R flowProcessList(@RequestParam("procInstId") String procInstId){; + List list = actHiProcessinfoService.list(new LambdaQueryWrapper() + .eq(ActHiProcessinfoEntity::getProcInstId, procInstId)); + return R.ok().put("processList", list); + } + /** diff --git a/base-fast/src/main/java/com/boge/modules/flow/dao/ActHiProcessinfoDao.java b/base-fast/src/main/java/com/boge/modules/flow/dao/ActHiProcessinfoDao.java new file mode 100644 index 0000000..c5592b8 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/flow/dao/ActHiProcessinfoDao.java @@ -0,0 +1,18 @@ +package com.boge.modules.flow.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.boge.modules.flow.entity.ActHiProcessinfoEntity; +import com.boge.modules.flow.entity.FlwDeModelEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-01-09 13:56:25 + */ +@Mapper +public interface ActHiProcessinfoDao extends BaseMapper { + +} diff --git a/base-fast/src/main/java/com/boge/modules/flow/dto/FlowProcessParam.java b/base-fast/src/main/java/com/boge/modules/flow/dto/FlowProcessParam.java new file mode 100644 index 0000000..dd2db44 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/flow/dto/FlowProcessParam.java @@ -0,0 +1,31 @@ +package com.boge.modules.flow.dto; + +import lombok.Data; + +@Data +public class FlowProcessParam { + /** + * 流程实例Id + */ + private String processInstance; + /** + * 共担Id + */ + private Integer ticketsId; + /** + * 结果 + */ + private String result; + /** + * 指派人 + */ + private String userId; + /** + * 审批备注 + */ + private String remark; + /** + * 审批文件 + */ + private String annex; +} diff --git a/base-fast/src/main/java/com/boge/modules/flow/entity/ActHiProcessinfoEntity.java b/base-fast/src/main/java/com/boge/modules/flow/entity/ActHiProcessinfoEntity.java new file mode 100644 index 0000000..f578d05 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/flow/entity/ActHiProcessinfoEntity.java @@ -0,0 +1,52 @@ +package com.boge.modules.flow.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-01-09 13:56:25 + */ +@Data +@TableName("act_hi_processinfo") +public class ActHiProcessinfoEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 流程模型id + */ + @TableId + private Integer id; + /** + * 流程模型的名称 + */ + private String procInstId; + /** + * 流程模型的标识符 + */ + private String procName; + /** + * 创建人 + */ + private String annex; + /** + * 创建时间 + */ + private String remark; + /** + * 最后更新人 + */ + private String createName; + /** + * 最后更新时间 + */ + private Date createTime; + +} diff --git a/base-fast/src/main/java/com/boge/modules/flow/service/ActHiProcessinfoService.java b/base-fast/src/main/java/com/boge/modules/flow/service/ActHiProcessinfoService.java new file mode 100644 index 0000000..6af5c64 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/flow/service/ActHiProcessinfoService.java @@ -0,0 +1,19 @@ +package com.boge.modules.flow.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.boge.common.utils.PageUtils; +import com.boge.modules.flow.entity.ActHiProcessinfoEntity; +import com.boge.modules.flow.entity.FlwDeModelEntity; + +import java.util.Map; + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-01-09 13:56:25 + */ +public interface ActHiProcessinfoService extends IService { +} + diff --git a/base-fast/src/main/java/com/boge/modules/flow/service/FlwInstanceService.java b/base-fast/src/main/java/com/boge/modules/flow/service/FlwInstanceService.java index 72bc306..d266453 100644 --- a/base-fast/src/main/java/com/boge/modules/flow/service/FlwInstanceService.java +++ b/base-fast/src/main/java/com/boge/modules/flow/service/FlwInstanceService.java @@ -1,6 +1,7 @@ package com.boge.modules.flow.service; import com.boge.common.utils.R; +import com.boge.modules.flow.dto.FlowProcessParam; import com.boge.modules.flow.entity.FlwHiTaskEntity; import java.util.List; @@ -13,6 +14,7 @@ public interface FlwInstanceService { R getTodoTaskList(Map params); R completeTaskById(Map id); + R completeTaskById(FlowProcessParam param); void unclaimTask(String id); diff --git a/base-fast/src/main/java/com/boge/modules/flow/service/impl/ActHiProcessinfoImpl.java b/base-fast/src/main/java/com/boge/modules/flow/service/impl/ActHiProcessinfoImpl.java new file mode 100644 index 0000000..5a4cdd6 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/flow/service/impl/ActHiProcessinfoImpl.java @@ -0,0 +1,26 @@ +package com.boge.modules.flow.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.boge.common.utils.FlowConstant; +import com.boge.common.utils.PageUtils; +import com.boge.common.utils.Query; +import com.boge.modules.flow.dao.ActHiProcessinfoDao; +import com.boge.modules.flow.dao.FlwDeModelDao; +import com.boge.modules.flow.entity.ActHiProcessinfoEntity; +import com.boge.modules.flow.entity.FlwDeModelEntity; +import com.boge.modules.flow.factory.FlowServiceFactory; +import com.boge.modules.flow.service.ActHiProcessinfoService; +import com.boge.modules.flow.service.FlwDeModelService; +import com.boge.modules.orderRecord.record.dao.PmOrderRecordDao; +import com.boge.modules.orderRecord.record.entity.PmOrderRecord; +import org.springframework.stereotype.Service; + +import java.util.Map; + + +@Service +public class ActHiProcessinfoImpl extends ServiceImpl implements ActHiProcessinfoService { +} diff --git a/base-fast/src/main/java/com/boge/modules/flow/service/impl/FlwInstanceServiceImpl.java b/base-fast/src/main/java/com/boge/modules/flow/service/impl/FlwInstanceServiceImpl.java index 181097a..60c8c0a 100644 --- a/base-fast/src/main/java/com/boge/modules/flow/service/impl/FlwInstanceServiceImpl.java +++ b/base-fast/src/main/java/com/boge/modules/flow/service/impl/FlwInstanceServiceImpl.java @@ -9,10 +9,13 @@ import com.boge.common.utils.PageUtils; import com.boge.common.utils.R; import com.boge.common.utils.ShiroUtils; import com.boge.modules.flow.config.CustomProcessDiagramGenerator; +import com.boge.modules.flow.dto.FlowProcessParam; +import com.boge.modules.flow.entity.ActHiProcessinfoEntity; import com.boge.modules.flow.entity.FlwHiTaskEntity; import com.boge.modules.flow.entity.FlwMyFlowEntity; import com.boge.modules.flow.entity.FlwTaskEntity; import com.boge.modules.flow.factory.FlowServiceNoFactory; +import com.boge.modules.flow.service.ActHiProcessinfoService; import com.boge.modules.flow.service.FlwInstanceService; import com.boge.modules.sys.entity.SysUserEntity; import com.boge.modules.sys.service.SysRoleService; @@ -43,6 +46,7 @@ import org.flowable.task.api.history.HistoricTaskInstance; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.io.InputStream; @@ -60,15 +64,12 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI @Autowired private SysUserService userService; - - @Autowired - private SysRoleService roleService; @Autowired private SysUserServiceImpl sysUserService; - @Autowired private TicketsService ticketsService; - + @Autowired + private ActHiProcessinfoService actHiProcessinfoService; @Value("${ProcessInstance.defId}") private String defId; @Autowired @@ -340,6 +341,7 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI Integer ticketsId = (Integer) params.get("ticketsId"); String result = (String) params.get("result"); String opinion = (String) params.get("opinion"); + String processName = ticketsDao.selectByProcessInstance(processInstance); if (StringUtils.isBlank(processInstance)) { return R.error("流程Id不能为空"); @@ -366,7 +368,6 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI ticketsEntity.setAssignUserId(TicketUserEnums.MANAGER.getCode()); taskService.complete(secondTask.getId(), secondApprovalVars); } - // 指派处理人 if (Objects.nonNull(secondTask) && StrUtil.isNotEmpty(result) && result.equals("指派")) { String userId = String.valueOf(params.get("userId")); @@ -375,14 +376,11 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI ticketsEntity.setAssignUserId(Long.valueOf(userId)); taskService.complete(secondTask.getId(), startVars); } - // 继续流程 if (Objects.nonNull(secondTask) && StrUtil.isNotEmpty(result) && result.equals("提交")) { ticketsEntity.setAssignUserId(TicketUserEnums.SPECIALIST.getCode()); taskService.complete(secondTask.getId(), secondApprovalVars); } - - String processName = ticketsDao.selectByProcessInstance(processInstance); if (StringUtils.isNotBlank(processName)&& processName.contains("完结")){ ticketsEntity.setStatus(TicketsStatusEnums.FINISH.getCode()); } @@ -394,6 +392,70 @@ public class FlwInstanceServiceImpl extends FlowServiceNoFactory implements FlwI return R.ok("操作成功"); } + @Override + @Transactional + public R completeTaskById(FlowProcessParam params) { + String processInstance = params.getProcessInstance(); + Integer ticketsId = params.getTicketsId(); + String result = params.getResult(); + String processName = ticketsDao.selectByProcessInstance(processInstance); + String username = ShiroUtils.getUserEntity().getUsername(); + if (StringUtils.isBlank(processInstance)) { + return R.error("流程Id不能为空"); + } + if (StringUtils.isBlank(processInstance)) { + return R.error("流程Id不能为空"); + } + Task secondTask = taskService.createTaskQuery() + .processInstanceId(processInstance) + .singleResult(); + Map secondApprovalVars = new HashMap<>(); + TicketsEntity ticketsEntity = new TicketsEntity(); + // 完结流程 + if (Objects.nonNull(secondTask) && StrUtil.isNotEmpty(result) && result.equals("完结")) { + secondApprovalVars.put("approvalResult", true); + ticketsEntity.setStatus(TicketsStatusEnums.FINISH.getCode()); + ticketsEntity.setFinishTime(new Date()); + ticketsEntity.setAssignUserId(TicketUserEnums.SPECIALIST.getCode()); + taskService.complete(secondTask.getId(), secondApprovalVars); + } + // 继续流程 + if (Objects.nonNull(secondTask) && StrUtil.isNotEmpty(result) && result.equals("同意")) { + secondApprovalVars.put("approvalResult", false); + ticketsEntity.setAssignUserId(TicketUserEnums.MANAGER.getCode()); + taskService.complete(secondTask.getId(), secondApprovalVars); + } + // 指派处理人 + if (Objects.nonNull(secondTask) && StrUtil.isNotEmpty(result) && result.equals("指派")) { + String userId = params.getUserId(); + Map startVars = new HashMap<>(); + startVars.put("user1",userId); + ticketsEntity.setAssignUserId(Long.valueOf(userId)); + taskService.complete(secondTask.getId(), startVars); + } + // 继续流程 + if (Objects.nonNull(secondTask) && StrUtil.isNotEmpty(result) && result.equals("提交")) { + ticketsEntity.setAssignUserId(TicketUserEnums.SPECIALIST.getCode()); + taskService.complete(secondTask.getId(), secondApprovalVars); + } + if (StringUtils.isNotBlank(processName)&& processName.contains("完结")){ + ticketsEntity.setStatus(TicketsStatusEnums.FINISH.getCode()); + } + + //更新工单审批id + ticketsEntity.setTicketsId(Long.valueOf(ticketsId)); + ticketsEntity.setUpdateTime(new Date()); + ticketsService.updateById(ticketsEntity); + ActHiProcessinfoEntity actHiProcessinfoEntity = new ActHiProcessinfoEntity(); + actHiProcessinfoEntity.setAnnex(params.getAnnex()); + actHiProcessinfoEntity.setRemark(params.getRemark()); + actHiProcessinfoEntity.setProcInstId(processInstance); + actHiProcessinfoEntity.setProcName(processName); + actHiProcessinfoEntity.setCreateTime(new Date()); + actHiProcessinfoEntity.setCreateName(username); + actHiProcessinfoService.save(actHiProcessinfoEntity); + return R.ok("操作成功"); + } diff --git a/base-fast/src/main/java/com/boge/modules/media/controller/SysMediaController.java b/base-fast/src/main/java/com/boge/modules/media/controller/SysMediaController.java new file mode 100644 index 0000000..bfdf02c --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/media/controller/SysMediaController.java @@ -0,0 +1,81 @@ +package com.boge.modules.media.controller; + +import com.boge.common.utils.PageUtils; +import com.boge.common.utils.R; +import com.boge.modules.price.entity.PriceEntity; +import com.boge.modules.price.service.PriceService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Arrays; +import java.util.Map; + + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-02-26 19:33:35 + */ +@RestController +@RequestMapping("flow/media") +public class SysMediaController { + @Autowired + private PriceService priceService; + + /** + * 列表 + */ + @RequestMapping("/list") + //@RequiresPermissions("flow:contract:list") + public R list(@RequestParam Map params){ + PageUtils page = priceService.queryPage(params); + + return R.ok().put("page", page); + } + + + /** + * 信息 + */ + @RequestMapping("/info/{priceId}") + //@RequiresPermissions("flow:contract:info") + public R info(@PathVariable("priceId") Integer priceId){ + PriceEntity contract = priceService.getById(priceId); + return R.ok().put("price", contract); + } + + /** + * 保存 + */ + @RequestMapping("/save") + //@RequiresPermissions("flow:contract:save") + public R save(@RequestBody PriceEntity priceEntity){ + priceService.save(priceEntity); + return R.ok(); + } + + /** + * 修改 + */ + @RequestMapping("/update") + //@RequiresPermissions("flow:contract:update") + public R update(@RequestBody PriceEntity priceEntity){ + priceService.updateById(priceEntity); + + return R.ok(); + } + + /** + * 删除 + */ + @RequestMapping("/delete") + //@RequiresPermissions("flow:contract:delete") + public R delete(@RequestBody Integer[] priceIds){ + priceService.removeByIds(Arrays.asList(priceIds)); + + return R.ok(); + } + +} diff --git a/base-fast/src/main/java/com/boge/modules/media/file/dao/SysMediaDao.java b/base-fast/src/main/java/com/boge/modules/media/file/dao/SysMediaDao.java new file mode 100644 index 0000000..e2eaeb2 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/media/file/dao/SysMediaDao.java @@ -0,0 +1,17 @@ +package com.boge.modules.media.file.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.boge.modules.media.file.entity.SysMediaEntity; +import org.apache.ibatis.annotations.Mapper; + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-02-26 19:33:35 + */ +@Mapper +public interface SysMediaDao extends BaseMapper { + +} diff --git a/base-fast/src/main/java/com/boge/modules/media/file/entity/SysMediaEntity.java b/base-fast/src/main/java/com/boge/modules/media/file/entity/SysMediaEntity.java new file mode 100644 index 0000000..be52b70 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/media/file/entity/SysMediaEntity.java @@ -0,0 +1,57 @@ +package com.boge.modules.media.file.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-02-26 19:33:35 + */ +@Data +@TableName("sys_media") +public class SysMediaEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId + private Integer id; + /** + * 文件名称 + */ + private String name; + /** + * 格式 + */ + private String format; + /** + * 文件路径 + */ + private String path; + /** + * 报价人 + */ + private Integer size; + /** + * 创建时间 + */ + private Date createTime; + /** + * 创建人 + */ + private String createName; + /** + * 备注 + */ + private String remark; + + +} diff --git a/base-fast/src/main/java/com/boge/modules/media/file/service/SysMediaService.java b/base-fast/src/main/java/com/boge/modules/media/file/service/SysMediaService.java new file mode 100644 index 0000000..7325f45 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/media/file/service/SysMediaService.java @@ -0,0 +1,23 @@ +package com.boge.modules.media.file.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.boge.common.utils.PageUtils; +import com.boge.modules.media.file.entity.SysMediaEntity; +import com.boge.modules.price.entity.PriceEntity; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.util.Map; + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-02-26 19:33:35 + */ +public interface SysMediaService extends IService { + + File create(String path, MultipartFile multipartFile); +} + diff --git a/base-fast/src/main/java/com/boge/modules/media/file/service/impl/SysMediaServiceImpl.java b/base-fast/src/main/java/com/boge/modules/media/file/service/impl/SysMediaServiceImpl.java new file mode 100644 index 0000000..be6a23a --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/media/file/service/impl/SysMediaServiceImpl.java @@ -0,0 +1,32 @@ +package com.boge.modules.media.file.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.boge.common.utils.PageUtils; +import com.boge.common.utils.Query; +import com.boge.modules.media.file.dao.SysMediaDao; +import com.boge.modules.media.file.entity.SysMediaEntity; +import com.boge.modules.media.file.service.SysMediaService; +import com.boge.modules.price.dao.PriceDao; +import com.boge.modules.price.entity.PriceEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.util.Map; + + +@Service +public class SysMediaServiceImpl extends ServiceImpl implements SysMediaService { + + + @Override + public File create(String path, MultipartFile multipartFile) { + return null; + } +} diff --git a/base-fast/src/main/java/com/boge/modules/orderRecord/controller/OrderRecordController.java b/base-fast/src/main/java/com/boge/modules/orderRecord/controller/OrderRecordController.java new file mode 100644 index 0000000..b6f3816 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/orderRecord/controller/OrderRecordController.java @@ -0,0 +1,44 @@ +package com.boge.modules.orderRecord.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.boge.common.utils.PageUtils; +import com.boge.common.utils.R; +import com.boge.modules.orderRecord.record.entity.PmOrderRecord; +import com.boge.modules.orderRecord.record.service.PmOrderRecordService; +import com.boge.modules.price.entity.PriceEntity; +import com.boge.modules.price.service.PriceService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-02-26 19:33:35 + */ +@RestController +@RequestMapping("flow/orderRecord") +public class OrderRecordController { + @Autowired + private PmOrderRecordService pmOrderRecordService; + /** + * 列表 + */ + @GetMapping("/list") + //@RequiresPermissions("flow:contract:list") + public R list(@RequestParam("orderCode") String orderCode){ + List list = new ArrayList<>(); + if (StringUtils.isNotEmpty(orderCode)){ + list = pmOrderRecordService.list(new LambdaQueryWrapper().eq(PmOrderRecord::getOrderCode, orderCode)); + } + return R.ok().put("orderRecord", list); + } +} diff --git a/base-fast/src/main/java/com/boge/modules/orderRecord/record/RecordEvent.java b/base-fast/src/main/java/com/boge/modules/orderRecord/record/RecordEvent.java new file mode 100644 index 0000000..3102f64 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/orderRecord/record/RecordEvent.java @@ -0,0 +1,51 @@ +package com.boge.modules.orderRecord.record; + +import com.alibaba.fastjson.JSONObject; +import com.boge.common.publisher.BaseEvent; +import com.boge.common.publisher.EventType; +import lombok.Data; + +public class RecordEvent extends BaseEvent { + + private String orderName; + private String orderCode; + private String data; + private String mapperDao; + private String annex; + private EventType eventType; + + + public RecordEvent(String orderName,String orderCode, JSONObject data, String mapperDao, String annex,EventType type) { + super(data); + this.orderName = orderName; + this.orderCode = orderCode; + this.data = JSONObject.toJSONString(data); + this.mapperDao = mapperDao; + this.annex = annex; + this.eventType = type; + } + + public String getOrderName() { + return orderName; + } + + public String getData() { + return data; + } + + public String getMapperDao() { + return mapperDao; + } + + public String getAnnex() { + return annex; + } + + public EventType getEventType() { + return eventType; + } + + public String getOrderCode() { + return orderCode; + } +} diff --git a/base-fast/src/main/java/com/boge/modules/orderRecord/record/RecordEventConsumer.java b/base-fast/src/main/java/com/boge/modules/orderRecord/record/RecordEventConsumer.java new file mode 100644 index 0000000..76b25f9 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/orderRecord/record/RecordEventConsumer.java @@ -0,0 +1,42 @@ +package com.boge.modules.orderRecord.record; + +import com.boge.common.publisher.EventConsumer; +import com.boge.modules.orderRecord.record.entity.PmOrderRecord; +import com.boge.modules.orderRecord.record.service.PmOrderRecordService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Component +public class RecordEventConsumer extends EventConsumer { + @Autowired + private PmOrderRecordService pmOrderRecordService; + + @Override + public void consumerEvents(RecordEvent recordEvent) { + System.out.println("触发消费RecordEvent"+recordEvent.getOrderName()); + switch (recordEvent.getEventType()){ + case CREATE: + PmOrderRecord record = new PmOrderRecord(); + record.setOrderName(recordEvent.getOrderName()); + record.setOrderCode(recordEvent.getOrderCode()); + record.setMapperDao(recordEvent.getMapperDao()); + record.setData(recordEvent.getData()); + record.setAnnex(recordEvent.getAnnex()); + record.setCreateTime(new Date()); + record.setOrderName(recordEvent.getOrderName()); + pmOrderRecordService.save(record); + break; + case FINISH: + break; + case RUNING: + break; + case Deprecated: + break; + default: + System.out.println("未定义事件类型"); + } + + } +} diff --git a/base-fast/src/main/java/com/boge/modules/orderRecord/record/dao/PmOrderRecordDao.java b/base-fast/src/main/java/com/boge/modules/orderRecord/record/dao/PmOrderRecordDao.java new file mode 100644 index 0000000..5c69f85 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/orderRecord/record/dao/PmOrderRecordDao.java @@ -0,0 +1,17 @@ +package com.boge.modules.orderRecord.record.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.boge.modules.orderRecord.record.entity.PmOrderRecord; +import org.apache.ibatis.annotations.Mapper; + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-02-26 19:33:35 + */ +@Mapper +public interface PmOrderRecordDao extends BaseMapper { + +} diff --git a/base-fast/src/main/java/com/boge/modules/orderRecord/record/entity/PmOrderRecord.java b/base-fast/src/main/java/com/boge/modules/orderRecord/record/entity/PmOrderRecord.java new file mode 100644 index 0000000..dfb5f11 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/orderRecord/record/entity/PmOrderRecord.java @@ -0,0 +1,49 @@ +package com.boge.modules.orderRecord.record.entity; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-02-26 19:33:35 + */ +@Data +@TableName("pm_order_record") +public class PmOrderRecord implements Serializable { + private static final long serialVersionUID = 1L; + /** + * id + */ + @TableId + private Integer id; + /** + * 单子类型名称 + */ + private String orderName; + private String orderCode; + /** + * 数据 + */ + private String data; + /** + * 映射对象 + */ + private String mapperDao; + /** + * 创建时间 + */ + private Date createTime; + /** + * 附件 + */ + private String annex; + + +} diff --git a/base-fast/src/main/java/com/boge/modules/orderRecord/record/service/PmOrderRecordService.java b/base-fast/src/main/java/com/boge/modules/orderRecord/record/service/PmOrderRecordService.java new file mode 100644 index 0000000..75c7d4b --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/orderRecord/record/service/PmOrderRecordService.java @@ -0,0 +1,19 @@ +package com.boge.modules.orderRecord.record.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.boge.modules.orderRecord.record.entity.PmOrderRecord; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; + +/** + * + * + * @author ls + * @email dengpbs@163.com + * @date 2025-02-26 19:33:35 + */ +public interface PmOrderRecordService extends IService { + +} + diff --git a/base-fast/src/main/java/com/boge/modules/orderRecord/record/service/impl/PmOrderRecordServiceImpl.java b/base-fast/src/main/java/com/boge/modules/orderRecord/record/service/impl/PmOrderRecordServiceImpl.java new file mode 100644 index 0000000..049ff28 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/orderRecord/record/service/impl/PmOrderRecordServiceImpl.java @@ -0,0 +1,17 @@ +package com.boge.modules.orderRecord.record.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.boge.modules.orderRecord.record.dao.PmOrderRecordDao; +import com.boge.modules.orderRecord.record.entity.PmOrderRecord; +import com.boge.modules.orderRecord.record.service.PmOrderRecordService; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; + + +@Service +public class PmOrderRecordServiceImpl extends ServiceImpl implements PmOrderRecordService { + + +} diff --git a/base-fast/src/main/java/com/boge/modules/price/controller/PriceController.java b/base-fast/src/main/java/com/boge/modules/price/controller/PriceController.java index fea7347..187f4ff 100644 --- a/base-fast/src/main/java/com/boge/modules/price/controller/PriceController.java +++ b/base-fast/src/main/java/com/boge/modules/price/controller/PriceController.java @@ -1,15 +1,31 @@ package com.boge.modules.price.controller; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.boge.common.publisher.EventPublisher; +import com.boge.common.publisher.EventType; +import com.boge.common.utils.CodeUtil; import com.boge.common.utils.PageUtils; import com.boge.common.utils.R; +import com.boge.common.utils.ShiroUtils; +import com.boge.modules.orderRecord.record.RecordEvent; +import com.boge.modules.orderRecord.record.service.PmOrderRecordService; +import com.boge.modules.price.entity.PriceDto; import com.boge.modules.price.entity.PriceEntity; +import com.boge.modules.price.enums.PriceApprovalEnum; import com.boge.modules.price.service.PriceService; +import com.boge.modules.tickets.entity.LocalStorage; +import com.boge.modules.tickets.service.LocalStorageService; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.util.Arrays; +import java.util.Date; +import java.util.List; import java.util.Map; - +import java.util.stream.Collectors; /** @@ -24,6 +40,10 @@ import java.util.Map; public class PriceController { @Autowired private PriceService priceService; + @Autowired + private LocalStorageService localStorageService; + @Autowired + private EventPublisher eventPublisher; /** * 列表 @@ -52,8 +72,15 @@ public class PriceController { */ @RequestMapping("/save") //@RequiresPermissions("flow:contract:save") - public R save(@RequestBody PriceEntity priceEntity){ - priceService.save(priceEntity); + public R save(@RequestParam("form") String form, @RequestParam(value = "file",required = false) MultipartFile[] file){ + List batch = localStorageService.createBatch(file); + PriceEntity entity = JSONObject.parseObject(form, PriceEntity.class); + entity.setCreateTime(new Date()); + entity.setCreateName(ShiroUtils.getUserEntity().getUsername()); + entity.setAnnex(batch.stream().map(a->String.valueOf(a.getStorageId())).collect(Collectors.joining(","))); + entity.setStatus(PriceApprovalEnum.ASSIGN.getCode()); + entity.setFileNo(CodeUtil.getNewCode("VEHICLE_CODE")); + priceService.save(entity); return R.ok(); } @@ -61,10 +88,18 @@ public class PriceController { * 修改 */ @RequestMapping("/update") - //@RequiresPermissions("flow:contract:update") - public R update(@RequestBody PriceEntity priceEntity){ - priceService.updateById(priceEntity); - + public R update(@RequestParam("form") String form, @RequestParam(value = "file",required = false) MultipartFile[] file){ + List batch = localStorageService.createBatch(file); + PriceEntity entity = JSONObject.parseObject(form, PriceEntity.class); + List collect = batch.stream().map(a -> String.valueOf(a.getStorageId())).collect(Collectors.toList()); + if (StringUtils.isNotEmpty(entity.getAnnex())){ + String[] split = entity.getAnnex().split(","); + collect.addAll(Arrays.asList(split)); + } + entity.setAnnex(collect.stream().collect(Collectors.joining(","))); + entity.setUpdateTime(new Date()); + priceService.updateById(entity); + eventPublisher.publishSync(new RecordEvent("报价单",entity.getFileNo(), (JSONObject)JSONObject.toJSON(entity),"PriceEntity",entity.getAnnex(), EventType.CREATE)); return R.ok(); } @@ -75,7 +110,6 @@ public class PriceController { //@RequiresPermissions("flow:contract:delete") public R delete(@RequestBody Integer[] priceIds){ priceService.removeByIds(Arrays.asList(priceIds)); - return R.ok(); } diff --git a/base-fast/src/main/java/com/boge/modules/price/entity/PriceDto.java b/base-fast/src/main/java/com/boge/modules/price/entity/PriceDto.java new file mode 100644 index 0000000..2e6c4a7 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/price/entity/PriceDto.java @@ -0,0 +1,75 @@ +package com.boge.modules.price.entity; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.annotation.TableId; +import liquibase.pro.packaged.J; +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Date; + +@Data +public class PriceDto { + /** + * id + */ + @TableId + private Integer priceId; + /** + * 报价单类型 + */ + private Integer priceType; + /** + * 报价单编号 + */ + private String fileNo; + /** + * 报价人 + */ + private String quoter; + /** + * 发货方信息 + */ + private String fattn; + private String fmobile; + private String finc; + private String fadd; + private String ftel; + /** + * 收货方信息 + */ + private String tattn; + private String tmobile; + private String tinc; + private String tadd; + private String ttel; + /** + * 物料信息 + */ + private String materialJson; + + /** + * 总金额 + */ + private String totalPrice; + + /** + * 创建日期 + */ + private Date createTime; + /** + * 更新日期 + */ + private Date updateTime; + /** + * 备注 + */ + private String remarks; + + private String status; + /** + * 物料信息 + */ + private JSONArray materData; +} diff --git a/base-fast/src/main/java/com/boge/modules/price/entity/PriceEntity.java b/base-fast/src/main/java/com/boge/modules/price/entity/PriceEntity.java index e4093e6..bd0f939 100644 --- a/base-fast/src/main/java/com/boge/modules/price/entity/PriceEntity.java +++ b/base-fast/src/main/java/com/boge/modules/price/entity/PriceEntity.java @@ -67,6 +67,10 @@ public class PriceEntity implements Serializable { * 创建日期 */ private Date createTime; + /** + * 创建人 + */ + private String createName; /** * 更新日期 */ @@ -76,6 +80,30 @@ public class PriceEntity implements Serializable { */ private String remarks; private String status; + /** + * 附件ids + */ + private String annex; + /** + * 生效日期 + */ + private Date effective; + /** + * 交货期说明 + */ + private String delivery; + /** + * 交货地点 + */ + private String place; + /** + * 报价有效期 + */ + private String valid; + /** + * 支付说明 + */ + private String pay; } diff --git a/base-fast/src/main/java/com/boge/modules/price/enums/PriceApprovalEnum.java b/base-fast/src/main/java/com/boge/modules/price/enums/PriceApprovalEnum.java new file mode 100644 index 0000000..bb61b5a --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/price/enums/PriceApprovalEnum.java @@ -0,0 +1,25 @@ +package com.boge.modules.price.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum PriceApprovalEnum { + + ASSIGN("1", "发起"), + TO_BE_DONE("2", "待办"), + FINISH("3", "已完成"); + + private String code; + private String msg; + + public static String getStatus(String code) { + for (PriceApprovalEnum value : values()) { + if (value.code.equals(code)) { + return value.msg; + } + } + return null; + } +} diff --git a/base-fast/src/main/java/com/boge/modules/sys/coderule/ISysCodeRuleDetailService.java b/base-fast/src/main/java/com/boge/modules/sys/coderule/ISysCodeRuleDetailService.java new file mode 100644 index 0000000..83c48f6 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/sys/coderule/ISysCodeRuleDetailService.java @@ -0,0 +1,45 @@ +package com.boge.modules.sys.coderule; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.boge.common.query.PageQuery; +import com.boge.modules.sys.coderule.dao.SysCodeRuleDetail; +import com.boge.modules.sys.coderule.dto.CodeRuleDetailQuery; + +/** + *

+ * 编码规则明细表 服务类 + *

+ * + * @author generator + * @since 2022-12-20 + */ +public interface ISysCodeRuleDetailService extends IService { + + /** + * 分页查询 + * @param form 查询条件 + * @param pageable 工具列 + * @return IPage + */ + IPage queryAll(CodeRuleDetailQuery form, PageQuery pageable); + + /** + * 创建 + * @param codeRuleDetail 实体类 + */ + void create(SysCodeRuleDetail codeRuleDetail); + + /** + * 根据id删除 + * @param id + */ + void delete(String id); + + /** + * 修改明细 + * @param json + */ + void update(SysCodeRuleDetail json); +} diff --git a/base-fast/src/main/java/com/boge/modules/sys/coderule/ISysCodeRuleService.java b/base-fast/src/main/java/com/boge/modules/sys/coderule/ISysCodeRuleService.java new file mode 100644 index 0000000..ab1c7c3 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/sys/coderule/ISysCodeRuleService.java @@ -0,0 +1,53 @@ +package com.boge.modules.sys.coderule; + + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.boge.common.query.PageQuery; +import com.boge.modules.sys.coderule.dao.SysCodeRule; + +import java.util.Map; +import java.util.Set; + +/** + *

+ * 编码规则表 服务类 + *

+ * + * @author generator + * @since 2022-12-19 + */ +public interface ISysCodeRuleService extends IService { + + /** + * 分页查询 + * @param form + * @param pageable + * @return + */ + IPage queryAll(Map form, PageQuery pageable); + + + + /** + * 添加 + * @param codeRule + */ + void create(SysCodeRule codeRule); + + /** + * 删除编码 + * @param ids + */ + void deleteCodeRule(Set ids); + + /** + * 修改编码 + * @param codeRule + */ + void updateCodeRule(SysCodeRule codeRule); + + + String codeProduce(String code,String flag); + +} diff --git a/base-fast/src/main/java/com/boge/modules/sys/coderule/dao/SysCodeRule.java b/base-fast/src/main/java/com/boge/modules/sys/coderule/dao/SysCodeRule.java new file mode 100644 index 0000000..41725d3 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/sys/coderule/dao/SysCodeRule.java @@ -0,0 +1,94 @@ +package com.boge.modules.sys.coderule.dao; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + *

+ * 编码规则表 + *

+ * + * @author generator + * @since 2022-12-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_code_rule") +public class SysCodeRule implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 标识 + */ + @TableId + private String id; + + /** + * 编码 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 当前值 + */ + private String currentValue; + + /** + * 备注 + */ + private String remark; + + /** + * 是否启用 + */ + private String isActive; + + /** + * 是否删除 + */ + private String isDelete; + + /** + * 创建id + */ + private String createId; + + /** + * 创建者 + */ + private String createName; + + /** + * 创建时间 + */ + private String createTime; + + /** + * 修改id + */ + private String updateId; + + /** + * 修改者 + */ + private String updateName; + + /** + * 修改时间 + */ + private String updateTime; + + @TableField(exist = false) + private String demo; +} diff --git a/base-fast/src/main/java/com/boge/modules/sys/coderule/dao/SysCodeRuleDetail.java b/base-fast/src/main/java/com/boge/modules/sys/coderule/dao/SysCodeRuleDetail.java new file mode 100644 index 0000000..b105c01 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/sys/coderule/dao/SysCodeRuleDetail.java @@ -0,0 +1,132 @@ +package com.boge.modules.sys.coderule.dao; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + *

+ * 编码规则明细表 + *

+ * + * @author generator + * @since 2022-12-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_code_rule_detail") +public class SysCodeRuleDetail implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 明细标识 + */ + @TableId + private String id; + + /** + * 编码规则类型 + */ + private String type; + + /** + * 初始值 + */ + private String initValue; + + /** + * 当前值 + */ + private String currentValue; + + /** + * 允许最大值 + */ + private String maxValue; + + /** + * 步长 + */ + private String step; + + /** + * 填充值 + */ + private String fillchar; + + /** + * 格式 + */ + private String format; + + /** + * 长度 + */ + private Integer length; + + /** + * 排序号 + */ + private BigDecimal sortNum; + + /** + * 备注 + */ + private String remark; + + /** + * 编码规则标识 + */ + private String codeRuleId; + + /** + * 是否启用 + */ + private String isActive; + + /** + * 是否删除 + */ + private String isDelete; + + /** + * 创建id + */ + private String createId; + + /** + * 创建者 + */ + private String createName; + + /** + * 创建时间 + */ + private String createTime; + + /** + * 修改id + */ + private String updateId; + + /** + * 修改者 + */ + private String updateName; + + /** + * 修改时间 + */ + private String updateTime; + + @TableField(exist = false) + private String dictName; + + +} diff --git a/base-fast/src/main/java/com/boge/modules/sys/coderule/dao/mapper/SysCodeRuleDetailMapper.java b/base-fast/src/main/java/com/boge/modules/sys/coderule/dao/mapper/SysCodeRuleDetailMapper.java new file mode 100644 index 0000000..07c775c --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/sys/coderule/dao/mapper/SysCodeRuleDetailMapper.java @@ -0,0 +1,18 @@ +package com.boge.modules.sys.coderule.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.boge.modules.sys.coderule.dao.SysCodeRuleDetail; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 编码规则明细表 Mapper 接口 + *

+ * + * @author generator + * @since 2022-12-19 + */ +@Mapper +public interface SysCodeRuleDetailMapper extends BaseMapper { + +} diff --git a/base-fast/src/main/java/com/boge/modules/sys/coderule/dao/mapper/SysCodeRuleMapper.java b/base-fast/src/main/java/com/boge/modules/sys/coderule/dao/mapper/SysCodeRuleMapper.java new file mode 100644 index 0000000..f10c8e4 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/sys/coderule/dao/mapper/SysCodeRuleMapper.java @@ -0,0 +1,18 @@ +package com.boge.modules.sys.coderule.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.boge.modules.sys.coderule.dao.SysCodeRule; +import org.apache.ibatis.annotations.Mapper; + +/** + *

+ * 编码规则表 Mapper 接口 + *

+ * + * @author generator + * @since 2022-12-19 + */ +@Mapper +public interface SysCodeRuleMapper extends BaseMapper { + +} diff --git a/base-fast/src/main/java/com/boge/modules/sys/coderule/dto/CodeRuleDetailQuery.java b/base-fast/src/main/java/com/boge/modules/sys/coderule/dto/CodeRuleDetailQuery.java new file mode 100644 index 0000000..4e5272f --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/sys/coderule/dto/CodeRuleDetailQuery.java @@ -0,0 +1,22 @@ +package com.boge.modules.sys.coderule.dto; + +import com.boge.common.query.BaseQuery; +import com.boge.common.query.QParam; +import com.boge.common.query.QueryTEnum; +import com.boge.modules.sys.coderule.dao.SysCodeRuleDetail; +import lombok.Data; + +/** + * @Author: lyd + * @Description: + * @Date: 2022/12/20 + */ +@Data +public class CodeRuleDetailQuery extends BaseQuery { + String id; + + @Override + public void paramMapping() { + this.doP.put("id", QParam.builder().k(new String[]{"code_rule_id"}).type(QueryTEnum.EQ).build()); + } +} diff --git a/base-fast/src/main/java/com/boge/modules/sys/coderule/dto/CodeRuleQuery.java b/base-fast/src/main/java/com/boge/modules/sys/coderule/dto/CodeRuleQuery.java new file mode 100644 index 0000000..d250373 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/sys/coderule/dto/CodeRuleQuery.java @@ -0,0 +1,20 @@ +package com.boge.modules.sys.coderule.dto; + + +import com.boge.common.query.BaseQuery; +import com.boge.common.query.QParam; +import com.boge.common.query.QueryTEnum; +import com.boge.modules.sys.coderule.dao.SysCodeRule; + +/** + * @Author: lyd + * @Description: + * @Date: 2022/12/19 + */ +public class CodeRuleQuery extends BaseQuery { + + @Override + public void paramMapping() { + this.doP.put("blurry", QParam.builder().k(new String[]{"code", "name"}).type(QueryTEnum.LK).build()); + } +} diff --git a/base-fast/src/main/java/com/boge/modules/sys/coderule/enums/CodeRuleTypeEnum.java b/base-fast/src/main/java/com/boge/modules/sys/coderule/enums/CodeRuleTypeEnum.java new file mode 100644 index 0000000..3361348 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/sys/coderule/enums/CodeRuleTypeEnum.java @@ -0,0 +1,23 @@ +package com.boge.modules.sys.coderule.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @Author: lyd + * @Description: 编码类型枚举 + * @Date: 2022/12/19 + */ +@Getter +@AllArgsConstructor +public enum CodeRuleTypeEnum { + // 固定 + FIXED("01", "固定"), + // 日期" + DATE("02", "日期"), + // 顺序 + ORDER("03", "顺序"); + + private final String type; + private final String description; +} diff --git a/base-fast/src/main/java/com/boge/modules/sys/coderule/impl/SysCodeRuleDetailServiceImpl.java b/base-fast/src/main/java/com/boge/modules/sys/coderule/impl/SysCodeRuleDetailServiceImpl.java new file mode 100644 index 0000000..03f1199 --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/sys/coderule/impl/SysCodeRuleDetailServiceImpl.java @@ -0,0 +1,73 @@ +package com.boge.modules.sys.coderule.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.boge.common.query.PageQuery; +import com.boge.common.utils.ShiroUtils; +import com.boge.modules.sys.coderule.ISysCodeRuleDetailService; +import com.boge.modules.sys.coderule.dao.SysCodeRuleDetail; +import com.boge.modules.sys.coderule.dao.mapper.SysCodeRuleDetailMapper; +import com.boge.modules.sys.coderule.dto.CodeRuleDetailQuery; +import com.boge.modules.sys.coderule.enums.CodeRuleTypeEnum; +import org.springframework.stereotype.Service; + +import java.util.Date; + +/** + *

+ * 编码规则明细表 服务实现类 + *

+ * + * @author generator + * @since 2022-12-20 + */ +@Service +public class SysCodeRuleDetailServiceImpl extends ServiceImpl implements ISysCodeRuleDetailService { + + @Override + public IPage queryAll(CodeRuleDetailQuery form, PageQuery page) { + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(SysCodeRuleDetail::getCodeRuleId, form.getId()) + .orderByAsc(SysCodeRuleDetail::getSortNum); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + this.baseMapper.selectPage(pages, lam); + return pages; + } + + @Override + public void create(SysCodeRuleDetail codeRuleDetail) { + String currentUserId = String.valueOf(ShiroUtils.getUserEntity().getCreateUserId()); + String currentNickName = ShiroUtils.getUserEntity().getUsername(); + String now = DateUtil.now(); + codeRuleDetail.setId(IdUtil.getSnowflake(1,1).nextIdStr()); + codeRuleDetail.setCurrentValue(codeRuleDetail.getInitValue()); + codeRuleDetail.setCreateId(currentUserId); + codeRuleDetail.setCreateName(currentNickName); + codeRuleDetail.setCreateTime(now); + codeRuleDetail.setUpdateId(currentUserId); + codeRuleDetail.setUpdateName(currentNickName); + codeRuleDetail.setUpdateTime(now); + if (codeRuleDetail.getType().equals(CodeRuleTypeEnum.DATE.getType())) { + Date date = DateUtil.date(); + String format = codeRuleDetail.getFormat(); + String nowDate = DateUtil.format(date, format); + codeRuleDetail.setInitValue(nowDate); + codeRuleDetail.setCurrentValue(nowDate); + } + this.baseMapper.insert(codeRuleDetail); + } + + @Override + public void delete(String id) { + this.baseMapper.deleteById(id); + } + + @Override + public void update(SysCodeRuleDetail json) { + this.baseMapper.updateById(json); + } +} diff --git a/base-fast/src/main/java/com/boge/modules/sys/coderule/impl/SysCodeRuleServiceImpl.java b/base-fast/src/main/java/com/boge/modules/sys/coderule/impl/SysCodeRuleServiceImpl.java new file mode 100644 index 0000000..03e0d8c --- /dev/null +++ b/base-fast/src/main/java/com/boge/modules/sys/coderule/impl/SysCodeRuleServiceImpl.java @@ -0,0 +1,169 @@ +package com.boge.modules.sys.coderule.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.boge.common.query.PageQuery; +import com.boge.common.utils.ShiroUtils; +import com.boge.modules.sys.coderule.ISysCodeRuleDetailService; +import com.boge.modules.sys.coderule.ISysCodeRuleService; +import com.boge.modules.sys.coderule.dao.SysCodeRule; +import com.boge.modules.sys.coderule.dao.SysCodeRuleDetail; +import com.boge.modules.sys.coderule.dao.mapper.SysCodeRuleMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + *

+ * 编码规则表 服务实现类 + *

+ * + * @author generator + * @since 2022-12-19 + */ +@Service +public class SysCodeRuleServiceImpl extends ServiceImpl implements ISysCodeRuleService { + + @Autowired + private ISysCodeRuleDetailService iSysCodeRuleDetailService; + + @Override + public IPage queryAll(Map form, PageQuery pageable) { + String blurry = ObjectUtil.isNotEmpty(form.get("blurry"))?form.get("blurry").toString():null; + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.like(ObjectUtil.isNotEmpty(blurry), SysCodeRule::getCode, blurry) + .or(ObjectUtil.isNotEmpty(blurry)) + .like(ObjectUtil.isNotEmpty(blurry), SysCodeRule::getName, blurry); + IPage page = new Page<>(pageable.getPage() + 1, pageable.getSize()); + this.baseMapper.selectPage(page, lam); + page.getRecords().forEach(sysCodeRule -> sysCodeRule.setDemo(codeProduce(sysCodeRule.getCode(),"0"))); + return page; + } + + @Override + public void create(SysCodeRule codeRule) { + String currentUserId = String.valueOf(ShiroUtils.getUserEntity().getCreateUserId()); + String currentUsername = ShiroUtils.getUserEntity().getUsername(); + String now = DateUtil.now(); + List sysCodeRules = this.baseMapper.selectList(new LambdaQueryWrapper().eq(SysCodeRule::getCode, codeRule.getCode())); + if (ObjectUtil.isNotEmpty(sysCodeRules)) throw new RuntimeException("参数不存在"); + codeRule.setId(IdUtil.getSnowflake(1,1).nextIdStr()); + codeRule.setCreateId(currentUserId); + codeRule.setCreateName(currentUsername); + codeRule.setCreateTime(now); + codeRule.setUpdateId(currentUserId); + codeRule.setUpdateName(currentUsername); + codeRule.setUpdateTime(now); + this.baseMapper.insert(codeRule); + } + + @Override + public void deleteCodeRule(Set ids) { + ids.forEach(id -> { + this.baseMapper.deleteById(id); + iSysCodeRuleDetailService.remove(new LambdaQueryWrapper().eq(SysCodeRuleDetail::getCodeRuleId, id)); + }); + } + + @Override + public void updateCodeRule(SysCodeRule codeRule) { + List sysCodeRules = this.baseMapper.selectList(new LambdaQueryWrapper() + .eq(SysCodeRule::getCode, codeRule.getCode()) + .ne(SysCodeRule::getId, codeRule.getId())); + if (ObjectUtil.isNotEmpty(sysCodeRules)) throw new RuntimeException("参数不存在"); + String currentUserId = String.valueOf(ShiroUtils.getUserEntity().getCreateUserId()); + String currentUsername = ShiroUtils.getUserEntity().getUsername(); + String now = DateUtil.now(); + codeRule.setUpdateId(currentUserId); + codeRule.setUpdateName(currentUsername); + codeRule.setUpdateTime(now); + this.baseMapper.updateById(codeRule); + } + + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW) + public String codeProduce(String code,String flag) { + SysCodeRule one = this.getOne(new LambdaQueryWrapper() + .eq(SysCodeRule::getCode, code).select(SysCodeRule::getId)); + List dtl = iSysCodeRuleDetailService.list(new LambdaQueryWrapper() + .eq(SysCodeRuleDetail::getCodeRuleId, one.getId()).last("order by sort_num FOR UPDATE")); + String demo = ""; + boolean is_same = true; + for (SysCodeRuleDetail detail : dtl) { + String value = ""; + //固定直接取值 + if (detail.getType().equals("01")) { + value = detail.getInitValue(); + } + //日期判断数据库的值与当前值是否相同来决定顺序的值 + if (detail.getType().equals("02")) { + String current_value = detail.getCurrentValue(); + Date date = DateUtil.date(); + String format = detail.getFormat(); + String now_date = DateUtil.format(date, format); + if (!now_date.equals(current_value)) { + is_same = false; + } + if (flag.equals("1")) { + detail.setInitValue(now_date); + detail.setCurrentValue(now_date); + } + value = now_date; + } + //顺序的值:如果日期一样就+步长,等于最大值就归为初始值;日期不一样就归为初始值 + if (detail.getType().equals("03")) { + String num_value = ""; + int step = Integer.parseInt(detail.getStep()); + Long max_value = Long.valueOf(detail.getMaxValue()); + if (!is_same || (Long.valueOf(detail.getCurrentValue()) + step > max_value)) { + num_value = detail.getInitValue(); + } else { + num_value = (detail.getCurrentValue() + step) + ""; + } + int size = num_value.length(); + int length = detail.getLength(); + String fillchar = detail.getFillchar(); + for (int m = 0; m < (length - size); m++) { + value += fillchar; + } + value += num_value; + if (flag.equals("1")) { + if (!is_same) { + int init_value = Integer.parseInt(detail.getInitValue()); + if (StrUtil.isEmpty((init_value + ""))) { + throw new RuntimeException("请完善编码数值的初始值!"); + } + detail.setCurrentValue(init_value + ""); + } else { + int num_curr = Integer.parseInt(detail.getCurrentValue()); + if (num_curr >= max_value) { + num_curr = Integer.parseInt(detail.getInitValue()); + detail.setCurrentValue(num_curr + ""); + } else { + detail.setCurrentValue(num_curr + step + ""); + } + } + } + } + demo += value; + if (flag.equals("1")) { + iSysCodeRuleDetailService.updateById(detail); + } + } + return demo; + } + +} diff --git a/base-fast/src/main/java/com/boge/modules/tickets/controller/LocalStorageController.java b/base-fast/src/main/java/com/boge/modules/tickets/controller/LocalStorageController.java index 10129d6..1846fc3 100644 --- a/base-fast/src/main/java/com/boge/modules/tickets/controller/LocalStorageController.java +++ b/base-fast/src/main/java/com/boge/modules/tickets/controller/LocalStorageController.java @@ -10,8 +10,13 @@ import com.boge.modules.tickets.service.LocalStorageService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.apache.commons.lang3.StringUtils; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; @@ -33,15 +38,19 @@ public class LocalStorageController { @ApiOperation("查询文件") @GetMapping - public ResponseEntity query(@RequestParam Integer contractId) { - return new ResponseEntity(this.localStorageService.queryAll(contractId), HttpStatus.OK); + public ResponseEntity query(@RequestParam String annex) { + List list = new ArrayList<>(); + if (StringUtils.isNotEmpty(annex)){ + String[] split = annex.split(","); + list = localStorageService.listByIds(Arrays.asList(split)); + } + return new ResponseEntity(list, HttpStatus.OK); } @ApiOperation("导出数据") @GetMapping({"/download"}) - public void download(@RequestParam Integer contractId ,HttpServletResponse response) throws IOException { - - this.localStorageService.download(this.localStorageService.queryAll(contractId), response); + public void download(@RequestParam Long storageId , HttpServletResponse response, HttpServletRequest request) throws IOException { + this.localStorageService.downloadFile(this.localStorageService.getById(storageId),request, response); } @ApiOperation("上传文件") @@ -68,7 +77,7 @@ public class LocalStorageController { @DeleteMapping @ApiOperation("多选删除") public ResponseEntity delete(@RequestBody Long[] ids) { - this.localStorageService.deleteAll(ids); + localStorageService.removeByIds(Arrays.asList(ids)); return new ResponseEntity(HttpStatus.OK); } diff --git a/base-fast/src/main/java/com/boge/modules/tickets/entity/LocalStorage.java b/base-fast/src/main/java/com/boge/modules/tickets/entity/LocalStorage.java index a71e5b5..df4c8ea 100644 --- a/base-fast/src/main/java/com/boge/modules/tickets/entity/LocalStorage.java +++ b/base-fast/src/main/java/com/boge/modules/tickets/entity/LocalStorage.java @@ -1,81 +1,42 @@ package com.boge.modules.tickets.entity; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.UpdateTimestamp; import org.springframework.data.annotation.CreatedBy; import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.data.elasticsearch.annotations.Document; import javax.persistence.*; import java.io.Serializable; import java.sql.Timestamp; +import java.util.Date; + -@Entity @Data -@Table( - name = "local_storage" -) +@TableName("local_storage") public class LocalStorage implements Serializable { - @Id - @Column( - name = "storage_id" - ) - @GeneratedValue( - strategy = GenerationType.IDENTITY - ) + @TableId(type = IdType.AUTO) private Long storageId; - @ApiModelProperty("真实文件名") private String realName; - @ApiModelProperty("文件名") private String name; - @ApiModelProperty("后缀") private String suffix; - @ApiModelProperty("路径") private String path; - @ApiModelProperty("类型") private String type; - @ApiModelProperty("大小") private String size; - @CreatedBy - @Column( - name = "create_by", - updatable = false - ) - @ApiModelProperty( - value = "创建人", - hidden = true - ) + private String createBy; - @LastModifiedBy - @Column( - name = "update_by" - ) - @ApiModelProperty( - value = "更新人", - hidden = true - ) + private String updateBy; - @CreationTimestamp - @Column( - name = "create_time", - updatable = false - ) - @ApiModelProperty( - value = "创建时间", - hidden = true - ) - private Timestamp createTime; - @UpdateTimestamp - @Column( - name = "update_time" - ) - @ApiModelProperty( - value = "更新时间", - hidden = true - ) - private Timestamp updateTime; + + private Date createTime; + + private Date updateTime; diff --git a/base-fast/src/main/java/com/boge/modules/tickets/repository/LocalStorageRepository.java b/base-fast/src/main/java/com/boge/modules/tickets/repository/LocalStorageRepository.java deleted file mode 100644 index a4afe38..0000000 --- a/base-fast/src/main/java/com/boge/modules/tickets/repository/LocalStorageRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.boge.modules.tickets.repository; - -import com.boge.modules.tickets.entity.LocalStorage; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.JpaSpecificationExecutor; - -public interface LocalStorageRepository extends JpaRepository, JpaSpecificationExecutor { -} diff --git a/base-fast/src/main/java/com/boge/modules/tickets/repository/TickesRepository.java b/base-fast/src/main/java/com/boge/modules/tickets/repository/TickesRepository.java deleted file mode 100644 index e7f47ba..0000000 --- a/base-fast/src/main/java/com/boge/modules/tickets/repository/TickesRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.boge.modules.tickets.repository; - - -import com.boge.modules.tickets.entity.TicketsEntity; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface TickesRepository extends ElasticsearchRepository { - -} diff --git a/base-fast/src/main/java/com/boge/modules/tickets/service/LocalStorageService.java b/base-fast/src/main/java/com/boge/modules/tickets/service/LocalStorageService.java index 4e037b5..8e2dbb8 100644 --- a/base-fast/src/main/java/com/boge/modules/tickets/service/LocalStorageService.java +++ b/base-fast/src/main/java/com/boge/modules/tickets/service/LocalStorageService.java @@ -1,21 +1,24 @@ package com.boge.modules.tickets.service; +import com.baomidou.mybatisplus.extension.service.IService; import com.boge.modules.tickets.entity.LocalStorage; +import com.boge.modules.tickets.entity.TicketsEntity; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; -public interface LocalStorageService { +public interface LocalStorageService extends IService { List queryAll(Integer contractId); LocalStorage create(String name, MultipartFile file); + List createBatch(MultipartFile[] file); - void deleteAll(Long[] ids); - void download(List localStorageDtos, HttpServletResponse response) throws IOException; + void downloadFile(LocalStorage localStorage, HttpServletRequest request, HttpServletResponse response) throws IOException; } diff --git a/base-fast/src/main/java/com/boge/modules/tickets/service/impl/LocalStorageServiceImpl.java b/base-fast/src/main/java/com/boge/modules/tickets/service/impl/LocalStorageServiceImpl.java index c2b9c4a..f044da9 100644 --- a/base-fast/src/main/java/com/boge/modules/tickets/service/impl/LocalStorageServiceImpl.java +++ b/base-fast/src/main/java/com/boge/modules/tickets/service/impl/LocalStorageServiceImpl.java @@ -4,9 +4,11 @@ import cn.hutool.core.util.StrUtil; import java.io.File; import java.io.IOException; import java.util.*; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.boge.common.exception.RRException; import com.boge.common.utils.FileProperties; import com.boge.common.utils.FileUtil; @@ -14,78 +16,65 @@ import com.boge.modules.contract.entity.ContractEntity; import com.boge.modules.contract.service.ContractService; import com.boge.modules.tickets.dao.LocalStorageMapper; import com.boge.modules.tickets.entity.LocalStorage; -import com.boge.modules.tickets.repository.LocalStorageRepository; + import com.boge.modules.tickets.service.LocalStorageService; -import net.bytebuddy.implementation.bytecode.Throw; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; @Service -public class LocalStorageServiceImpl implements LocalStorageService { - private final LocalStorageRepository localStorageRepository; - private final LocalStorageMapper localStorageMapper; - private final FileProperties properties; +public class LocalStorageServiceImpl extends ServiceImpl implements LocalStorageService { @Autowired private ContractService contractService; + @Autowired + private FileProperties properties; public List queryAll(Integer contractId) { ContractEntity contract = contractService.getById(contractId); if (ObjectUtil.isNull(contract)) { throw new RRException("合同为空"); } - if (StrUtil.isEmpty(contract.getStorageId())){ + if (StrUtil.isEmpty(contract.getAnnex())){ return null; } - String[] split = contract.getStorageId().split(","); - return localStorageMapper.selectList(new QueryWrapper().in("storage_id", Arrays.asList(split))); + String[] split = contract.getAnnex().split(","); + return this.baseMapper.selectList(new QueryWrapper().in("storage_id", Arrays.asList(split))); } - - @Transactional( - rollbackFor = {Exception.class} - ) public LocalStorage create(String name, MultipartFile multipartFile) { - FileUtil.checkSize(this.properties.getMaxSize(), multipartFile.getSize()); - String suffix = FileUtil.getExtensionName(multipartFile.getOriginalFilename()); - String type = FileUtil.getFileType(suffix); - File file = FileUtil.upload(multipartFile, this.properties.getPath().getPath() + type + File.separator); - if (ObjectUtil.isNull(file)) { - throw new RRException("上传失败"); - } else { - try { - name = StrUtil.isEmpty(name) ? FileUtil.getFileNameNoEx(multipartFile.getOriginalFilename()) : name; - LocalStorage localStorage = new LocalStorage(file.getName(), name, suffix, file.getPath(), type, FileUtil.getSize(multipartFile.getSize())); - return (LocalStorage)this.localStorageRepository.save(localStorage); - } catch (Exception var7) { - Exception e = var7; - FileUtil.del(file); - throw new RRException(e.toString()); + return null; + } + + @Override + public List createBatch(MultipartFile[] multipartFile) { + List result = new ArrayList<>(); + if (multipartFile!=null){ + for (MultipartFile item : multipartFile) { + FileUtil.checkSize(this.properties.getMaxSize(), item.getSize()); + String filename = item.getOriginalFilename(); + String suffix = FileUtil.getExtensionName(filename); + String type = FileUtil.getFileType(suffix); + File file = FileUtil.upload(item, this.properties.getPath().getPath() + type + File.separator); + LocalStorage localStorage = new LocalStorage(file.getName(), filename, suffix, file.getPath(), type, FileUtil.getSize(item.getSize())); + result.add(localStorage); } } + if (!CollectionUtils.isEmpty(result)){ + this.saveBatch(result); + } + return result; } - - @Transactional( rollbackFor = {Exception.class} ) - public void deleteAll(Long[] ids) { - Long[] var2 = ids; - int var3 = ids.length; - for(int var4 = 0; var4 < var3; ++var4) { - Long id = var2[var4]; - LocalStorage storage = (LocalStorage)this.localStorageRepository.findById(id).orElseGet(LocalStorage::new); - FileUtil.del(storage.getPath()); - this.localStorageRepository.delete(storage); - } - - } public void download(List queryAll, HttpServletResponse response) throws IOException { List> list = new ArrayList(); @@ -102,13 +91,14 @@ public class LocalStorageServiceImpl implements LocalStorageService { map.put("创建日期", localStorageDTO.getCreateTime()); list.add(map); } - FileUtil.downloadExcel(list, response); } - public LocalStorageServiceImpl(final LocalStorageRepository localStorageRepository, final LocalStorageMapper localStorageMapper, final FileProperties properties) { - this.localStorageRepository = localStorageRepository; - this.localStorageMapper = localStorageMapper; - this.properties = properties; + @Override + public void downloadFile(LocalStorage localStorage, HttpServletRequest request, HttpServletResponse response) throws IOException { + String path = localStorage.getPath(); + File file = new File(path); + FileUtil.downloadFile(request, response,file,false); + } } diff --git a/base-fast/src/main/resources/application-dev.yml b/base-fast/src/main/resources/application-dev.yml index a3397fb..208968a 100644 --- a/base-fast/src/main/resources/application-dev.yml +++ b/base-fast/src/main/resources/application-dev.yml @@ -3,7 +3,7 @@ spring: type: com.alibaba.druid.pool.DruidDataSource druid: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/flowable?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true + url: jdbc:mysql://localhost:3306/basefast?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true username: root password: 123456 initial-size: 10 diff --git a/base-fast/src/main/resources/application.yml b/base-fast/src/main/resources/application.yml index 63b63e2..7b6577b 100644 --- a/base-fast/src/main/resources/application.yml +++ b/base-fast/src/main/resources/application.yml @@ -75,8 +75,8 @@ flowable: # 文件存储路径 file: mac: - path: ~/file/ - avatar: ~/avatar/ + path: /Users/mima0000/Desktop/file/ + avatar: /Users/mima0000/Desktop/avatar/ linux: path: /home/eladmin/file/ avatar: /home/eladmin/avatar/ diff --git a/base-fast/src/main/resources/mapper/contract/ContractDao.xml b/base-fast/src/main/resources/mapper/contract/ContractDao.xml index 3b18b61..3de7571 100644 --- a/base-fast/src/main/resources/mapper/contract/ContractDao.xml +++ b/base-fast/src/main/resources/mapper/contract/ContractDao.xml @@ -6,39 +6,78 @@ + + - + + - + + + + + + + + + + + + + + + + + + + + - + + - + + + + + + - - + + + + + + + + + + + + + - - - - + + + + diff --git a/base-vue/src/main.js b/base-vue/src/main.js index ae3447c..c6169d6 100644 --- a/base-vue/src/main.js +++ b/base-vue/src/main.js @@ -27,9 +27,9 @@ Vue.use(ElementUI) Vue.config.productionTip = true // 非生产环境, 适配mockjs模拟数据 // api: https://github.com/nuysoft/Mock -if (process.env.NODE_ENV !== 'production') { - require('@/mock') -} +// if (process.env.NODE_ENV !== 'production') { +// require('@/mock') +// } // 挂载全局 Vue.prototype.$http = httpRequest // ajax请求方法 diff --git a/base-vue/src/router/index.js b/base-vue/src/router/index.js index 6fa3a12..f116694 100644 --- a/base-vue/src/router/index.js +++ b/base-vue/src/router/index.js @@ -21,7 +21,9 @@ const globalRoutes = [ { path: '/404', component: _import('common/404'), name: '404', meta: { title: '404未找到' } }, { path: '/login', component: _import('common/login'), name: 'login', meta: { title: '登录' } }, { path: '/register', component: _import('modules/sys/register'), name: 'register', meta: { title: '注册' } }, - { path: '/tickets-detail', component: _import('modules/tickets/detail'), name: 'detail-tickets', meta: { title: '工单详情' } } + { path: '/tickets-detail', component: _import('modules/tickets/detail'), name: 'detail-tickets', meta: { title: '工单详情' } }, + { path: '/tickets-approval', component: _import('modules/tickets/approval'), name: 'detail-approval', meta: { title: '工单审批' } }, + { path: '/price-approval', component: _import('modules/price/approval'), name: 'price-approval', meta: { title: '报价单审核' } } ] // 主入口路由(需嵌套上左右整体布局) @@ -75,7 +77,7 @@ router.beforeEach((to, from, next) => { method: 'get', params: http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { fnAddDynamicMenuRoutes(data.menuList) router.options.isAddDynamicMenuRoutes = true sessionStorage.setItem('menuList', JSON.stringify(data.menuList || '[]')) diff --git a/base-vue/src/views/common/UploadDialog.vue b/base-vue/src/views/common/UploadDialog.vue index 7e057a6..350dd0f 100644 --- a/base-vue/src/views/common/UploadDialog.vue +++ b/base-vue/src/views/common/UploadDialog.vue @@ -105,7 +105,7 @@ export default { method: 'post', data: formdata }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/common/home copy.vue b/base-vue/src/views/common/home copy.vue index c738ff4..2412271 100644 --- a/base-vue/src/views/common/home copy.vue +++ b/base-vue/src/views/common/home copy.vue @@ -35,7 +35,7 @@ align="center" width="50"> - + - + @@ -79,7 +79,7 @@

百度地图

- +
@@ -113,7 +113,7 @@ export default { method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataList = data.notices } }) diff --git a/base-vue/src/views/common/login.vue b/base-vue/src/views/common/login.vue index da48d4a..1df0194 100644 --- a/base-vue/src/views/common/login.vue +++ b/base-vue/src/views/common/login.vue @@ -82,7 +82,7 @@ 'captcha': this.dataForm.captcha }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { //数据返回状态为成功,保存token this.$cookie.set('token', data.token) //登陆成功,路由替换为home diff --git a/base-vue/src/views/main-navbar-update-password.vue b/base-vue/src/views/main-navbar-update-password.vue index bc85e86..f85caa6 100644 --- a/base-vue/src/views/main-navbar-update-password.vue +++ b/base-vue/src/views/main-navbar-update-password.vue @@ -86,7 +86,7 @@ 'newPassword': this.dataForm.newPassword }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/main-navbar.vue b/base-vue/src/views/main-navbar.vue index 58877ce..fd78518 100644 --- a/base-vue/src/views/main-navbar.vue +++ b/base-vue/src/views/main-navbar.vue @@ -108,7 +108,7 @@ method: 'post', data: this.$http.adornData() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { clearLoginInfo() this.$router.push({ name: 'login' }) } diff --git a/base-vue/src/views/main.vue b/base-vue/src/views/main.vue index 0b22940..8178f91 100644 --- a/base-vue/src/views/main.vue +++ b/base-vue/src/views/main.vue @@ -81,12 +81,12 @@ method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.loading = false this.userId = data.user.userId this.userName = data.user.username this.img = data.user.img - + } }) } diff --git a/base-vue/src/views/modules/aftersales/aftersales-add-or-update.vue b/base-vue/src/views/modules/aftersales/aftersales-add-or-update.vue index 597a18c..224a655 100644 --- a/base-vue/src/views/modules/aftersales/aftersales-add-or-update.vue +++ b/base-vue/src/views/modules/aftersales/aftersales-add-or-update.vue @@ -344,7 +344,7 @@ method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataForm.contractType = String(data.contract.contractType) this.dataForm.isMaster = data.contract.isMaster this.dataForm.contractNumber = data.contract.contractNumber @@ -404,7 +404,7 @@ 'storageId': `${ids}${this.dataForm.storageId}` }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', @@ -435,7 +435,7 @@ 'key': this.dataForm.key }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataList = data.page.list this.totalPage = data.page.totalCount } else { diff --git a/base-vue/src/views/modules/aftersales/aftersales.vue b/base-vue/src/views/modules/aftersales/aftersales.vue index e9af04c..e746418 100644 --- a/base-vue/src/views/modules/aftersales/aftersales.vue +++ b/base-vue/src/views/modules/aftersales/aftersales.vue @@ -173,7 +173,7 @@ 'key': this.dataForm.key }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataList = data.page.list this.totalPage = data.page.totalCount } else { @@ -220,7 +220,7 @@ method: 'post', data: this.$http.adornData(ids, false) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/aftersales/temp-add-or-update.vue b/base-vue/src/views/modules/aftersales/temp-add-or-update.vue index eb4ba02..3b03911 100644 --- a/base-vue/src/views/modules/aftersales/temp-add-or-update.vue +++ b/base-vue/src/views/modules/aftersales/temp-add-or-update.vue @@ -121,7 +121,7 @@ export default { method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataForm.contractNumber = data.contract.contractNumber this.dataForm.clientId = data.contract.clientId this.dataForm.materData = JSON.parse(data.contract.materialJson).material diff --git a/base-vue/src/views/modules/aftersales/temp-add-or-update的副本.vue b/base-vue/src/views/modules/aftersales/temp-add-or-update的副本.vue index d9ab344..1857de7 100644 --- a/base-vue/src/views/modules/aftersales/temp-add-or-update的副本.vue +++ b/base-vue/src/views/modules/aftersales/temp-add-or-update的副本.vue @@ -115,7 +115,7 @@ export default { method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataForm.contractNumber = data.contract.contractNumber this.dataForm.clientId = data.contract.clientId this.dataForm.materData = JSON.parse(data.contract.materialJson).material diff --git a/base-vue/src/views/modules/car/car-add-or-update.vue b/base-vue/src/views/modules/car/car-add-or-update.vue index 66fc618..fec7a43 100644 --- a/base-vue/src/views/modules/car/car-add-or-update.vue +++ b/base-vue/src/views/modules/car/car-add-or-update.vue @@ -75,7 +75,7 @@ method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataForm.carName = data.car.carName this.dataForm.navigationType = String(data.car.navigationType) this.dataForm.remarks = data.car.remarks @@ -100,7 +100,7 @@ 'isOn': this.dataForm.isOn }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/car/car.vue b/base-vue/src/views/modules/car/car.vue index 07379e7..f1241a9 100644 --- a/base-vue/src/views/modules/car/car.vue +++ b/base-vue/src/views/modules/car/car.vue @@ -136,7 +136,7 @@ 'key': this.dataForm.key }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataList = data.page.list this.totalPage = data.page.totalCount } else { @@ -183,7 +183,7 @@ method: 'post', data: this.$http.adornData(ids, false) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/client/client-add-or-update.vue b/base-vue/src/views/modules/client/client-add-or-update.vue index 650197a..3f9d581 100644 --- a/base-vue/src/views/modules/client/client-add-or-update.vue +++ b/base-vue/src/views/modules/client/client-add-or-update.vue @@ -98,7 +98,7 @@ method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataForm.clientName = data.client.clientName this.dataForm.juridicalPerson = data.client.juridicalPerson this.dataForm.address = data.client.address @@ -133,7 +133,7 @@ 'isOn': this.dataForm.isOn }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/client/client.vue b/base-vue/src/views/modules/client/client.vue index 67ee86f..13a3859 100644 --- a/base-vue/src/views/modules/client/client.vue +++ b/base-vue/src/views/modules/client/client.vue @@ -153,7 +153,7 @@ 'key': this.dataForm.key }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataList = data.page.list this.totalPage = data.page.totalCount } else { @@ -200,7 +200,7 @@ method: 'post', data: this.$http.adornData(ids, false) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/contract/contract-add-or-update.vue b/base-vue/src/views/modules/contract/contract-add-or-update.vue index a8f9edd..fe2f8c5 100644 --- a/base-vue/src/views/modules/contract/contract-add-or-update.vue +++ b/base-vue/src/views/modules/contract/contract-add-or-update.vue @@ -1,527 +1,807 @@ - - diff --git a/base-vue/src/views/modules/contract/contract.vue b/base-vue/src/views/modules/contract/contract.vue index 74be46c..93468f0 100644 --- a/base-vue/src/views/modules/contract/contract.vue +++ b/base-vue/src/views/modules/contract/contract.vue @@ -29,6 +29,15 @@ align="center" label="合同ID">
+ + + + label="主合同"> + + label="合同总价"> - - + - + label="创建日期"> { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataList = data.page.list this.totalPage = data.page.totalCount } else { @@ -219,7 +221,7 @@ method: 'post', data: this.$http.adornData(ids, false) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/contract/contract3.vue b/base-vue/src/views/modules/contract/contract3.vue new file mode 100644 index 0000000..3640976 --- /dev/null +++ b/base-vue/src/views/modules/contract/contract3.vue @@ -0,0 +1,299 @@ + + + + + diff --git a/base-vue/src/views/modules/contract/temp-add-or-update.vue b/base-vue/src/views/modules/contract/temp-add-or-update.vue index 841271d..3e3f580 100644 --- a/base-vue/src/views/modules/contract/temp-add-or-update.vue +++ b/base-vue/src/views/modules/contract/temp-add-or-update.vue @@ -7,11 +7,11 @@
需方:{{ dictData[1] | findByValue(dataForm.clientId) }}
-
合同编号:{{ dataForm.contractNumber }}
+
合同编号:{{ dataForm.contractCode }}
供方:上海诺力智能科技有限公司
-
签订时间:
+
生效日期:{{ dataForm.effective_time }}

一、产品明细单

@@ -25,35 +25,71 @@ - + - - - - - + + + + + - + - +
总价(元) 备注
{{ i+1 }} {{ e.materialName }}
{{ e.materialCode }}
{{ e.materialType }}{{ e.quantity }}{{ e.unit }}{{ e.price }}{{ e.total }}{{ e.materialSpec }}{{ e.qty }}{{ e.unitName }}{{ e.salePrice }}{{ e.amount }} {{ e.remark }}
共计:{{ dataForm.totalSum }}{{ dataForm.totalPrice }}
共计人民币金额:(大写){{ dataForm.totalSumChina }}共计人民币金额:(大写){{ toChineseCurrency(dataForm.totalPrice) }} 含13%增值税
-

二、质量要求、技术标准、供方对质量负责的条件和期限:技术标准符合行业标准。

-

三、售后服务:保修期6个月,人为造成的损坏不在质保范围内。

-

四、交货时间、地点:货期:待定;交货地:待客户通知。

-

五、运输方式及到达站和费用负担:由供方负担。

-

六、包装标准:按国内标准包装。

-

八、结算方式:款到发货,付款方式:电汇。

-

八、违约责任:按《中华人民共和国民法典》执行。

-

九、解决合同纠纷的方式:买卖双方首先友好协商解决,协商不成,任何一方均可向有管辖权法院起诉。

-

十、其它约定事项:合同扫描件有效,签字盖章之日起生效。

+
+
+ 二、 质量要求、技术标准、供方对质量负责的条件和期限: + + +
+
+ 三、 售后服务: + + +
+
+ 四、 交货时间、地点: + 货期: + + 。交货地: + +
+
+ 五、 运输方式及到达站和费用负担: + +
+
+ 六、 包装标准: + +
+
+ 七、 结算方式: + + 付款方式: + +
+
+ 八、 违约责任: + +
+
+ 九、 解决合同纠纷的方式: + +
+
+ 十、 其它约定事项: + +
+
@@ -61,12 +97,12 @@
需方:
-
单位名称:{{ dataForm.client.clientName }}
-
地址:{{ dataForm.client.address }}
-
委托代理电话:{{ dataForm.client.tel }}
-
传真:{{ dataForm.client.fax }}
-
开户银行:{{ dataForm.client.bank }}
-
帐号:{{ dataForm.client.card }}
+
单位名称:
+
地址:
+
委托代理电话:
+
传真:
+
开户银行:
+
帐号:
单位名称:上海诺力智能科技有限公司(盖章)
@@ -112,6 +148,14 @@ export default { card: '' } }, + client: { + clientName: '', + tel: '', + address: '', + fax: '', + bank: '', + card: '' + }, dataList: [] } }, @@ -129,51 +173,119 @@ export default { method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { - this.dataForm.contractNumber = data.contract.contractNumber + if (data && data.code === 200) { + this.dataForm.contractId = data.contract.contractId + this.dataForm.contractType = data.contract.contractType + this.dataForm.projectType = data.contract.projectType + this.dataForm.isMaster = data.contract.isMaster + this.dataForm.parentContract = data.contract.parentContract + this.dataForm.contractCode = data.contract.contractCode + this.dataForm.totalPrice = data.contract.totalPrice this.dataForm.clientId = data.contract.clientId - this.dataForm.client = data.contract.client - this.dataForm.materData = JSON.parse(data.contract.materialJson).material - this.dataForm.totalSum = JSON.parse(data.contract.materialJson).total - this.dataForm.totalSumChina = this.toChineseCurrency(this.dataForm.totalSum) + this.dataForm.materialJson = data.contract.materialJson + this.dataForm.isAcceptance = data.contract.isAcceptance + this.dataForm.acceptanceTime = data.contract.acceptanceTime + this.dataForm.priceId = data.contract.priceId + this.dataForm.effectiveTime = data.contract.effectiveTime + this.dataForm.createTime = data.contract.createTime + this.dataForm.CreateName = data.contract.CreateName + this.dataForm.updateTime = data.contract.updateTime + this.dataForm.qc = data.contract.qc + this.dataForm.afterSales = data.contract.afterSales + this.dataForm.delivery = data.contract.delivery + this.dataForm.place = data.contract.place + this.dataForm.transport = data.contract.transport + this.dataForm.pay = data.contract.pay + this.dataForm.payment = data.contract.payment + this.dataForm.breach = data.contract.breach + this.dataForm.solveDispute = data.contract.solveDispute + this.dataForm.supplement = data.contract.supplement + this.dataForm.packaging = data.contract.packaging + this.dataForm.annex = data.contract.annex + this.dataForm.status = data.contract.status + this.dataForm.remarks = data.contract.remarks + this.materData = JSON.parse(data.contract.materialJson) + this.client = data.contract.client } }) } }) }, - toChineseCurrency (amount) { - if (amount === 0) return '零元整' - const units = ['', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿'] - const digits = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'] - const result = [] - // 将金额转换为整数部分和小数部分 - const integerPart = Math.floor(amount) // 整数部分 - const decimalPart = amount - integerPart // 小数部分 - // 处理整数部分 - let integerStr = integerPart.toString() - for (let i = 0; i < integerStr.length; i++) { - const digit = integerStr[integerStr.length - 1 - i]; - if (digit !== '0') { - result.push(digits[digit], units[i]) - } else if (!result.includes('零') && result.length > 0) { - result.push('零') - } - } - // 处理小数部分 - if (decimalPart > 0) { - const decimalStr = (decimalPart * 100).toFixed(0).padStart(2, '0') // 小数部分乘以100并转为字符串 - if (decimalStr !== '00') { - result.push('点') - for (let i = 0; i < decimalStr.length; i++) { - result.push(digits[decimalStr[i]]) + toChineseCurrency (num) { + if (!num || isNaN(num)) return '零元整' + + const integerNum = Math.floor(Math.abs(num)) + const decimalNum = Math.round((Math.abs(num) - integerNum) * 100) + + if (integerNum > 999999999999.99) return '数值过大' + + // 中文数字字符 + const cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'] + // 整数单位 + const cnIntRadice = ['', '拾', '佰', '仟'] + // 整数扩展单位 + const cnIntUnits = ['', '万', '亿', '兆'] + // 小数单位 + const cnDecUnits = ['角', '分'] + + // 整数部分转换 + let integerStr = '' + if (integerNum === 0) { + integerStr = '零' + } else { + let zeroCount = 0 + const integerStrArr = integerNum.toString().split('').reverse() + + for (let i = 0; i < integerStrArr.length; i++) { + let n = integerStrArr[i] + const p = i % 4 + const q = Math.floor(i / 4) + + if (n == '0') { + zeroCount++ + } else { + if (zeroCount > 0) { + integerStr = cnNums[0] + integerStr + } + zeroCount = 0 + integerStr = cnNums[parseInt(n)] + cnIntRadice[p] + integerStr + } + + if (p == 0 && zeroCount < 4) { + integerStr = cnIntUnits[q] + integerStr } } } - // 去掉多余的零 - while (result[0] === '零') { - result.shift() + + // 小数部分转换 + let decimalStr = '' + if (decimalNum > 0) { + const decStr = decimalNum.toString().padStart(2, '0') + const jiao = decStr[0] + const fen = decStr[1] + + if (jiao > 0) { + decimalStr += cnNums[jiao] + cnDecUnits[0] + } + if (fen > 0) { + decimalStr += cnNums[fen] + cnDecUnits[1] + } } - return result.join('') + (decimalPart > 0 ? '元' : '元整') + // 组合结果 + let result = '' + if (integerStr) { + result += integerStr + '元' + } + if (decimalStr) { + result += decimalStr + } else { + result += '整' + } + // 处理负数 + if (num < 0) { + result = '负' + result + } + return result }, exportToWord () { const data = { @@ -259,4 +371,7 @@ export default { .det_table_1 th, .det_table_1 td { text-align: left; } +.clause-item { + margin-top: 8px; +} diff --git a/base-vue/src/views/modules/contract/temp-add-or-update的副本.vue b/base-vue/src/views/modules/contract/temp-add-or-update的副本.vue index d9ab344..1857de7 100644 --- a/base-vue/src/views/modules/contract/temp-add-or-update的副本.vue +++ b/base-vue/src/views/modules/contract/temp-add-or-update的副本.vue @@ -115,7 +115,7 @@ export default { method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataForm.contractNumber = data.contract.contractNumber this.dataForm.clientId = data.contract.clientId this.dataForm.materData = JSON.parse(data.contract.materialJson).material diff --git a/base-vue/src/views/modules/deploy/flwdeploy.vue b/base-vue/src/views/modules/deploy/flwdeploy.vue index 60df1a5..4cd93c7 100644 --- a/base-vue/src/views/modules/deploy/flwdeploy.vue +++ b/base-vue/src/views/modules/deploy/flwdeploy.vue @@ -101,7 +101,7 @@ 'key': this.dataForm.key }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataList = data.page.list this.totalPage = data.page.totalCount } else { @@ -141,7 +141,7 @@ method: 'post', data: this.$http.adornData(ids, false) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/deploy/flwdeployprodef.vue b/base-vue/src/views/modules/deploy/flwdeployprodef.vue index 11405db..d96c9d2 100644 --- a/base-vue/src/views/modules/deploy/flwdeployprodef.vue +++ b/base-vue/src/views/modules/deploy/flwdeployprodef.vue @@ -207,7 +207,7 @@ 'key': this.dataForm.key }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataList = data.page.list this.totalPage = data.page.totalCount } else { @@ -236,7 +236,7 @@ method: 'get', params: this.$http.adornParams(this.flowForm) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', @@ -264,7 +264,7 @@ method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dynamiForm = [...data.data] this.users = [...data.users] this.roles = [...data.roles] @@ -286,7 +286,7 @@ method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { // 获取返回的图片信息 this.flowXML = vkbeautify.xml(data.flowXML) this.dialogXMLVisible = true @@ -307,7 +307,7 @@ 'id': id }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/flow/flow.vue b/base-vue/src/views/modules/flow/flow.vue index be6b293..7f5cc95 100644 --- a/base-vue/src/views/modules/flow/flow.vue +++ b/base-vue/src/views/modules/flow/flow.vue @@ -136,7 +136,7 @@ export default { 'modelXml': xmlStr }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/flow/flwdemodel-add-or-update.vue b/base-vue/src/views/modules/flow/flwdemodel-add-or-update.vue index 66354ca..3936fb2 100644 --- a/base-vue/src/views/modules/flow/flwdemodel-add-or-update.vue +++ b/base-vue/src/views/modules/flow/flwdemodel-add-or-update.vue @@ -53,7 +53,7 @@ method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataForm.name = data.flwDeModel.name this.dataForm.modelKey = data.flwDeModel.modelKey this.dataForm.tenantId = data.flwDeModel.tenantId @@ -80,7 +80,7 @@ 'name': this.dataForm.name }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/flow/flwdemodel.vue b/base-vue/src/views/modules/flow/flwdemodel.vue index 5fd3630..3af5690 100644 --- a/base-vue/src/views/modules/flow/flwdemodel.vue +++ b/base-vue/src/views/modules/flow/flwdemodel.vue @@ -139,7 +139,7 @@ 'key': this.dataForm.key }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataList = data.page.list this.totalPage = data.page.totalCount } else { @@ -182,7 +182,7 @@ method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '部署操作成功', type: 'success', @@ -210,7 +210,7 @@ method: 'post', data: this.$http.adornData(ids, false) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/instance/flwmycompleteinstance.vue b/base-vue/src/views/modules/instance/flwmycompleteinstance.vue index 2187b19..f2c6373 100644 --- a/base-vue/src/views/modules/instance/flwmycompleteinstance.vue +++ b/base-vue/src/views/modules/instance/flwmycompleteinstance.vue @@ -117,6 +117,7 @@ @@ -131,6 +132,15 @@ :total="totalPage" layout="total, sizes, prev, pager, next, jumper"> + + + 流程进度图 + { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataList = data.page.list this.totalPage = data.page.totalCount } else { @@ -273,7 +285,7 @@ method: 'post', data: this.$http.adornData(ids, false) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', @@ -288,6 +300,31 @@ }) }).catch(() => {}) }, + flowProgress(processInstance) { + // 传递流程实例ID作为参数(假设后端需要的参数名为procid) + this.$http({ + url: this.$http.adornUrl('/file/fileController/downloadFlowActiveImg'), + method: 'get', + params: this.$http.adornParams({ + procId: processInstance // 关键:传递流程实例ID + }), + responseType: 'blob' // 关键:声明响应类型为二进制blob + }).then((response) => { + // 成功获取二进制图片数据 + this.flowImgUrl = URL.createObjectURL(response.data); // 转换为可展示的URL + this.dialogVisible = true; // 显示弹框 + }).catch((error) => { + // 错误处理(可能返回JSON格式的错误信息) + console.error('获取流程图失败', error); + // 尝试解析错误信息(若后端返回JSON错误) + if (error.response && error.response.data) { + const errorData = error.response.data; + this.$message.error(errorData.msg || '获取流程图失败,请稍后重试'); + } else { + this.$message.error('获取流程图失败,请稍后重试'); + } + }); + }, startFlowHandle(id){ this.flowForm = {} this.flowForm.ticketsId = id @@ -296,7 +333,7 @@ method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dynamiForm = [...data.data] this.users = [...data.users] this.roles = [...data.roles] @@ -311,7 +348,7 @@ method: 'get', params: this.$http.adornParams(this.flowForm) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/instance/flwmyinstance.vue b/base-vue/src/views/modules/instance/flwmyinstance.vue index f428375..be63040 100644 --- a/base-vue/src/views/modules/instance/flwmyinstance.vue +++ b/base-vue/src/views/modules/instance/flwmyinstance.vue @@ -117,6 +117,7 @@ @@ -131,6 +132,15 @@ :total="totalPage" layout="total, sizes, prev, pager, next, jumper"> + + + 流程进度图 + { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataList = data.page.list this.totalPage = data.page.totalCount } else { @@ -272,7 +284,7 @@ method: 'post', data: this.$http.adornData(ids, false) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', @@ -287,6 +299,31 @@ }) }).catch(() => {}) }, + flowProgress(processInstance) { + // 传递流程实例ID作为参数(假设后端需要的参数名为procid) + this.$http({ + url: this.$http.adornUrl('/file/fileController/downloadFlowActiveImg'), + method: 'get', + params: this.$http.adornParams({ + procId: processInstance // 关键:传递流程实例ID + }), + responseType: 'blob' // 关键:声明响应类型为二进制blob + }).then((response) => { + // 成功获取二进制图片数据 + this.flowImgUrl = URL.createObjectURL(response.data); // 转换为可展示的URL + this.dialogVisible = true; // 显示弹框 + }).catch((error) => { + // 错误处理(可能返回JSON格式的错误信息) + console.error('获取流程图失败', error); + // 尝试解析错误信息(若后端返回JSON错误) + if (error.response && error.response.data) { + const errorData = error.response.data; + this.$message.error(errorData.msg || '获取流程图失败,请稍后重试'); + } else { + this.$message.error('获取流程图失败,请稍后重试'); + } + }); + }, startFlowHandle(id){ this.flowForm = {} this.flowForm.ticketsId = id @@ -295,7 +332,7 @@ method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dynamiForm = [...data.data] this.users = [...data.users] this.roles = [...data.roles] @@ -310,7 +347,7 @@ method: 'get', params: this.$http.adornParams(this.flowForm) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/instance/flwtodoinstance.vue b/base-vue/src/views/modules/instance/flwtodoinstance.vue index 54f579c..81c9767 100644 --- a/base-vue/src/views/modules/instance/flwtodoinstance.vue +++ b/base-vue/src/views/modules/instance/flwtodoinstance.vue @@ -117,8 +117,9 @@ @@ -131,6 +132,15 @@ :total="totalPage" layout="total, sizes, prev, pager, next, jumper"> + + + 流程进度图 + { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataList = data.page.list this.totalPage = data.page.totalCount } else { @@ -272,7 +284,7 @@ method: 'post', data: this.$http.adornData(ids, false) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', @@ -287,6 +299,31 @@ }) }).catch(() => {}) }, + flowProgress(processInstance) { + // 传递流程实例ID作为参数(假设后端需要的参数名为procid) + this.$http({ + url: this.$http.adornUrl('/file/fileController/downloadFlowActiveImg'), + method: 'get', + params: this.$http.adornParams({ + procId: processInstance // 关键:传递流程实例ID + }), + responseType: 'blob' // 关键:声明响应类型为二进制blob + }).then((response) => { + // 成功获取二进制图片数据 + this.flowImgUrl = URL.createObjectURL(response.data); // 转换为可展示的URL + this.dialogVisible = true; // 显示弹框 + }).catch((error) => { + // 错误处理(可能返回JSON格式的错误信息) + console.error('获取流程图失败', error); + // 尝试解析错误信息(若后端返回JSON错误) + if (error.response && error.response.data) { + const errorData = error.response.data; + this.$message.error(errorData.msg || '获取流程图失败,请稍后重试'); + } else { + this.$message.error('获取流程图失败,请稍后重试'); + } + }); + }, startFlowHandle(id){ this.flowForm = {} this.flowForm.ticketsId = id @@ -295,7 +332,7 @@ method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dynamiForm = [...data.data] this.users = [...data.users] this.roles = [...data.roles] @@ -310,7 +347,7 @@ method: 'get', params: this.$http.adornParams(this.flowForm) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/knowledge/knowledge-add-or-update.vue b/base-vue/src/views/modules/knowledge/knowledge-add-or-update.vue index 305ac59..75fe54c 100644 --- a/base-vue/src/views/modules/knowledge/knowledge-add-or-update.vue +++ b/base-vue/src/views/modules/knowledge/knowledge-add-or-update.vue @@ -78,7 +78,7 @@ export default { method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataForm.materialCode = data.material.materialCode this.dataForm.materialName = data.material.materialName this.dataForm.materialType = String(data.material.materialType) @@ -103,7 +103,7 @@ export default { 'isOn': this.dataForm.isOn }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/knowledge/knowledge.vue b/base-vue/src/views/modules/knowledge/knowledge.vue index a285164..aaddda9 100644 --- a/base-vue/src/views/modules/knowledge/knowledge.vue +++ b/base-vue/src/views/modules/knowledge/knowledge.vue @@ -134,7 +134,7 @@ export default { // 'key': this.dataForm.key // }) // }).then(({data}) => { - // if (data && data.code === 0) { + // if (data && data.code === 200) { // this.dataList = data.page.list // this.totalPage = data.page.totalCount // } else { @@ -181,7 +181,7 @@ export default { method: 'post', data: this.$http.adornData(ids, false) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/material/material-add-or-update.vue b/base-vue/src/views/modules/material/material-add-or-update.vue index 32fad61..c9d6c46 100644 --- a/base-vue/src/views/modules/material/material-add-or-update.vue +++ b/base-vue/src/views/modules/material/material-add-or-update.vue @@ -86,7 +86,7 @@ method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataForm.materialCode = data.material.materialCode this.dataForm.materialName = data.material.materialName this.dataForm.unitName = data.material.unitName @@ -115,7 +115,7 @@ 'isOn': this.dataForm.isOn }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/material/material.vue b/base-vue/src/views/modules/material/material.vue index 4b8ff56..6fe2883 100644 --- a/base-vue/src/views/modules/material/material.vue +++ b/base-vue/src/views/modules/material/material.vue @@ -153,7 +153,7 @@ 'key': this.dataForm.key }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataList = data.page.list this.totalPage = data.page.totalCount } else { @@ -204,7 +204,7 @@ method: 'post', data: this.$http.adornData(ids, false) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/materialprice/material-add-or-update.vue b/base-vue/src/views/modules/materialprice/material-add-or-update.vue index e501a6b..2f1e846 100644 --- a/base-vue/src/views/modules/materialprice/material-add-or-update.vue +++ b/base-vue/src/views/modules/materialprice/material-add-or-update.vue @@ -72,7 +72,7 @@ method: 'get', params: this.$http.adornParams() }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataForm.materialCode = data.material.materialCode this.dataForm.materialName = data.material.materialName this.dataForm.unitName = data.material.unitName @@ -105,7 +105,7 @@ 'isOn': this.dataForm.isOn }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/materialprice/materialprice.vue b/base-vue/src/views/modules/materialprice/materialprice.vue index f3d3052..5942745 100644 --- a/base-vue/src/views/modules/materialprice/materialprice.vue +++ b/base-vue/src/views/modules/materialprice/materialprice.vue @@ -153,7 +153,7 @@ export default { 'key': this.dataForm.key }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataList = data.page.list this.totalPage = data.page.totalCount } else { @@ -204,7 +204,7 @@ export default { method: 'post', data: this.$http.adornData(ids, false) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/materialprice/price-list.vue b/base-vue/src/views/modules/materialprice/price-list.vue index ff78efd..0c6bb48 100644 --- a/base-vue/src/views/modules/materialprice/price-list.vue +++ b/base-vue/src/views/modules/materialprice/price-list.vue @@ -99,7 +99,7 @@ 'materialCode': materialCode }) }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.dataList = data.data this.totalPage = data.total } @@ -113,7 +113,7 @@ method: 'post', data: price }).then(({data}) => { - if (data && data.code === 0) { + if (data && data.code === 200) { this.$message({ message: '操作成功', type: 'success', diff --git a/base-vue/src/views/modules/price/approval.vue b/base-vue/src/views/modules/price/approval.vue new file mode 100644 index 0000000..d4fc43e --- /dev/null +++ b/base-vue/src/views/modules/price/approval.vue @@ -0,0 +1,802 @@ + + + + diff --git a/base-vue/src/views/modules/price/price-add-or-update.vue b/base-vue/src/views/modules/price/price-add-or-update.vue index 1a71790..81de0be 100644 --- a/base-vue/src/views/modules/price/price-add-or-update.vue +++ b/base-vue/src/views/modules/price/price-add-or-update.vue @@ -13,7 +13,6 @@
诺力物流机器人
报价单
- @@ -26,7 +25,7 @@ - + @@ -35,7 +34,7 @@ v-model="dataForm.fattn" @change="changeUser($event, dictData[1],dataForm,'fmobile')" clearable> - + @@ -48,7 +47,7 @@ - + @@ -61,9 +60,9 @@ - + @@ -77,7 +76,7 @@ - + @@ -94,16 +93,22 @@ 物料明细 - - + + - - - - + + + - - + + + + + @@ -132,39 +138,41 @@ 其他注意事项 -
- 附件 - 支持多文件,单文件 ≤ 5MB -
+ -
+
- + class="upload-demo" + ref="upload" + :on-change="handleChange" + :on-remove="handleRemove" + :on-preview="handleLoad" + :file-list="fileList" + :auto-upload="false"> + 选取文件 +
只能上传图片,word,excel,pdf文件,且不超过50MB
- - - + + + + + + @@ -251,13 +259,13 @@ + + diff --git a/base-vue/src/views/modules/tickets/detail.vue b/base-vue/src/views/modules/tickets/detail.vue index 30424cb..e1fd77e 100644 --- a/base-vue/src/views/modules/tickets/detail.vue +++ b/base-vue/src/views/modules/tickets/detail.vue @@ -1,5 +1,7 @@