diff --git a/logon/jnlogo_GHJ20240530155919642230.png b/logon/jnlogo_GHJ20240530155919642230.png new file mode 100644 index 0000000..4b005d0 Binary files /dev/null and b/logon/jnlogo_GHJ20240530155919642230.png differ diff --git a/logon/jnlogo_TEP20240530161415441482.png b/logon/jnlogo_TEP20240530161415441482.png new file mode 100644 index 0000000..4b005d0 Binary files /dev/null and b/logon/jnlogo_TEP20240530161415441482.png differ diff --git a/logon/jnlogo_UEK20240530160550759376.png b/logon/jnlogo_UEK20240530160550759376.png new file mode 100644 index 0000000..4b005d0 Binary files /dev/null and b/logon/jnlogo_UEK20240530160550759376.png differ diff --git a/logon/jnlogo_UKD20240530160929375474.png b/logon/jnlogo_UKD20240530160929375474.png new file mode 100644 index 0000000..4b005d0 Binary files /dev/null and b/logon/jnlogo_UKD20240530160929375474.png differ diff --git a/logon/wc_IMS20240530160929381882.png b/logon/wc_IMS20240530160929381882.png new file mode 100644 index 0000000..ae1f9fa Binary files /dev/null and b/logon/wc_IMS20240530160929381882.png differ diff --git a/logon/wc_KTV20240530160550766652.png b/logon/wc_KTV20240530160550766652.png new file mode 100644 index 0000000..ae1f9fa Binary files /dev/null and b/logon/wc_KTV20240530160550766652.png differ diff --git a/logon/wc_LSV20240530155919693429.png b/logon/wc_LSV20240530155919693429.png new file mode 100644 index 0000000..ae1f9fa Binary files /dev/null and b/logon/wc_LSV20240530155919693429.png differ diff --git a/logon/wc_OSN20240530161415482874.png b/logon/wc_OSN20240530161415482874.png new file mode 100644 index 0000000..ae1f9fa Binary files /dev/null and b/logon/wc_OSN20240530161415482874.png differ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java index 32eb6f1..fdb08bd 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java @@ -3,12 +3,14 @@ package com.ruoyi; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.scheduling.annotation.EnableAsync; /** * 启动程序 - * + * * @author ruoyi */ +@EnableAsync @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) public class RuoYiApplication { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/quot/QuotController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/quot/QuotController.java index 28802ba..6ad8cb2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/quot/QuotController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/quot/QuotController.java @@ -118,6 +118,7 @@ public class QuotController extends BaseController { Quot quot = quotService.selectQuotByQuotId(quotId); quot.setQuotApprovalStatus("1");// 提交状态设置为 协助中 + quotService.updateQuot(quot); return success(quot); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/redBook/RedBookController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/redBook/RedBookController.java index a4c809e..0921dee 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/redBook/RedBookController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/redBook/RedBookController.java @@ -9,6 +9,7 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.DataSourceType; +import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.uuid.UUID; import com.ruoyi.customer.domain.Customer; @@ -17,13 +18,21 @@ import com.ruoyi.redBook.domain.Product; import com.ruoyi.redBook.domain.OAQuot; import com.ruoyi.redBook.domain.RbVersionDateResult; import com.ruoyi.redBook.service.IRedBookService; +import com.ruoyi.redBook.service.impl.AsyncRbTaskService; import com.ruoyi.web.utils.IdUtils; +import com.ruoyi.web.utils.ListSplitUtil; import com.ruoyi.web.utils.rbExcel.excelUtil; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; import java.util.*; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; /** * 红本管理Controller @@ -41,6 +50,9 @@ public class RedBookController extends BaseController @Autowired private RedisCache redisCache; + @Resource + private AsyncRbTaskService asyncRbTaskService; + /** * 获取目录 * @param product @@ -302,15 +314,39 @@ public class RedBookController extends BaseController */ @DataSource(DataSourceType.OAREDBOOK) @PostMapping("/updateSelectedResultData") - public AjaxResult updateSelectedResultData(@RequestBody List params) - { + public AjaxResult updateSelectedResultData(@RequestBody List params) throws ExecutionException, InterruptedException { - List oaQuotProducts = redBookService.queryRedBPriceByParams(params); - logger.info("根据选择的调价日期 匹配数据结果: {}", oaQuotProducts); - return success(oaQuotProducts); + System.out.println("开始时间:" + DateUtils.getTime()); + List> list = ListSplitUtil.averageList(params,10); + List OAQuotProducts = new ArrayList<>(); + + //定义一个存所有线程回调函数的list + List>> futureList=new ArrayList<>(); + int num = 1; + for(List lt:list){ + futureList.add(asyncRbTaskService.executeAsyncTask("线程"+num+"【"+lt.size()+"条】",lt)); + num++; + } + //判断进程是否全部结束** + while (true){ + //回调信息空了就结束** + if (futureList.isEmpty()){ + break; + } + for (int i = 0; i < futureList.size(); i++) { + if (futureList.get(i).isDone()){ + OAQuotProducts.addAll(futureList.get(i).get()); + //判断线程结束,输出回调信息,并将该回调清除 + futureList.remove(i); + }else { + continue; + } + } + } + System.out.println("结束时间:" + DateUtils.getTime()); + return success(OAQuotProducts); } - /** * 查询已生成的报价单列表 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/quot/quotJswController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/quot/quotJswController.java index 9694076..5a7c320 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/quot/quotJswController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/quot/quotJswController.java @@ -1,10 +1,15 @@ package com.ruoyi.web.controller.tool.quot; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.customer.domain.qcc.QccFuzzySearchJsonResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,9 +20,15 @@ public class quotJswController extends BaseController { @ApiOperation("同步报价数据") @PostMapping("/updateQuot") - public R updateQuot(quotModel quot) + public R updateQuot(@RequestBody String quotJson) { - System.out.println(quot.getQuotCode()); - return R.ok(quot); + System.out.println(quotJson); + quotModel quot = JSON.parseObject(quotJson, quotModel.class); + System.out.println(quot); + + if(StringUtils.isBlank(quot.getQuotJswCode())){ + return R.fail("JswCode不能为空"); + } + return R.ok(); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/utils/ListSplitUtil.java b/ruoyi-admin/src/main/java/com/ruoyi/web/utils/ListSplitUtil.java new file mode 100644 index 0000000..17a92bf --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/utils/ListSplitUtil.java @@ -0,0 +1,123 @@ +package com.ruoyi.web.utils; + +import java.util.ArrayList; +import java.util.List; + +public class ListSplitUtil { + /** + * @param source + * @param n 每次分割的个数 + * @return java.util.List> + * @Title: 将list按照指定元素个数(n)分割 + * @methodName: partList + * @Description: 若是指定元素个数(n)>list.size(),则返回list;这时候商:0;余数:list.size() + * @author: 王延飞 + * @date: 2018-07-18 21:13 + */ + public static List> partList(List source, int n) { + + if (source == null) { + return null; + } + + if (n == 0) { + return null; + } + List> result = new ArrayList>(); + // 集合长度 + int size = source.size(); + // 余数 + int remaider = size % n; + System.out.println("余数:" + remaider); + // 商 + int number = size / n; + System.out.println("商:" + number); + + for (int i = 0; i < number; i++) { + List value = source.subList(i * n, (i + 1) * n); + result.add(value); + } + + if (remaider > 0) { + List subList = source.subList(size - remaider, size); + result.add(subList); + } + return result; + } + + /** + * @Title: 将一个list均分红n个list,主要经过偏移量来实现的 + * @methodName: averageList + * @param source + * @param n 等分个数 + * @return java.util.List> + * @Description: + * + * @author: 王延飞 + * @date: 2018-07-18 21:15 + */ + public static List> averageList(List source,int n){ + + + if (source == null) { + return null; + } + + if (n == 0) { + return null; + } + List> result = new ArrayList>(); + // 集合长度 + int size = source.size(); + // 余数 + int remaider = size % n; + System.out.println("余数:" + remaider); + // 商 + int number = size / n; + System.out.println("商:" + number); + + int offset=0;//偏移量 + for(int i=0;i value=null; + if(remaider>0){ + value=source.subList(i*number+offset, (i+1)*number+offset+1); + remaider--; + offset++; + }else{ + value=source.subList(i*number+offset, (i+1)*number+offset); + } + result.add(value); + } + return result; + } + + public static void main(String[] args) { + ArrayList list = new ArrayList<>(); + list.add("1"); + list.add("2"); + list.add("3"); + list.add("4"); + list.add("5"); + list.add("6"); + list.add("7"); + list.add("8"); + + List> lists = partList(list, 9); + System.out.println("【指定元素个数(9)等分】:" + lists); // 【指定元素个数(9)等分】:[[1, 2, 3, 4, 5, 6, 7, 8]] + + List> lists2 = partList(list, 2); + System.out.println("【指定元素个数(2)等分】:" + lists2); // 【指定元素个数(2)等分】:[[1, 2], [3, 4], [5, 6], [7, 8]] + + List> lists3 = partList(list, 3); + System.out.println("【指定元素个数(3)等分】:" + lists3); // 【指定元素个数(3)等分】:[[1, 2, 3], [4, 5, 6], [7, 8]] + + List> lists11 = averageList(list, 9); + System.out.println("【集合(9)等分】:" + lists11); // 【集合(9)等分】:[[1], [2], [3], [4], [5], [6], [7], [8], []] + + List> lists21 = averageList(list, 2); + System.out.println("【集合(2)等分】:" + lists21); // 【集合(2)等分】:[[1, 2, 3, 4], [5, 6, 7, 8]] + + List> lists31 = averageList(list, 3); + System.out.println("【集合(3)等分】:" + lists31); // 【集合(3)等分】:[[1, 2, 3], [4, 5, 6], [7, 8]] + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/redBook/mapper/OARedBookMapper.java b/ruoyi-system/src/main/java/com/ruoyi/redBook/mapper/OARedBookMapper.java index 31560ff..8484f7b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/redBook/mapper/OARedBookMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/redBook/mapper/OARedBookMapper.java @@ -108,6 +108,14 @@ public interface OARedBookMapper */ List queryRedBPriceByParams(@Param("params") List params); + /** + * 根据选择的调价日期 更新已选择结果数据 + * @param name_0 + * @param uid_0 + * @return + */ + String getFixDatePrice(@Param("name_0") String name_0,@Param("spec") String spec,@Param("voltage") String voltage, @Param("uid_0") String uid_0); + /** * 查询已生成的报价单列表 * @param oaQuot diff --git a/ruoyi-system/src/main/java/com/ruoyi/redBook/service/IRedBookService.java b/ruoyi-system/src/main/java/com/ruoyi/redBook/service/IRedBookService.java index c970ee9..2bc1cf5 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/redBook/service/IRedBookService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/redBook/service/IRedBookService.java @@ -101,6 +101,14 @@ public interface IRedBookService */ List queryRedBPriceByParams(List params); + /** + * 根据选择的调价日期 更新已选择结果数据 + * @param name_0 + * @param uid_0 + * @return + */ + String getFixDatePrice(String name_0,String spec,String voltage,String uid_0); + /** * 查询已生成的报价单列表 * @param oaQuot @@ -128,4 +136,5 @@ public interface IRedBookService */ String rb_price_version(); + List setRedBookPrice(List list); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/redBook/service/impl/AsyncRbTaskService.java b/ruoyi-system/src/main/java/com/ruoyi/redBook/service/impl/AsyncRbTaskService.java new file mode 100644 index 0000000..5b16427 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/redBook/service/impl/AsyncRbTaskService.java @@ -0,0 +1,26 @@ +package com.ruoyi.redBook.service.impl; + +import com.ruoyi.redBook.domain.OAQuotProduct; +import com.ruoyi.redBook.service.IRedBookService; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.AsyncResult; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.concurrent.Future; + +@Service +public class AsyncRbTaskService { + + @Resource + private IRedBookService iRedBookService; + + @Async + public Future> executeAsyncTask(String threadname, List list) { + System.out.println(threadname); + List OAQuotProducts = iRedBookService.setRedBookPrice(list); + return new AsyncResult<>( OAQuotProducts); + } +} + diff --git a/ruoyi-system/src/main/java/com/ruoyi/redBook/service/impl/RedBookServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/redBook/service/impl/RedBookServiceImpl.java index 1e4e984..b4d6c03 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/redBook/service/impl/RedBookServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/redBook/service/impl/RedBookServiceImpl.java @@ -1,6 +1,8 @@ package com.ruoyi.redBook.service.impl; import com.ruoyi.common.annotation.DataScope; +import com.ruoyi.common.annotation.DataSource; +import com.ruoyi.common.enums.DataSourceType; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.uuid.UUID; @@ -186,6 +188,28 @@ public class RedBookServiceImpl implements IRedBookService return oaRedBookMapper.queryRedBPriceByParams(params); } + /** + * 根据选择的调价日期 更新已选择结果数据 + * @param name_0 + * @param uid_0 + * @return + */ + @Override + public String getFixDatePrice(String name_0,String spec,String voltage, String uid_0) { + return oaRedBookMapper.getFixDatePrice(name_0,spec,voltage,uid_0); + } + + @Override + @DataSource(DataSourceType.OAREDBOOK) + public List setRedBookPrice(List list) { + for(OAQuotProduct oAQuotProduct : list){ + String price = oaRedBookMapper.getFixDatePrice(oAQuotProduct.getName_0(),oAQuotProduct.getSpec(),oAQuotProduct.getVoltage(),oAQuotProduct.getUid_0()); + oAQuotProduct.setPrice(price); + } + return list; + } + + /** * 查询已生成的报价单列表 * @param oaQuot @@ -226,4 +250,5 @@ public class RedBookServiceImpl implements IRedBookService public String rb_price_version() { return oaRedBookMapper.rb_price_version(); } + } diff --git a/ruoyi-system/src/main/resources/mapper/redBook/OARedBookMapper.xml b/ruoyi-system/src/main/resources/mapper/redBook/OARedBookMapper.xml index 1230e60..982f02b 100644 --- a/ruoyi-system/src/main/resources/mapper/redBook/OARedBookMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/redBook/OARedBookMapper.xml @@ -165,6 +165,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND a.电压等级 = v.电压等级 + LEFT JOIN sys_user u on u.user_name=a.create_by diff --git a/ruoyi-ui/src/views/quot/quot/index.vue b/ruoyi-ui/src/views/quot/quot/index.vue index 86e63dd..30f48a3 100644 --- a/ruoyi-ui/src/views/quot/quot/index.vue +++ b/ruoyi-ui/src/views/quot/quot/index.vue @@ -121,7 +121,7 @@ > - + @@ -1364,7 +1364,7 @@ import { NumberAdd } from '@/utils/number';// 数值计算 import { changQuotPrintStatus,listQuot, getQuot, getReturnUpdateQuot, delQuot, addQuot, updateQuot, quotFileList, quotFileDelete, commitQuot, commitJsQuot, commitHjQuot, feedbackQuot, madeQuot, rejectQuot } from "@/api/quot/quot"; import { getToken } from "@/utils/auth"; -import { checkPermi } from '@/utils/permission';// 权限判断函数 +import { checkPermi,checkRole } from '@/utils/permission';// 权限判断函数 import { getDicts } from "@/api/system/dict/data"; /** 导入客户选择组件 */ @@ -1630,9 +1630,12 @@ export default { handleReturnUpdate(row) { this.reset(); const quotId = row.quotId || this.ids - getReturnUpdateQuot(quotId).then(response => { - this.setInfo(response); - }); + let self = this; + this.$modal.confirm('是否确认修订所选报价单且更新状态为协助中?').then(function() { + getReturnUpdateQuot(quotId).then(response => { + self.setInfo(response); + }); + }).then(() => {}).catch(() => {}); }, /** 修改按钮操作-详细信息设置 */ @@ -1737,7 +1740,7 @@ export default { /** 报价组权限控制 */ checkPermi, - + checkRole, /** 报价组提交技术协助按钮 */ commitJsForm() { this.form.quotMaterialList = this.quotMaterialList; @@ -1895,9 +1898,17 @@ export default { //获取报价单-反馈附件列表 getQuotFkFileList(){ const param = {relationId:this.form.quotId,fileType:'quotFkFile'} - quotFileList(param).then(response => { - this.quotFkFileList = response.rows; - }); + + //协助中状态不显示反馈附件 + if(this.form.quotApprovalStatus!='1' && checkRole(['SALES_MAN'])){ + quotFileList(param).then(response => { + this.quotFkFileList = response.rows; + }); + }else if(checkRole(['QUOT'])){ + quotFileList(param).then(response => { + this.quotFkFileList = response.rows; + }); + } }, //获取报价单-技术规范附件列表 (包含询价附件) getQuotJsgfFileList(){ diff --git a/ruoyi-ui/src/views/redBook/productSelect.vue b/ruoyi-ui/src/views/redBook/productSelect.vue index 9a0ba51..17ab39e 100644 --- a/ruoyi-ui/src/views/redBook/productSelect.vue +++ b/ruoyi-ui/src/views/redBook/productSelect.vue @@ -9,7 +9,7 @@ 刷新 - 生成报价单 + 生成报价单 保存 @@ -140,7 +140,10 @@ - + +