diff --git a/ABAP_AS_WITH_POOL.jcoDestination b/ABAP_AS_WITH_POOL.jcoDestination index a23a01d..96e911e 100644 --- a/ABAP_AS_WITH_POOL.jcoDestination +++ b/ABAP_AS_WITH_POOL.jcoDestination @@ -1,5 +1,9 @@ #for tests only ! +<<<<<<< HEAD #Fri Jun 14 15:11:13 CST 2024 +======= +#Fri Jun 14 11:47:35 CST 2024 +>>>>>>> 4f24577e27615af0f5c59b77a49deac1fa915200 jco.destination.pool_capacity=10 jco.client.lang=ZH jco.client.ashost=172.19.0.120 @@ -7,5 +11,9 @@ jco.client.saprouter= jco.client.user=RFC jco.client.sysnr=00 jco.destination.peak_limit=10 +<<<<<<< HEAD jco.client.passwd=654321 +======= +jco.client.passwd=fIM!UgIY[[%*5IWWy6w`}PO$6)+{K)R`9,$_P^3ve}26(Qf| +>>>>>>> 4f24577e27615af0f5c59b77a49deac1fa915200 jco.client.client=300 diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 0b4c0be..4edb9ec 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -113,6 +113,13 @@ ${basedir}/src/main/resources/lib/dom4j-1.6.1.jar system + + ngdbc + ngdbc + 1.6.1 + ${basedir}/src/main/resources/lib/ngdbc-0.0.1-SNAPSHOT.jar + system + org.freemarker freemarker diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/customer/CustomerController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/customer/CustomerController.java index 9861aba..f4ab2a1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/customer/CustomerController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/customer/CustomerController.java @@ -22,6 +22,7 @@ import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysNoticeService; import com.ruoyi.web.utils.IdUtils; import com.ruoyi.web.utils.SapFunction.SapRfcUtils; +import com.ruoyi.web.utils.SapHana.SapHanaUtils; import com.ruoyi.web.utils.SendNotice.NoticeUtil; import com.ruoyi.web.utils.qcc.HttpHelper; import com.ruoyi.web.utils.qcc.QiChaChaUtil; @@ -141,7 +142,15 @@ public class CustomerController extends BaseController public AjaxResult getReturnUpdateInfo(@PathVariable("cusId") String cusId) { Customer customer = customerService.selectCustomerByCusId(cusId); - customer.setCusApprovalStatus("1");// 提交状态设置为 审核中 + if("2".equals(customer.getCusApprovalStatus())){ + customer.setCusApprovalStatus("1");// 提交状态设置为 审核中 + }else if("0".equals(customer.getCusApprovalStatus())){ + return error("该客户当前状态为【待提交】状态,无法修改"); + }else if("1".equals(customer.getCusApprovalStatus())){ + return error("该客户当前状态为【审批中】状态,无法修改"); + }else if("3".equals(customer.getCusApprovalStatus())){ + return error("该报价单当前状态为【已驳回】状态,无法修改"); + } return success(customer); } @@ -154,7 +163,9 @@ public class CustomerController extends BaseController public AjaxResult add(@RequestBody Customer customer) { customer.setCusId(UUID.fastUUID().toString()); - customer.setCusCode(IdUtils.createNo("KH_",2)); + //customer.setCusCode(IdUtils.createNo("KH_",0)); + String cusCode = customerService.getCode("KH"); + customer.setCusCode(cusCode); customer.setCreateBy(getUsername()); return toAjax(customerService.insertCustomer(customer)); } @@ -178,13 +189,21 @@ public class CustomerController extends BaseController @Log(title = "客户信息提交", businessType = BusinessType.OTHER) @PostMapping("/commitCustomer") public AjaxResult commitCustomer(@RequestBody Customer customer) { + //校验客户名-税号 SAP是否存在 + Boolean isExist = SapHanaUtils.isExist(customer.getCusName(),customer.getCusVatNo()); + if(isExist){ + return error("已存在该客户,请勿重复提交"); + } + String cus_id = customer.getCusId(); customer.setUpdateBy(getUsername()); customer.setCusApprovalStatus("1");//客户提交 状态设置为 审核中 if(StringUtils.isEmpty(cus_id)){ customer.setCusId(UUID.fastUUID().toString()); - customer.setCusCode(IdUtils.createNo("KH_",2)); + //customer.setCusCode(IdUtils.createNo("KH_",0)); + String cusCode = customerService.getCode("KH"); + customer.setCusCode(cusCode); customer.setCreateBy(getUsername()); customerService.insertCustomer(customer); sendNotice(customer);//发送消息至数据组 @@ -222,12 +241,19 @@ public class CustomerController extends BaseController @PostMapping("/commitSAPCustomer") public AjaxResult commitSAPCustomer(@RequestBody Customer customer) { + //校验客户名-税号 SAP是否存在 + Boolean isExist = SapHanaUtils.isExist(customer.getCusName(),customer.getCusVatNo()); + if(isExist){ + return error("已存在该客户,请勿重复提交"); + } if(StringUtils.isNotEmpty(customer.getCusId())){// 数据组 提交业务员创建的客户数据提交SAP customer.setUpdateBy(getUsername()); customer.setCusApprovalStatus("2");//客户提交 状态设置为 已审核 }else{// 数据组创建的客户数据提交SAP - customer.setCusCode(IdUtils.createNo("KH_",2)); + //customer.setCusCode(IdUtils.createNo("KH_",0)); + String cusCode = customerService.getCode("KH"); + customer.setCusCode(cusCode); customer.setCreateBy(getUsername()); customer.setCusApprovalStatus("2");//客户提交 状态设置为 已审核 } @@ -321,7 +347,7 @@ public class CustomerController extends BaseController @PreAuthorize("@ss.hasPermi('customer:customer:qcclist')") @PostMapping("/checkQccCount") public AjaxResult checkQccCount(){ - String qccCusCount = configService.selectConfigByKey("qcc:cus:count"); + String qccCusCount = configService.selectConfigByKey("qcc.cus.count"); Integer searchCount = redisCache.getCacheObject(getCacheKey(getUsername())); if (searchCount == null){ searchCount = 1; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/priceVerification/QuotHjController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/priceVerification/QuotHjController.java index 2f01a74..5d87a0f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/priceVerification/QuotHjController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/priceVerification/QuotHjController.java @@ -3,11 +3,15 @@ package com.ruoyi.web.controller.priceVerification; import java.util.List; import javax.servlet.http.HttpServletResponse; +import com.ruoyi.common.constant.WebsocketConst; +import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.quot.domain.Quot; import com.ruoyi.quot.service.IQuotService; +import com.ruoyi.system.service.ISysNoticeService; import com.ruoyi.technicalConfirm.domain.QuotJsqr; +import com.ruoyi.web.utils.SendNotice.NoticeUtil; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -43,6 +47,9 @@ public class QuotHjController extends BaseController @Autowired private IQuotService quotService; + @Autowired + private ISysNoticeService noticeService; + /** * 查询报价单-核价单列表 */ @@ -128,9 +135,22 @@ public class QuotHjController extends BaseController quot.setQuotHjApprovalStatus("2");//报价单-核价单 状态设置为 已协助 quotService.updateQuot(quot); + sendNoticeToQuot(quotHj);// 发送给提醒 return success(); } + /** + * 发送信息-核价协助提交报价组 + * @param quotHj + */ + private void sendNoticeToQuot(QuotHj quotHj){ + //推送消息 + LoginUser loginUser = getLoginUser();//当前登陆者 + //获取发送人-报价组 + List userIds = noticeService.getSendEmp(WebsocketConst.MSG_SEND_QUOT_BJZ); + NoticeUtil.sendNoticesBusiness(loginUser,"有报价单已完成核价协助","单号:"+quotHj.getQuotCode(),userIds); + } + /** * 报价单-核价单 驳回 */ 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 2623ca2..7416cd0 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 @@ -1,21 +1,27 @@ package com.ruoyi.web.controller.quot; +import java.util.ArrayList; import java.util.List; -import java.util.concurrent.TimeUnit; +import java.util.Map; import javax.servlet.http.HttpServletResponse; +import com.alibaba.fastjson.JSON; import com.ruoyi.common.constant.WebsocketConst; +import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUploadUtils; import com.ruoyi.common.utils.file.MinioUtil; +import com.ruoyi.common.utils.http.HttpUtils; +import com.ruoyi.common.utils.sign.Base64; import com.ruoyi.common.utils.uuid.UUID; import com.ruoyi.priceVerification.domain.QuotHj; import com.ruoyi.priceVerification.service.IQuotHjService; -import com.ruoyi.quot.domain.QuotFile; -import com.ruoyi.quot.domain.QuotMaterial; +import com.ruoyi.quot.domain.*; +import com.ruoyi.quot.domain.jsw.*; import com.ruoyi.quot.service.IQuotFileService; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysNoticeService; @@ -31,7 +37,6 @@ import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.enums.BusinessType; -import com.ruoyi.quot.domain.Quot; import com.ruoyi.quot.service.IQuotService; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.core.page.TableDataInfo; @@ -94,6 +99,18 @@ public class QuotController extends BaseController util.exportExcel(response, list, "报价数据"); } + /** + * 导出报价明细列表 + */ + @PostMapping("/exportMaterial") + public void exportMaterial(HttpServletResponse response, Quot quot) + { + Quot q = quotService.selectQuotByQuotId(quot.getQuotId()); + List list = q.getQuotMaterialList(); + ExcelUtil util = new ExcelUtil(QuotMaterial.class); + util.exportExcel(response, list, "报价明细数据"); + } + /** * 报价单打印状态修改 */ @@ -126,8 +143,17 @@ public class QuotController extends BaseController public AjaxResult getReturnUpdateInfo(@PathVariable("quotId") String quotId) { Quot quot = quotService.selectQuotByQuotId(quotId); - quot.setQuotApprovalStatus("1");// 提交状态设置为 协助中 - quotService.updateQuot(quot); + if("2".equals(quot.getQuotApprovalStatus())){ + quot.setQuotApprovalStatus("1");// 提交状态设置为 协助中 + quotService.updateQuot(quot); + }else if("0".equals(quot.getQuotApprovalStatus())){ + return error("该报价单当前状态为【待提交】状态,无法修改"); + }else if("1".equals(quot.getQuotApprovalStatus())){ + return error("该报价单当前状态为【协助中】状态,无法修改"); + }else if("3".equals(quot.getQuotApprovalStatus())){ + return error("该报价单当前状态为【已驳回】状态,无法修改"); + } + return success(quot); } @@ -165,10 +191,29 @@ public class QuotController extends BaseController @PostMapping public AjaxResult add(@RequestBody Quot quot) { + // 获取用户角色 --判断是否是核价组角色 + Boolean hjRoleFlag = false; + List roles = SecurityUtils.getLoginUser().getUser().getRoles(); + for(SysRole sysRole:roles){ + String roleKey = sysRole.getRoleKey(); + if("PRICE_VERIFICATION".equals(roleKey) || "QUOT".equals(roleKey)){ + hjRoleFlag = true; + break; + } + } + + quot.setQuotId(UUID.fastUUID().toString()); - quot.setQuotCode(IdUtils.createNo("BJD_",2)); - quot.setCreateBy(getUsername()); - quot.setQuotSalesmanCode(getUsername()); + //quot.setQuotCode(IdUtils.createNo("BJD_",0)); + String quotCode = quotService.getCode("BJD"); + quot.setQuotCode(quotCode); + if(hjRoleFlag){ + quot.setCreateBy(quot.getQuotSalesmanCode()); + }else{ + quot.setCreateBy(getUsername()); + } + + //quot.setQuotSalesmanCode(getUsername()); quot.setUpdateBy(getUsername()); quotService.insertQuot(quot); return success(quot); @@ -182,7 +227,21 @@ public class QuotController extends BaseController @PutMapping public AjaxResult edit(@RequestBody Quot quot) { - quot.setUpdateBy(getUsername()); + // 获取用户角色 --判断是否是核价组角色 + Boolean hjRoleFlag = false; + List roles = SecurityUtils.getLoginUser().getUser().getRoles(); + for(SysRole sysRole:roles){ + String roleKey = sysRole.getRoleKey(); + if("PRICE_VERIFICATION".equals(roleKey) || "QUOT".equals(roleKey)){ + hjRoleFlag = true; + break; + } + } + if(hjRoleFlag){ + quot.setUpdateBy(quot.getQuotSalesmanCode()); + }else{ + quot.setUpdateBy(getUsername()); + } return toAjax(quotService.updateQuot(quot)); } @@ -285,11 +344,23 @@ public class QuotController extends BaseController @PostMapping("/commitQuot") public AjaxResult commitQuot(@RequestBody Quot quot) { - // 每天限制提交200条 - String quotCommitCount = configService.selectConfigByKey("quot:commit:count"); - String count = quotService.selectQuotListCount(); - if(Integer.valueOf(count)>=Integer.valueOf(quotCommitCount)){ - return error("当前报价量已达极限,无法继续提供报价单"); + // 获取用户角色 --判断是否是核价组角色 + Boolean hjRoleFlag = false; + List roles = SecurityUtils.getLoginUser().getUser().getRoles(); + for(SysRole sysRole:roles){ + String roleKey = sysRole.getRoleKey(); + if("PRICE_VERIFICATION".equals(roleKey) || "QUOT".equals(roleKey)){ + hjRoleFlag = true; + break; + } + } + if(!hjRoleFlag){ + // 每天限制提交200条 + String quotCommitCount = configService.selectConfigByKey("quot.commit.count"); + String count = quotService.selectQuotListCount(); + if(Integer.valueOf(count)>=Integer.valueOf(quotCommitCount)){ + return error("当前报价量已达极限,无法继续提供报价单"); + } } String quot_id = quot.getQuotId(); @@ -299,20 +370,37 @@ public class QuotController extends BaseController quot.setQuotInquiryDate(DateUtils.getNowDate());//报价单 询价日期设置为 当前日期 // 校验 是否已有重复报价单(客户+项目名) - Boolean flag = quotService.checkExistQuot(getUsername(),quot.getQuotCustomerBm(),quot.getQuotProject()); + Boolean flag = false; + if(!hjRoleFlag){ + flag = quotService.checkExistQuot(getUsername(),quot.getQuotCustomerBm(),quot.getQuotProject()); + }else{ + flag = quotService.checkExistQuot(quot.getQuotSalesmanCode(),quot.getQuotCustomerBm(),quot.getQuotProject()); + } if(flag){ return error("存在相同客户且项目名称一致的报价单,无法提交"); } if(StringUtils.isEmpty(quot_id)){ quot.setQuotId(UUID.fastUUID().toString()); - quot.setQuotCode(IdUtils.createNo("BJD_",2)); - quot.setCreateBy(getUsername()); - quot.setQuotSalesmanCode(getUsername()); + //quot.setQuotCode(IdUtils.createNo("BJD_",0)); + String quotCode = quotService.getCode("BJD"); + quot.setQuotCode(quotCode); + + if(hjRoleFlag){ + quot.setCreateBy(quot.getQuotSalesmanCode()); + }else{ + quot.setCreateBy(getUsername()); + } + //quot.setQuotSalesmanCode(getUsername()); quotService.insertQuot(quot); sendNoticeToBjz(quot); return success(); }else{ + if(hjRoleFlag){ + quot.setUpdateBy(quot.getQuotSalesmanCode()); + }else{ + quot.setUpdateBy(getUsername()); + } quotService.updateQuot(quot); sendNoticeToBjz(quot); return success(); @@ -352,7 +440,9 @@ public class QuotController extends BaseController QuotJsqr quotJsqr = new QuotJsqr(); String quotJsqrId = UUID.fastUUID().toString(); quotJsqr.setQuotJsqrId(quotJsqrId); - quotJsqr.setQuotJsqrCode(IdUtils.createNo("BJD_JSQR_",2)); + //quotJsqr.setQuotJsqrCode(IdUtils.createNo("BJD_JSQR_",0)); + String quotJsqrCode = quotService.getCode("JSQR"); + quotJsqr.setQuotJsqrCode(quotJsqrCode); //特缆、低压、中压、其他 协助状态设置 if(quotJsxzGroup.indexOf("TL")!=-1){ @@ -417,7 +507,10 @@ public class QuotController extends BaseController QuotHj quotHj = new QuotHj(); String quotHjId = UUID.fastUUID().toString(); quotHj.setQuotHjId(quotHjId); - quotHj.setQuotHjCode(IdUtils.createNo("BJD_HJ_",2)); + //quotHj.setQuotHjCode(IdUtils.createNo("BJD_HJ_",0)); + String quotHjCode = quotService.getCode("HJD"); + quotHj.setQuotHjCode(quotHjCode); + quotHj.setQuotHjPricingType("10");//核价类型 设置为 报价核价 quotHj.setCreateBy(getUsername()); @@ -441,7 +534,120 @@ public class QuotController extends BaseController @PostMapping("/commitJswQuot") public AjaxResult commitJswQuot(@RequestBody Quot quot) { - // TODO 对接金思维接口 + String quotJswApprovalStatus = quot.getQuotJswApprovalStatus(); + if("2".equals(quotJswApprovalStatus)){//重新调点 + //==============================账户认证================================== + QuotJswUser quotJswUser = new QuotJswUser("JNBJPT","1q2w3e","S",""); + String quotJswUserJson = JSON.toJSONString(quotJswUser); + Map res = HttpUtils.sendPostJson("http://price.jncable.com.cn:7778/GTHINKING/AjaxService/N_MISPRO/100208057.ashx/Login",quotJswUserJson,""); + String cookie = res.get("cookie"); + System.out.println("cookie======"+cookie); + String QuotJswUserResultJson = res.get("res"); + QuotJswUserResult quotJswUserResult = JSON.parseObject(QuotJswUserResultJson, QuotJswUserResult.class); + if(!quotJswUserResult.getSuccess()){ + return error(quotJswUserResult.getErrorMessage()); + } + + String quotJswCode = quot.getQuotJswCode(); + String returnTdJson = "{\"bjdid\":\""+quotJswCode+"\"}"; + Map res2 = HttpUtils.sendPostJson("http://price.jncable.com.cn:7778/GTHINKING/AjaxService/U20231485_N_XLXSBJ/100860101.ashx/DispatchBJD",returnTdJson,cookie); + String returnTdResultJson = res2.get("res"); + QuotJswUserResult quotJswUserResult2 = JSON.parseObject(returnTdResultJson, QuotJswUserResult.class); + if(!quotJswUserResult2.getSuccess()){ + return error(quotJswUserResult2.getMessage()); + } + }else{ + // ==============================对接金思维接口============================== + //==============================账户认证================================== + QuotJswUser quotJswUser = new QuotJswUser("JNBJPT","1q2w3e","S",""); + String quotJswUserJson = JSON.toJSONString(quotJswUser); + Map res = HttpUtils.sendPostJson("http://price.jncable.com.cn:7778/GTHINKING/AjaxService/N_MISPRO/100208057.ashx/Login",quotJswUserJson,""); + String cookie = res.get("cookie"); + System.out.println("cookie======"+cookie); + String QuotJswUserResultJson = res.get("res"); + QuotJswUserResult quotJswUserResult = JSON.parseObject(QuotJswUserResultJson, QuotJswUserResult.class); + if(!quotJswUserResult.getSuccess()){ + return error(quotJswUserResult.getErrorMessage()); + } + + //==============================报价单信息对接================================== + QuotJswInfo quotJswInfo = new QuotJswInfo(); + quotJswInfo.setQuotCode(quot.getQuotCode()); + quotJswInfo.setXsy(quot.getQuotSalesmanName()); + quotJswInfo.setXsyid(quot.getQuotSalesmanCode()); + quotJswInfo.setKh(quot.getQuotCustomerName()); + quotJswInfo.setKhid(quot.getQuotCustomerBm()); + quotJswInfo.setBz(quot.getQuotQuotationRequire()); + + List quotJswMaterials = new ArrayList<>(); + QuotJswMaterial quotJswMaterial = null; + for(QuotMaterial m:quot.getQuotMaterialList()){ + quotJswMaterial = new QuotJswMaterial(); + quotJswMaterial.setMatXingh(m.getMatXingh()); + quotJswMaterial.setMatGuig(m.getMatGuig()); + quotJswMaterial.setMatDiany(m.getMatDiany()); + quotJswMaterial.setMatStandard(m.getMatStandard()); + quotJswMaterial.setMatSl(m.getMatSl()); + quotJswMaterial.setMatDanw(m.getMatDanw()); + quotJswMaterial.setMatRemark(m.getMatRemark()); + quotJswMaterials.add(quotJswMaterial); + } + quotJswInfo.setQuotMaterial(quotJswMaterials); + + QuotJsw quotJsw = new QuotJsw(); + quotJsw.setRecBJDInfo(quotJswInfo); + + String quotJson = JSON.toJSONString(quotJsw); + //调用金思维接口上传报价单信息 + Map res2 = HttpUtils.sendPostJson("http://price.jncable.com.cn:7778/GTHINKING/AjaxService/U20231485_N_XLXSBJ/100860101.ashx/RecBJDfromJN",quotJson,cookie); + String QuotJswResultJson = res2.get("res"); + QuotJswResult quotJswResultObject = JSON.parseObject(QuotJswResultJson, QuotJswResult.class); + if(!quotJswResultObject.getSuccess()){ + return error(quotJswResultObject.getErrorMessage()); + } + + //==============================附件对接================================== + List files = new ArrayList<>(); + + QuotFile quotFile = new QuotFile(); + quotFile.setRelationId(quot.getQuotId());// 报价单ID + quotFile.setFileType("quotXjFile");// 附件类型-询价清单附件 + List quotXjFiles = quotFileService.selectQuotFileList(quotFile); + if(quotXjFiles!=null&"XjFiles.size()>0){ + files.addAll(quotXjFiles); + } + + quotFile = new QuotFile(); + quotFile.setRelationId(quot.getQuotId());// 报价单ID + quotFile.setFileType("quotJsgfFile");// 附件类型-技术附件 + List quotJsgfFiles = quotFileService.selectQuotFileList(quotFile); + if(quotJsgfFiles!=null&"JsgfFiles.size()>0){ + files.addAll(quotJsgfFiles); + } + + QuotJswFiles quotJswFiles = null; + QuotJswFile quotJswFile = new QuotJswFile(); + quotJswFile.setBjdid(quotJswResultObject.getKey()); + List quotJswFileList = new ArrayList(); + for(QuotFile qf:files){ + quotJswFiles = new QuotJswFiles(); + quotJswFiles.setFileName(qf.getFileName()); + quotJswFiles.setFileData(Base64.fileBase64(qf.getFileUrl())); + quotJswFileList.add(quotJswFiles); + } + quotJswFile.setFjdata(quotJswFileList); + String fileJson = JSON.toJSONString(quotJswFile); + //调用金思维接口上传附件 + if(files!=null&&files.size()>0){ + Map res3 = HttpUtils.sendPostJson("http://price.jncable.com.cn:7778/GTHINKING/AjaxService/U20231485_N_XLXSBJ/100860101.ashx/UploadFile",fileJson,cookie); + String QuotJswResultFileJson = res3.get("res"); + QuotJswResult quotJswResult = JSON.parseObject(QuotJswResultFileJson, QuotJswResult.class); + if(!quotJswResult.getSuccess()){ + return error(quotJswResult.getErrorMessage()); + } + } + } + quot.setQuotJswApprovalStatus("1");// 更新金思维提交状态为 协助中 quotService.updateQuot(quot); return success(); @@ -455,8 +661,35 @@ public class QuotController extends BaseController @PostMapping("/commitOAQuot") public AjaxResult commitOAQuot(@RequestBody Quot quot) { + // 报价单提交OA,插入中间表 sys_oa_quot sys_oa_quot_material + SysOaQuot sysOaQuot = new SysOaQuot(); + SysOaQuot oauser = quotService.selectOAUserByUserName(getUsername());// 查询OA用户 + if(oauser==null){ + return error("该账户:"+getUsername()+"在OA中不存在"); + } + + sysOaQuot.setUserId(oauser.getUserId()); + sysOaQuot.setDepartmentId(oauser.getUserId()); + sysOaQuot.setDepartmentId(oauser.getDepartmentId()); + sysOaQuot.setSubmissionTime(DateUtils.getDate()); + sysOaQuot.setQuotId(UUID.fastUUID().toString()); + sysOaQuot.setQuotCode(quot.getQuotCode()); + sysOaQuot.setQuotSalesmanName(quot.getQuotSalesmanName()); + sysOaQuot.setQuotCustomerName(quot.getQuotCustomerName()); + sysOaQuot.setQuotAddress(quot.getQuotAddress()); + sysOaQuot.setQuotPhone(quot.getQuotPhone()); + sysOaQuot.setQuotInquiryDate(quot.getQuotInquiryDate()); + sysOaQuot.setQuotProject(quot.getQuotProject()); + sysOaQuot.setQuotQuotationRequire(quot.getQuotQuotationRequire()); + sysOaQuot.setQuotLvPrice(quot.getQuotLvPrice()); + sysOaQuot.setQuotTongPrice(quot.getQuotTongPrice()); + sysOaQuot.setQuotMatpriceDiff(quot.getQuotMatpriceDiff()); + sysOaQuot.setCreateTime(DateUtils.getNowDate()); + sysOaQuot.setIsFinish("0");// 报价已提交OA审批中 + sysOaQuot.setMaterials(quot.getQuotMaterialList()); + + quotService.insertSysOAQuot(sysOaQuot); - // TODO 对接OA quot.setQuotOAApprovalStatus("1");// 更新OA提交状态为 审批中 quotService.updateQuot(quot); return success(); @@ -543,6 +776,9 @@ public class QuotController extends BaseController return error("报价信息-反馈说明不能为空"); } quot.setQuotApprovalStatus("3"); + quot.setQuotQuotationDate(DateUtils.getNowDate());//报价单-报价日期设置为 当前日期 + quot.setQuotCheckUserName(getUsername()); + quotService.updateQuot(quot); return success(); } 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 3c36f5b..aca60b3 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 @@ -1,5 +1,6 @@ package com.ruoyi.web.controller.redBook; +import com.alibaba.fastjson.JSONArray; import com.ruoyi.common.annotation.DataSource; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.constant.CacheConstants; @@ -14,6 +15,7 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.uuid.UUID; import com.ruoyi.customer.domain.Customer; +import com.ruoyi.quot.domain.Quot; import com.ruoyi.quot.domain.QuotMaterial; import com.ruoyi.redBook.domain.*; import com.ruoyi.redBook.service.IRedBookService; @@ -205,8 +207,9 @@ public class RedBookController extends BaseController List list = new ArrayList<>(); String name_0 = product.getName_0();//型号 String model = product.getModel();//规格 - if(!StringUtils.isEmpty(name_0) || !StringUtils.isEmpty(model) ){ - if(!StringUtils.isEmpty(name_0)){ + if(!StringUtils.isBlank(name_0) || !StringUtils.isBlank(model) ){ + if(!StringUtils.isBlank(name_0)){ + name_0 = name_0.replace(" ",""); name_0 = name_0.toUpperCase(); } list = redBookService.handleSearchData(name_0,model); @@ -226,7 +229,9 @@ public class RedBookController extends BaseController { if(StringUtils.isEmpty(quot.getQuot_id())){ quot.setQuot_id(UUID.fastUUID().toString()); - quot.setQuotCode(IdUtils.createNo("BJD_",2)); + //quot.setQuotCode(IdUtils.createNo("BJD_",0)); + String quotCode = redBookService.getCode("RB_BJD"); + quot.setQuotCode(quotCode); quot.setCreateBy(getUsername()); redBookService.insertOAQuot(quot); }else{ @@ -303,6 +308,26 @@ public class RedBookController extends BaseController for(OAQuotProductTemplate temp:tempList){ temp.setIndex(index); temp.setRbUid(rbUid); + + String name_1 = temp.getName_1(); + if(StringUtils.isNotBlank(name_1)){ + name_1 = name_1.replace(" ",""); + name_1 = name_1.toUpperCase(); + temp.setName_1(name_1); + } + + String spec = temp.getSpec(); + if(StringUtils.isNotBlank(spec)){ + spec = spec.replace(" ",""); + temp.setSpec(spec); + } + + String voltage = temp.getVoltage(); + if(StringUtils.isNotBlank(voltage)){ + voltage = voltage.replace(" ",""); + voltage = voltage.toUpperCase(); + } + temp.setVoltage(StringUtils.isBlank(voltage)?"0.6/1KV":voltage); index++; } @@ -454,4 +479,13 @@ public class RedBookController extends BaseController } return toAjax(redBookService.deleteQuotsByQuotId(quotId)); } + + + @PostMapping("/exportProduct") + public void exportMaterial(HttpServletResponse response, @RequestParam("selectedResultData") String selectedResultData) + { + List list = JSONArray.parseArray(selectedResultData, OAQuotProduct.class); + ExcelUtil util = new ExcelUtil(OAQuotProduct.class); + util.exportExcel(response, list, "报价明细数据"); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/technicalConfirm/QuotJsqrController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/technicalConfirm/QuotJsqrController.java index 6cdb6fa..cc7da7f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/technicalConfirm/QuotJsqrController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/technicalConfirm/QuotJsqrController.java @@ -2,14 +2,18 @@ package com.ruoyi.web.controller.technicalConfirm; import javax.servlet.http.HttpServletResponse; +import com.ruoyi.common.constant.WebsocketConst; +import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.quot.domain.Quot; import com.ruoyi.quot.service.IQuotService; +import com.ruoyi.system.service.ISysNoticeService; import com.ruoyi.technicalConfirm.domain.QuotJsqr; import com.ruoyi.technicalConfirm.domain.QuotJsqrXzDetail; import com.ruoyi.technicalConfirm.service.IQuotJsqrService; +import com.ruoyi.web.utils.SendNotice.NoticeUtil; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -44,6 +48,9 @@ public class QuotJsqrController extends BaseController @Autowired private IQuotService quotService; + @Autowired + private ISysNoticeService noticeService; + /** * 查询报价单-技术确认单列表 */ @@ -387,7 +394,21 @@ public class QuotJsqrController extends BaseController return error("其他(防火、轨道、架空)协助还未完成"); } quot.setQuotJsxzApprovalStatus("2");//报价单-技术协助状态 设置为 已协助 + + sendNoticeToQuot(quotJsqr);// 发送给提醒 } return success(quotService.updateQuot(quot)); } + + /** + * 发送信息-技术协助提交报价组 + * @param quotJsqr + */ + private void sendNoticeToQuot(QuotJsqr quotJsqr){ + //推送消息 + LoginUser loginUser = getLoginUser();//当前登陆者 + //获取发送人-报价组 + List userIds = noticeService.getSendEmp(WebsocketConst.MSG_SEND_QUOT_BJZ); + NoticeUtil.sendNoticesBusiness(loginUser,"有报价单已完成技术协助","单号:"+quotJsqr.getQuotCode(),userIds); + } } 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 aa85df1..8d93a20 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,5 +1,6 @@ package com.ruoyi.web.controller.tool.quot; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson2.JSON; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; @@ -15,10 +16,7 @@ import com.ruoyi.system.service.ISysOperLogService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -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; +import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; @@ -40,7 +38,7 @@ public class quotJswController extends BaseController { { // 接口调用记录 SysOperLog sysOperLog = new SysOperLog(); - sysOperLog.setTitle("金思维返回报价数据"); + sysOperLog.setTitle("金思维回传报价数据"); sysOperLog.setOperParam(quotJson); sysOperLog.setRequestMethod("POST"); sysOperLog.setOperTime(DateUtils.getNowDate()); @@ -49,64 +47,121 @@ public class quotJswController extends BaseController { try{ quotModel quot = JSON.parseObject(quotJson, quotModel.class); if(quot==null){ + String errMsg = "参数异常为空,同步失败"; sysOperLog.setStatus(1); long endTime = System.currentTimeMillis(); sysOperLog.setCostTime(endTime - startTime); + sysOperLog.setErrorMsg(errMsg); + sysOperLog.setJsonResult(JSONArray.toJSONString(R.fail(errMsg))); iSysOperLogService.insertOperlog(sysOperLog); - return R.fail("参数异常为空"); + return R.fail(errMsg); } if(StringUtils.isBlank(quot.getQuotJswCode())){ + String errMsg = "金思维报价单号为空,同步失败"; sysOperLog.setStatus(1); long endTime = System.currentTimeMillis(); sysOperLog.setCostTime(endTime - startTime); + sysOperLog.setErrorMsg(errMsg); + sysOperLog.setJsonResult(JSONArray.toJSONString(R.fail(errMsg))); iSysOperLogService.insertOperlog(sysOperLog); - return R.fail("金思维报价单号不能为空"); + return R.fail(errMsg); } if(StringUtils.isBlank(quot.getQuotCode())){ + String errMsg = "客户报价单号为空,同步失败"; sysOperLog.setStatus(1); long endTime = System.currentTimeMillis(); sysOperLog.setCostTime(endTime - startTime); + sysOperLog.setErrorMsg(errMsg); + sysOperLog.setJsonResult(JSONArray.toJSONString(R.fail(errMsg))); iSysOperLogService.insertOperlog(sysOperLog); - return R.fail("客户报价单号不能为空"); + return R.fail(errMsg); } if(StringUtils.isBlank(quot.getQuotTongPrice())){ + String errMsg = "铜价为空,同步失败"; sysOperLog.setStatus(1); long endTime = System.currentTimeMillis(); sysOperLog.setCostTime(endTime - startTime); + sysOperLog.setErrorMsg(errMsg); + sysOperLog.setJsonResult(JSONArray.toJSONString(R.fail(errMsg))); iSysOperLogService.insertOperlog(sysOperLog); - return R.fail("铜价不能为空"); + return R.fail(errMsg); } if(StringUtils.isBlank(quot.getQuotLvPrice())){ + String errMsg = "铝价为空,同步失败"; sysOperLog.setStatus(1); long endTime = System.currentTimeMillis(); sysOperLog.setCostTime(endTime - startTime); + sysOperLog.setErrorMsg(errMsg); + sysOperLog.setJsonResult(JSONArray.toJSONString(R.fail(errMsg))); iSysOperLogService.insertOperlog(sysOperLog); - return R.fail("铝价不能为空"); + return R.fail(errMsg); } if(StringUtils.isBlank(quot.getQuotMatpriceDiff())){ + String errMsg = "整单料价价差率为空,同步失败"; sysOperLog.setStatus(1); long endTime = System.currentTimeMillis(); sysOperLog.setCostTime(endTime - startTime); + sysOperLog.setErrorMsg(errMsg); + sysOperLog.setJsonResult(JSONArray.toJSONString(R.fail(errMsg))); iSysOperLogService.insertOperlog(sysOperLog); - return R.fail("整单料价价差率不能为空"); + return R.fail(errMsg); } List materials = quot.getQuotMaterial(); if(materials==null || materials.size()==0){ + String errMsg = "无明细数据,同步失败"; sysOperLog.setStatus(1); long endTime = System.currentTimeMillis(); sysOperLog.setCostTime(endTime - startTime); + sysOperLog.setErrorMsg(errMsg); + sysOperLog.setJsonResult(JSONArray.toJSONString(R.fail(errMsg))); iSysOperLogService.insertOperlog(sysOperLog); - return R.fail("明细不能为空"); + return R.fail(errMsg); } // 更新报价单 String quotId = quotService.selectQuotByQuotCode(quot.getQuotCode()); + if(StringUtils.isEmpty(quotId)){ + String errMsg = "报价单号:"+quot.getQuotCode()+" 系统中不存在,同步失败"; + sysOperLog.setStatus(1); + long endTime = System.currentTimeMillis(); + sysOperLog.setCostTime(endTime - startTime); + sysOperLog.setErrorMsg(errMsg); + sysOperLog.setJsonResult(JSONArray.toJSONString(R.fail(errMsg))); + iSysOperLogService.insertOperlog(sysOperLog); + return R.fail(errMsg); + } + Quot q = quotService.selectQuotByQuotId(quotId); + String quotApprovalStatus = q.getQuotApprovalStatus(); + if(!"1".equals(quotApprovalStatus)){ + String errMsg = "报价单号:"+quot.getQuotCode()+" 非协助中状态,同步失败"; + sysOperLog.setStatus(1); + long endTime = System.currentTimeMillis(); + sysOperLog.setCostTime(endTime - startTime); + sysOperLog.setErrorMsg(errMsg); + sysOperLog.setJsonResult(JSONArray.toJSONString(R.fail(errMsg))); + iSysOperLogService.insertOperlog(sysOperLog); + return R.fail(errMsg); + } + + String quotJswApprovalStatus = q.getQuotJswApprovalStatus(); + if(!"1".equals(quotJswApprovalStatus)){ + String errMsg = "报价单号:"+quot.getQuotCode()+" 金思维非协助中状态,同步失败"; + sysOperLog.setStatus(1); + long endTime = System.currentTimeMillis(); + sysOperLog.setCostTime(endTime - startTime); + sysOperLog.setErrorMsg(errMsg); + sysOperLog.setJsonResult(JSONArray.toJSONString(R.fail(errMsg))); + iSysOperLogService.insertOperlog(sysOperLog); + return R.fail(errMsg); + } + q.setQuotJswCode(quot.getQuotJswCode()); q.setQuotLvPrice(quot.getQuotLvPrice()); q.setQuotTongPrice(quot.getQuotTongPrice()); q.setQuotMatpriceDiff(quot.getQuotMatpriceDiff()); + q.setQuotJswApprovalStatus("2"); List qmaterials = new ArrayList(); QuotMaterial quotMaterial = new QuotMaterial(); @@ -133,16 +188,91 @@ public class quotJswController extends BaseController { q.setQuotMaterialList(qmaterials); quotService.updateQuot(q); }catch(Exception e){ + String errMsg = "同步报价数据接口异常,同步失败"; sysOperLog.setStatus(1); long endTime = System.currentTimeMillis(); sysOperLog.setCostTime(endTime - startTime); + sysOperLog.setErrorMsg(errMsg); + sysOperLog.setJsonResult(JSONArray.toJSONString(R.fail(errMsg))); iSysOperLogService.insertOperlog(sysOperLog); - return R.fail(e.getMessage()); + return R.fail(errMsg); } sysOperLog.setStatus(0); long endTime = System.currentTimeMillis(); sysOperLog.setCostTime(endTime - startTime); + sysOperLog.setJsonResult(R.ok().toString()); + iSysOperLogService.insertOperlog(sysOperLog); + return R.ok(); + } + + + @ApiOperation("更新金思维协助状态") + @PostMapping("/updateQuotJsw") + public R updateQuotJsw(@RequestParam String quotCode) { + // 接口调用记录 + SysOperLog sysOperLog = new SysOperLog(); + sysOperLog.setTitle("更新金思维协助状态"); + sysOperLog.setOperParam(quotCode); + sysOperLog.setRequestMethod("POST"); + sysOperLog.setOperTime(DateUtils.getNowDate()); + long startTime = System.currentTimeMillis(); + + try { + if(StringUtils.isBlank(quotCode)){ + String errMsg = "报价单号为空,更新失败"; + sysOperLog.setStatus(1); + long endTime = System.currentTimeMillis(); + sysOperLog.setCostTime(endTime - startTime); + sysOperLog.setErrorMsg(errMsg); + sysOperLog.setJsonResult(JSONArray.toJSONString(R.fail(errMsg))); + iSysOperLogService.insertOperlog(sysOperLog); + return R.fail(errMsg); + } + + String quotId = quotService.selectQuotByQuotCode(quotCode); + if(StringUtils.isEmpty(quotId)){ + String errMsg = "报价单号:"+quotCode+" 系统中不存在,同步失败"; + sysOperLog.setStatus(1); + long endTime = System.currentTimeMillis(); + sysOperLog.setCostTime(endTime - startTime); + sysOperLog.setErrorMsg(errMsg); + sysOperLog.setJsonResult(JSONArray.toJSONString(R.fail(errMsg))); + iSysOperLogService.insertOperlog(sysOperLog); + return R.fail(errMsg); + } + + Quot q = quotService.selectQuotByQuotId(quotId); + String quotApprovalStatus = q.getQuotApprovalStatus(); + if(!"1".equals(quotApprovalStatus)){ + String errMsg = "报价单号:"+q.getQuotCode()+" 非协助中状态,同步失败"; + sysOperLog.setStatus(1); + long endTime = System.currentTimeMillis(); + sysOperLog.setCostTime(endTime - startTime); + sysOperLog.setErrorMsg(errMsg); + sysOperLog.setJsonResult(JSONArray.toJSONString(R.fail(errMsg))); + iSysOperLogService.insertOperlog(sysOperLog); + return R.fail(errMsg); + } + + q.setQuotJswApprovalStatus("1"); + quotService.updateQuot(q); + + }catch(Exception e){ + String errMsg = "更新金思维协助状态接口异常,同步失败"; + sysOperLog.setStatus(1); + long endTime = System.currentTimeMillis(); + sysOperLog.setCostTime(endTime - startTime); + sysOperLog.setErrorMsg(errMsg); + sysOperLog.setJsonResult(JSONArray.toJSONString(R.fail(errMsg))); + iSysOperLogService.insertOperlog(sysOperLog); + return R.fail(errMsg); + } + + sysOperLog.setStatus(0); + long endTime = System.currentTimeMillis(); + sysOperLog.setCostTime(endTime - startTime); + sysOperLog.setJsonResult(R.ok().toString()); iSysOperLogService.insertOperlog(sysOperLog); return R.ok(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/utils/SapHana/HanaDB.java b/ruoyi-admin/src/main/java/com/ruoyi/web/utils/SapHana/HanaDB.java new file mode 100644 index 0000000..bb8dc44 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/utils/SapHana/HanaDB.java @@ -0,0 +1,157 @@ +package com.ruoyi.web.utils.SapHana; + +import java.sql.*; + +/* +* Sap Hana数据库读取配置 +* */ +public class HanaDB { + + static { + try { + Class.forName("com.sap.db.jdbc.Driver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + + public static Connection getConn() { + Connection conn = null; + try { + conn = DriverManager.getConnection( + "jdbc:sap://172.19.1.10:30013?databaseName=EHP&reconnect=true&useServerPrepStmts=false&rewriteBatchedStatements=true", + "ABAP01", "JNdl@2022"); + } catch (SQLException e) { + e.printStackTrace(); + } + return conn; + } + + public static Statement getStmt(Connection conn) { + Statement stmt = null; + + try { + stmt = conn.createStatement(); + } catch (SQLException e) { + e.printStackTrace(); + } + return stmt; + } + + public static ResultSet executeQuery(Statement stmt, String sql) { + ResultSet rs = null; + + try { + rs = stmt.executeQuery(sql); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + } + + public static ResultSet executeQuery(Connection conn, String sql) { + ResultSet rs = null; + + try { + rs = conn.createStatement().executeQuery(sql); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + } + + public static int executeUpdate(Connection conn, String sql) { + int ret = 0; + Statement stmt = null; + + try { + stmt = conn.createStatement(); + ret = stmt.executeUpdate(sql); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + close(stmt); + } + return ret; + } + + public static ResultSet executeQuery(PreparedStatement pstmt) { + ResultSet rs = null; + + try { + rs = pstmt.executeQuery(); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + } + + public static PreparedStatement getPstmt(Connection conn, String sql) { + PreparedStatement pstmt = null; + + try { + pstmt = conn.prepareStatement(sql); + } catch (SQLException e) { + e.printStackTrace(); + } + + return pstmt; + } + + public static PreparedStatement getPstmt(Connection conn, String sql, boolean autoGeneratedKeys) { + PreparedStatement pstmt = null; + + try { + pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); + } catch (SQLException e) { + e.printStackTrace(); + } + + return pstmt; + } + + public static CallableStatement getCallstmt(Connection conn, String sql) { + CallableStatement cstmt = null; + + try { + cstmt = conn.prepareCall(sql); + } catch (SQLException e) { + e.printStackTrace(); + } + return cstmt; + } + + public static void close(Connection conn) { + if (conn != null) { + try { + conn.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + conn = null; + } + } + + public static void close(Statement stmt) { + if (stmt != null) { + try { + stmt.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + stmt = null; + } + } + + public static void close(ResultSet rs) { + if (rs != null) { + try { + rs.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + rs = null; + } + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/utils/SapHana/SapHanaUtils.java b/ruoyi-admin/src/main/java/com/ruoyi/web/utils/SapHana/SapHanaUtils.java new file mode 100644 index 0000000..68b7f4c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/utils/SapHana/SapHanaUtils.java @@ -0,0 +1,43 @@ +package com.ruoyi.web.utils.SapHana; + +import java.sql.Connection; +import java.sql.ResultSet; + +/** + * SAP 直连hana数据库 工具类 + */ +public class SapHanaUtils { + + /** + * 查询SAP是否存在相同名称和税号的客户 + * @param cusName + * @param cusVatNo + * @return + */ + public static Boolean isExist(String cusName, String cusVatNo) { + Boolean flag = false; + Connection conn = null; + ResultSet rs = null; + try { + conn = HanaDB.getConn(); + StringBuffer sf = new StringBuffer(); + + sf.append(" select name1,BAHNS from SAPHANADB.KNA1 "); + sf.append(" where name1 = '" + cusName + "'" ); + sf.append(" and BAHNS = '" + cusVatNo + "'" ); + + rs = HanaDB.executeQuery(conn, String.valueOf(sf)); + if (rs.next()) { + do { + flag = true; + } while (rs.next()); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + HanaDB.close(rs); + HanaDB.close(conn); + } + return flag; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/utils/rbExcel/excelUtil.java b/ruoyi-admin/src/main/java/com/ruoyi/web/utils/rbExcel/excelUtil.java index c978c14..9d22618 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/utils/rbExcel/excelUtil.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/utils/rbExcel/excelUtil.java @@ -265,29 +265,30 @@ public class excelUtil { wf_merge = new WritableFont(WritableFont.ARIAL,11,WritableFont.NO_BOLD,false); wff_merge = new WritableCellFormat(wf_merge); wff_merge.setAlignment(Alignment.LEFT); - wff_merge.setBorder(Border.BOTTOM, BorderLineStyle.THIN); wff_merge.setBorder(Border.RIGHT, BorderLineStyle.THIN); label = new Label(1, i, "3、分支电缆为多芯分支价格,不包其它附件,不含安装费,数量以供方实际测量为准;",wff_merge); wsheet.addCell(label); - /*i++; - wsheet.setRowView(i,390); - wf_merge = new WritableFont(WritableFont.ARIAL,11,WritableFont.NO_BOLD,false); - wff_merge = new WritableCellFormat(wf_merge); - wff_merge.setAlignment(jxl.format.Alignment.LEFT); - wff_merge.setBorder(jxl.format.Border.BOTTOM,jxl.format.BorderLineStyle.THIN); - wff_merge.setBorder(jxl.format.Border.RIGHT,jxl.format.BorderLineStyle.THIN); - wsheet.mergeCells(1,i,7,i); -// label = new Label(1, i, "4、产品交货总数和单根交货长度允许有±1%公差,如有不符对方要求,需重制作报价单。",wff_merge); - wsheet.addCell(label);*/ - wsheet.mergeCells(0,i-3,0,i); + i++; + wsheet.setRowView(i,390); + wsheet.mergeCells(1,i,7,i); + + wf_merge = new WritableFont(WritableFont.ARIAL,11,WritableFont.NO_BOLD,false); + wff_merge = new WritableCellFormat(wf_merge); + wff_merge.setAlignment(Alignment.LEFT); + wff_merge.setBorder(Border.BOTTOM, BorderLineStyle.THIN); + wff_merge.setBorder(Border.RIGHT, BorderLineStyle.THIN); + label = new Label(1, i, "4、低厂价,预付30%,款清发货;",wff_merge); + wsheet.addCell(label); + + wsheet.mergeCells(0,i-4,0,i); wf_merge = new WritableFont(WritableFont.ARIAL,11,WritableFont.NO_BOLD,false); wff_merge = new WritableCellFormat(wf_merge); wff_merge.setAlignment(Alignment.CENTRE); wff_merge.setVerticalAlignment(VerticalAlignment.CENTRE); wff_merge.setBorder(Border.ALL, BorderLineStyle.THIN); - label = new Label(0, i-3, "备注",wff_merge); + label = new Label(0, i-4, "备注",wff_merge); wsheet.addCell(label); InputStream fileInputStream = new ClassPathResource("/jnlogo.png").getInputStream(); @@ -358,8 +359,8 @@ public class excelUtil { response.setContentType("application/vnd.ms-excel"); BigDecimal totalmoney = BigDecimal.ZERO; - File jnlogo_file = new File("logon/"+IdUtils.createNo("jnlogo_",3)+".png"); - File wc_file = new File("logon/"+IdUtils.createNo("wc_",3)+".png"); + File jnlogo_file = new File("logon/"+quot.getQuotCode()+".png"); + File wc_file = new File("logon/"+quot.getQuotCode()+".png"); try { OutputStream os = response.getOutputStream(); WritableWorkbook wwb = Workbook.createWorkbook(os); @@ -580,29 +581,30 @@ public class excelUtil { wf_merge = new WritableFont(WritableFont.ARIAL,11,WritableFont.NO_BOLD,false); wff_merge = new WritableCellFormat(wf_merge); wff_merge.setAlignment(Alignment.LEFT); - wff_merge.setBorder(Border.BOTTOM, BorderLineStyle.THIN); wff_merge.setBorder(Border.RIGHT, BorderLineStyle.THIN); label = new Label(1, i, "3、分支电缆为多芯分支价格,不包其它附件,不含安装费,数量以供方实际测量为准;",wff_merge); wsheet.addCell(label); - /*i++; - wsheet.setRowView(i,390); - wf_merge = new WritableFont(WritableFont.ARIAL,11,WritableFont.NO_BOLD,false); - wff_merge = new WritableCellFormat(wf_merge); - wff_merge.setAlignment(jxl.format.Alignment.LEFT); - wff_merge.setBorder(jxl.format.Border.BOTTOM,jxl.format.BorderLineStyle.THIN); - wff_merge.setBorder(jxl.format.Border.RIGHT,jxl.format.BorderLineStyle.THIN); - wsheet.mergeCells(1,i,7,i); -// label = new Label(1, i, "4、产品交货总数和单根交货长度允许有±1%公差,如有不符对方要求,需重制作报价单。",wff_merge); - wsheet.addCell(label);*/ - wsheet.mergeCells(0,i-3,0,i); + i++; + wsheet.setRowView(i,390); + wsheet.mergeCells(1,i,7,i); + + wf_merge = new WritableFont(WritableFont.ARIAL,11,WritableFont.NO_BOLD,false); + wff_merge = new WritableCellFormat(wf_merge); + wff_merge.setAlignment(Alignment.LEFT); + wff_merge.setBorder(Border.BOTTOM, BorderLineStyle.THIN); + wff_merge.setBorder(Border.RIGHT, BorderLineStyle.THIN); + label = new Label(1, i, "4、低厂价,预付30%,款清发货;",wff_merge); + wsheet.addCell(label); + + wsheet.mergeCells(0,i-4,0,i); wf_merge = new WritableFont(WritableFont.ARIAL,11,WritableFont.NO_BOLD,false); wff_merge = new WritableCellFormat(wf_merge); wff_merge.setAlignment(Alignment.CENTRE); wff_merge.setVerticalAlignment(VerticalAlignment.CENTRE); wff_merge.setBorder(Border.ALL, BorderLineStyle.THIN); - label = new Label(0, i-3, "备注",wff_merge); + label = new Label(0, i-4, "备注",wff_merge); wsheet.addCell(label); InputStream fileInputStream = new ClassPathResource("/jnlogo.png").getInputStream(); diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml index 6e4964b..91d30d0 100644 --- a/ruoyi-admin/src/main/resources/application-druid.yml +++ b/ruoyi-admin/src/main/resources/application-druid.yml @@ -61,6 +61,15 @@ spring: url: jdbc:sqlserver://192.168.9.2:1433;DatabaseName=jn_web username: sa password: it12345 + # OA数据库数据源 + oa: + # 从数据源开关/默认关闭 + enabled: true + driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver + # 正式数据库 + url: jdbc:sqlserver://192.168.9.182:1433;DatabaseName=ecology + username: sa + password: Itcenter110- # 初始连接数 initialSize: 10 # 最小连接池数量 @@ -116,3 +125,7 @@ spring: remove-abandoned-timeout: 20 #关闭abanded连接时输出错误日志 log-abandoned: false + #默认为false。因此,如果想让数据库和网络故障恢复之后,pool能继续请求正常资源必须把此项配置设为false) + break-after-acquire-failure: false + fail-fast: true + time-between-connect-error-millis: 10000 diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index dce93e7..9844aea 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -104,7 +104,7 @@ spring: # token配置 token: # 是否允许账户多终端同时登录(true允许 false不允许) - soloLogin: false + soloLogin: true # 令牌自定义标识 header: Authorization # 令牌密钥 @@ -201,7 +201,7 @@ magic-api: # Minio配置-分布式存储 minio: useEnable: true - url: http://192.168.9.134:3336 + url: http://crmfile.jncable.com.cn:3336 accessKey: minio-admin secretKey: minio-jndlitzx bucketName: system diff --git a/ruoyi-admin/src/main/resources/lib/ngdbc-0.0.1-SNAPSHOT.jar b/ruoyi-admin/src/main/resources/lib/ngdbc-0.0.1-SNAPSHOT.jar new file mode 100644 index 0000000..c13281a Binary files /dev/null and b/ruoyi-admin/src/main/resources/lib/ngdbc-0.0.1-SNAPSHOT.jar differ diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index 7cd3268..2800795 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -79,7 +79,7 @@ org.apache.commons commons-lang3 - + com.fasterxml.jackson.core @@ -152,7 +152,12 @@ javax.servlet javax.servlet-api + + org.apache.httpcomponents + httpclient + 4.5.14 + - \ No newline at end of file + diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java index 3ed2044..5bd48d1 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java @@ -43,6 +43,12 @@ public enum DataSourceType * @author JIAL * @updateTime 2024/5/24 15:50 */ - ORDER + ORDER, + + /** + * OA数据库 + */ + OA + } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java index f85c82c..425ff51 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java @@ -5,18 +5,21 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; -import java.net.ConnectException; -import java.net.SocketTimeoutException; -import java.net.URL; -import java.net.URLConnection; +import java.net.*; import java.nio.charset.StandardCharsets; import java.security.cert.X509Certificate; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; + +import org.apache.commons.collections.map.HashedMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ruoyi.common.constant.Constants; @@ -24,7 +27,7 @@ import com.ruoyi.common.utils.StringUtils; /** * 通用http发送方法 - * + * * @author ruoyi */ public class HttpUtils @@ -189,6 +192,190 @@ public class HttpUtils return result.toString(); } + /** + * 向指定 URL 发送POST方法的请求 - 金思维对接用 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 json字符串 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static Map sendPostJson(String url, String param,String cookie) + { + Map map = new HashMap(); + String tempCookie = ""; + + PrintWriter out = null; + BufferedReader in = null; + StringBuilder result = new StringBuilder(); + try + { + String urlNameString = url; + log.info("sendPost - {}", urlNameString); + URL realUrl = new URL(urlNameString); + URLConnection conn = realUrl.openConnection(); + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + conn.setRequestProperty("Accept-Charset", "utf-8"); + conn.setRequestProperty("contentType", "application/json"); + conn.setRequestProperty("Content-Type", "application/json"); + // 设置Cookie头部 + if(StringUtils.isNotEmpty(cookie)){ + String cookies[] = cookie.split("; "); + String cookieString = ""; + for(String c:cookies){ + String v[]= c.split("="); + if(".ASPXAUTH".equals(v[0])){ + if(StringUtils.isEmpty(cookieString)){ + cookieString = v[0] + "=" +v[1] +"; "; + }else{ + cookieString = cookieString + v[0] + "=" +v[1] +"; "; + } + }else if("uid".equals(v[0])){ + if(StringUtils.isEmpty(cookieString)){ + cookieString = v[0] + "=" +v[1] +"; "; + }else{ + cookieString = cookieString + v[0] + "=" +v[1] +"; "; + } + }else{ + continue; + } + } + conn.setRequestProperty("Cookie", cookieString); + } + + conn.setDoOutput(true); + conn.setDoInput(true); + out = new PrintWriter(conn.getOutputStream()); + out.print(param); + out.flush(); + in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8)); + String line; + while ((line = in.readLine()) != null) + { + result.append(line); + } + if(StringUtils.isEmpty(cookie)){ + List cookies = conn.getHeaderFields().get("Set-Cookie"); + tempCookie = cookies.stream().collect(Collectors.joining("; ")); + } + + log.info("recv - {}", result); + } + catch (ConnectException e) + { + log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e); + } + catch (SocketTimeoutException e) + { + log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e); + } + catch (IOException e) + { + log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e); + } + catch (Exception e) + { + log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e); + } + finally + { + try + { + if (out != null) + { + out.close(); + } + if (in != null) + { + in.close(); + } + } + catch (IOException ex) + { + log.error("调用in.close Exception, url=" + url + ",param=" + param, ex); + } + } + map.put("cookie",tempCookie); + map.put("res",result.toString()); + return map; + } + + /** + * 向指定 URL 发送POST方法的请求 + * + * @param url 发送请求的 URL + * @param param 请求参数,请求参数应该是 json字符串 的形式。 + * @return 所代表远程资源的响应结果 + */ + public static String sendPostJson2(String url, String param) + { + PrintWriter out = null; + BufferedReader in = null; + StringBuilder result = new StringBuilder(); + try + { + String urlNameString = url; + log.info("sendPost - {}", urlNameString); + URL realUrl = new URL(urlNameString); + URLConnection conn = realUrl.openConnection(); + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); + conn.setRequestProperty("Accept-Charset", "utf-8"); + conn.setRequestProperty("contentType", "application/json"); + conn.setRequestProperty("Content-Type", "application/json"); + conn.setDoOutput(true); + conn.setDoInput(true); + out = new PrintWriter(conn.getOutputStream()); + out.print(param); + out.flush(); + in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8)); + String line; + while ((line = in.readLine()) != null) + { + result.append(line); + } + + log.info("recv - {}", result); + } + catch (ConnectException e) + { + log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e); + } + catch (SocketTimeoutException e) + { + log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e); + } + catch (IOException e) + { + log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e); + } + catch (Exception e) + { + log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e); + } + finally + { + try + { + if (out != null) + { + out.close(); + } + if (in != null) + { + in.close(); + } + } + catch (IOException ex) + { + log.error("调用in.close Exception, url=" + url + ",param=" + param, ex); + } + } + return result.toString(); + } + public static String sendSSLPost(String url, String param) { StringBuilder result = new StringBuilder(); @@ -271,4 +458,4 @@ public class HttpUtils return true; } } -} \ No newline at end of file +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Base64.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Base64.java index ca1cd92..9eddf2a 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Base64.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Base64.java @@ -1,8 +1,18 @@ package com.ruoyi.common.utils.sign; +import org.apache.commons.io.IOUtils; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; + +import java.io.IOException; +import java.io.InputStream; + /** * Base64工具类 - * + * * @author ruoyi */ public final class Base64 @@ -263,6 +273,29 @@ public final class Base64 return decodedData; } + /** + * 将文件转为base64字符串 + * @param url + * @return + */ + public static String fileBase64(String url){ + String encode = null; + try { + CloseableHttpClient client = HttpClients.createDefault(); + HttpGet get = new HttpGet(url); + CloseableHttpResponse response = client.execute(get); + //文件流 + HttpEntity httpEntity = response.getEntity(); + InputStream inStream = httpEntity.getContent(); + byte[] bytes = IOUtils.toByteArray(inStream); + //附件base64 + encode = Base64.encode(bytes); + } catch (IOException e) { + return null; + } + return encode; + } + /** * remove WhiteSpace from MIME containing encoded Base64 data. * diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java index a8b9b66..34861fc 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java @@ -94,6 +94,15 @@ public class DruidConfig return druidProperties.dataSource(dataSource); } + @Bean + @ConfigurationProperties("spring.datasource.druid.oa") + @ConditionalOnProperty(prefix = "spring.datasource.druid.oa", name = "enabled", havingValue = "true") + public DataSource oaDataSource(DruidProperties druidProperties) + { + DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); + return druidProperties.dataSource(dataSource); + } + @Bean(name = "dynamicDataSource") @Primary public DynamicDataSource dataSource(DataSource masterDataSource) @@ -106,6 +115,7 @@ public class DruidConfig setDataSource(targetDataSources, DataSourceType.JNERP.name(), "jnerpDataSource"); setDataSource(targetDataSources, DataSourceType.STORAGE.name(), "storageDataSource"); setDataSource(targetDataSources, DataSourceType.ORDER.name(), "orderDataSource"); + setDataSource(targetDataSources, DataSourceType.OA.name(), "oaDataSource"); return new DynamicDataSource(masterDataSource, targetDataSources); } diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java index d4e065a..27d652d 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java @@ -1,57 +1,51 @@ -//package com.ruoyi.quartz.config; -// -//import org.springframework.context.annotation.Bean; -//import org.springframework.context.annotation.Configuration; -//import org.springframework.scheduling.quartz.SchedulerFactoryBean; -//import javax.sql.DataSource; -//import java.util.Properties; -// -///** -// * 定时任务配置(单机部署建议删除此类和qrtz数据库表,默认走内存会最高效) -// * -// * @author ruoyi -// */ -//@Configuration -//public class ScheduleConfig -//{ -// @Bean -// public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) -// { -// SchedulerFactoryBean factory = new SchedulerFactoryBean(); -// factory.setDataSource(dataSource); -// -// // quartz参数 -// Properties prop = new Properties(); -// prop.put("org.quartz.scheduler.instanceName", "RuoyiScheduler"); -// prop.put("org.quartz.scheduler.instanceId", "AUTO"); -// // 线程池配置 -// prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool"); -// prop.put("org.quartz.threadPool.threadCount", "20"); -// prop.put("org.quartz.threadPool.threadPriority", "5"); -// // JobStore配置 -// prop.put("org.quartz.jobStore.class", "org.springframework.scheduling.quartz.LocalDataSourceJobStore"); -// // 集群配置 -// prop.put("org.quartz.jobStore.isClustered", "true"); -// prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000"); -// prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "10"); -// prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true"); -// -// // sqlserver 启用 -// // prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?"); -// prop.put("org.quartz.jobStore.misfireThreshold", "12000"); -// prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_"); -// factory.setQuartzProperties(prop); -// -// factory.setSchedulerName("RuoyiScheduler"); -// // 延时启动 -// factory.setStartupDelay(1); -// factory.setApplicationContextSchedulerContextKey("applicationContextKey"); -// // 可选,QuartzScheduler -// // 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 -// factory.setOverwriteExistingJobs(true); -// // 设置自动启动,默认为true -// factory.setAutoStartup(true); -// -// return factory; -// } -//} +package com.ruoyi.quartz.config; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.quartz.SchedulerFactoryBean; +import javax.sql.DataSource; +import java.util.Properties; +/** + * 定时任务配置(单机部署建议删除此类和qrtz数据库表,默认走内存会最高效) + * + * @author ruoyi + */ +@Configuration +public class ScheduleConfig +{ + @Bean + public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) + { + SchedulerFactoryBean factory = new SchedulerFactoryBean(); + factory.setDataSource(dataSource); + // quartz参数 + Properties prop = new Properties(); + prop.put("org.quartz.scheduler.instanceName", "RuoyiScheduler"); + prop.put("org.quartz.scheduler.instanceId", "AUTO"); + // 线程池配置 + prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool"); + prop.put("org.quartz.threadPool.threadCount", "20"); + prop.put("org.quartz.threadPool.threadPriority", "5"); + // JobStore配置 + prop.put("org.quartz.jobStore.class", "org.springframework.scheduling.quartz.LocalDataSourceJobStore"); + // 集群配置 + prop.put("org.quartz.jobStore.isClustered", "true"); + prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000"); + prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "10"); + prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true"); + // sqlserver 启用 + prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?"); + prop.put("org.quartz.jobStore.misfireThreshold", "12000"); + prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_"); + factory.setQuartzProperties(prop); + factory.setSchedulerName("RuoyiScheduler"); + // 延时启动 + factory.setStartupDelay(1); + factory.setApplicationContextSchedulerContextKey("applicationContextKey"); + // 可选,QuartzScheduler + // 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 + factory.setOverwriteExistingJobs(true); + // 设置自动启动,默认为true + factory.setAutoStartup(true); + return factory; + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/OASysQuot.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/OASysQuot.java new file mode 100644 index 0000000..fa7b6e4 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/OASysQuot.java @@ -0,0 +1,55 @@ +package com.ruoyi.quartz.domain; + +import com.ruoyi.common.core.domain.BaseEntity; + +import java.util.Date; +import java.util.List; + +/** + * 报价对象 SysOaQuot + * + * @author ruoyi + * @date 2024-04-01 + */ +public class OASysQuot +{ + /** 报价单id */ + private String quotId; + + /** 报价单号 */ + private String quotCode; + + /** OA审批状态 */ + private String state; + + /** OA审批备注 */ + private String remark; + + public String getQuotId() { + return quotId; + } + + public void setQuotId(String quotId) { + this.quotId = quotId; + } + + public String getQuotCode() {return quotCode;} + + public void setQuotCode(String quotCode) {this.quotCode = quotCode;} + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/OAQuotMapper.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/OAQuotMapper.java new file mode 100644 index 0000000..e0dfca8 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/OAQuotMapper.java @@ -0,0 +1,37 @@ +package com.ruoyi.quartz.mapper; + +import com.ruoyi.quartz.domain.OASysQuot; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 报价Mapper接口 + * + * @author ruoyi + * @date 2024-04-01 + */ +public interface OAQuotMapper +{ + + /** + * 查询 报价单-OA审批状态为审批中的单号,并且在中间表显示流程已经结束的单据,根据单号更新 OA审批状态 + * @return + */ + List selectOAQUOT(); + + /** + * 批量更新报价单-OA审批状态为已完成 + * @param quotId + * @param state + * @param remark + */ + void updateQuotOAApprovalStatus(@Param("quotId") String quotId, @Param("state") String state, @Param("remark") String remark); + + + /** + * 将中间表 根据报价单号更新 isfinish=1 表示报价流程已结束 + * @param quotCode + */ + void updateOAQuotByQuotCode(String quotCode); +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/OAQuotService.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/OAQuotService.java new file mode 100644 index 0000000..11c2754 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/OAQuotService.java @@ -0,0 +1,33 @@ +package com.ruoyi.quartz.service; + +import com.ruoyi.quartz.domain.OASysQuot; + +import java.util.List; + +/** + * 报价Service接口 + * + * @author ruoyi + * @date 2024-04-01 + */ +public interface OAQuotService +{ + + /** + * 查询 报价单-OA审批状态为审批中的单号,并且在中间表显示流程已经结束的单据,根据单号更新 OA审批状态 + * @return + */ + List selectOAQUOT(); + + /** + * 批量更新报价单-OA审批状态为已完成 + * @param quotId + */ + void updateQuotOAApprovalStatus(String quotId,String state,String remark); + + + /** + * 将中间表 根据报价单号更新 isfinish=1 表示报价流程已结束 + */ + void updateOAQuotByQuotCode(String quotCode); +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/OAQuotServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/OAQuotServiceImpl.java new file mode 100644 index 0000000..b84ca9c --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/OAQuotServiceImpl.java @@ -0,0 +1,45 @@ +package com.ruoyi.quartz.service.impl; + +import com.ruoyi.quartz.domain.OASysQuot; +import com.ruoyi.quartz.mapper.OAQuotMapper; +import com.ruoyi.quartz.service.OAQuotService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 报价Service业务层处理 + * + * @author ruoyi + * @date 2024-04-01 + */ +@Service +public class OAQuotServiceImpl implements OAQuotService +{ + @Resource + private OAQuotMapper aAQuotMapper; + + /** + * 查询 报价单-OA审批状态为审批中的单号,并且在中间表显示流程已经结束的单据,根据单号更新 OA审批状态 + * @return + */ + @Override + public List selectOAQUOT() { + return aAQuotMapper.selectOAQUOT(); + } + + @Override + public void updateQuotOAApprovalStatus(String quotId, String state, String remark) { + aAQuotMapper.updateQuotOAApprovalStatus(quotId,state,remark); + } + + /** + * 将中间表 根据报价单号更新 isfinish=1 表示报价流程已结束 + * @param quotCode + */ + @Override + public void updateOAQuotByQuotCode(String quotCode) { + aAQuotMapper.updateOAQuotByQuotCode(quotCode); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/QuotTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/QuotTask.java new file mode 100644 index 0000000..547c4fd --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/QuotTask.java @@ -0,0 +1,51 @@ +package com.ruoyi.quartz.task; + +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.core.redis.RedisLock; +import com.ruoyi.common.utils.ip.IpUtils; +import com.ruoyi.quartz.domain.OASysQuot; +import com.ruoyi.quartz.service.OAQuotService; +import org.redisson.api.RLock; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import java.util.List; + +/** + * 定时任务调度-报价单OA流程状态读取 + * + * @author ruoyi + */ +@Component("quotTask") +public class QuotTask +{ + @Resource + private OAQuotService quotService; + + public static QuotTask testUtils; + + @PostConstruct + public void init() { + testUtils = this; + } + + /** + * 检查OA报加单审批流程是否结束 + */ + public void OAQuot() throws Exception { + try { + // 查询 报价单-OA审批状态为审批中的单号,并且在中间表显示流程已经结束的单据,根据单号更新 OA审批状态 + List quots = quotService.selectOAQUOT(); + for(OASysQuot sysoaquot:quots){ + // 批量更新报价单-OA审批状态,备注 + quotService.updateQuotOAApprovalStatus(sysoaquot.getQuotId(),sysoaquot.getState(),sysoaquot.getRemark()); + //将中间表 根据报价单号更新 isfinish=1 表示报价流程已结束 + quotService.updateOAQuotByQuotCode(sysoaquot.getQuotCode()); + } + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RbTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RbTask.java index 12305a0..3d9e208 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RbTask.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RbTask.java @@ -6,6 +6,7 @@ import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.core.redis.RedisLock; import com.ruoyi.common.enums.DataSourceType; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.quartz.domain.OASysQuot; import com.ruoyi.quartz.domain.c_rb_product_price; import com.ruoyi.quartz.domain.c_rb_productbase_price; import com.ruoyi.quartz.service.SapTjService; @@ -29,15 +30,6 @@ import java.util.List; @Component("rbTask") public class RbTask { - @Autowired - private RedisCache redisCache; - - @Autowired - private RedisLock redisLock; - - @Autowired - private Scheduler scheduler; - @Resource private SapTjService sapTjService; @@ -52,45 +44,28 @@ public class RbTask * 同步红本数据库 */ public void tongb() throws Exception { - String rbVersionUid = testUtils.sapTjService.selRbVersionUid();//红本调价记录uid - Boolean lock= redisLock.getLock(getJobKey("rbTask"), -1, rbVersionUid); - if(lock){ - //判断是否已执行调价 (6.3 redbook rb_productVersion 是否有新增uid and sta='1'、sdmdm1 调价日期今日的数据是否存在) - String locVersionUid = testUtils.sapTjService.selLocVersionUid();//本地红本调价记录uid + //判断是否已执行调价 (6.3 redbook rb_productVersion 是否有新增uid and sta='1'、sdmdm1 调价日期今日的数据是否存在) + String locVersionUid = testUtils.sapTjService.selLocVersionUid();//本地红本调价记录uid - String RbProductPriceCount = testUtils.sapTjService.selRbProductPriceVersionUid(rbVersionUid);//RbProductPrice表是否有更新 - String RbProductBasePriceCount = testUtils.sapTjService.selRbProductBasePriceVersionUid(rbVersionUid);//RbProductBasePrice表是否有更新 + String RbProductPriceCount = testUtils.sapTjService.selRbProductPriceVersionUid(rbVersionUid);//RbProductPrice表是否有更新 + String RbProductBasePriceCount = testUtils.sapTjService.selRbProductBasePriceVersionUid(rbVersionUid);//RbProductBasePrice表是否有更新 - try{ - if(!rbVersionUid.equals(locVersionUid) && Integer.valueOf(RbProductPriceCount)>0 && Integer.valueOf(RbProductBasePriceCount)>0) {//有新增调价版本并且有调价记录 - System.out.println("=======================开始同步!======================"); - testUtils.sapTjService.deleteLocProductPrice();//删除本地c_rb_product_price表数据 - List productPriceList = testUtils.sapTjService.getProductPriceList(rbVersionUid); - JDBCBatchInsert.insertRbProductPrice(productPriceList);//批量插入 + try{ + if(!rbVersionUid.equals(locVersionUid) && Integer.valueOf(RbProductPriceCount)>0 && Integer.valueOf(RbProductBasePriceCount)>0) {//有新增调价版本并且有调价记录 + System.out.println("=======================开始同步!======================"); + testUtils.sapTjService.deleteLocProductPrice();//删除本地c_rb_product_price表数据 + List productPriceList = testUtils.sapTjService.getProductPriceList(rbVersionUid); + JDBCBatchInsert.insertRbProductPrice(productPriceList);//批量插入 - testUtils.sapTjService.deleteLocProductBasePrice();//删除本地c_rb_productbase_price表数据 - List productBasePriceList = testUtils.sapTjService.getProductBasePriceList(rbVersionUid); - JDBCBatchInsert.insertRbProductBasePrice(productBasePriceList);//批量插入 + testUtils.sapTjService.deleteLocProductBasePrice();//删除本地c_rb_productbase_price表数据 + List productBasePriceList = testUtils.sapTjService.getProductBasePriceList(rbVersionUid); + JDBCBatchInsert.insertRbProductBasePrice(productBasePriceList);//批量插入 - testUtils.sapTjService.updateLocRbVersion(rbVersionUid);//更新本地c_rb_version表 - - } - redisCache.deleteObject(getJobKey("rbTask")); - }catch (Exception e) { - throw new Exception(e.getMessage(), e); + testUtils.sapTjService.updateLocRbVersion(rbVersionUid);//更新本地c_rb_version表 } + }catch (Exception e) { + throw new Exception(e.getMessage(), e); } } - - /** - * 定时任务缓存键名 - * - * @param jobId 任务编号 - * @return 缓存键key - */ - private String getJobKey(String jobId) - { - return CacheConstants.SYS_JOB_KEY + jobId; - } } diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java index 6f95a48..234be2d 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java @@ -20,7 +20,7 @@ import com.ruoyi.quartz.domain.SysJob; /** * 定时任务工具类 - * + * * @author ruoyi * */ @@ -77,7 +77,7 @@ public class ScheduleUtils jobDetail.getJobDataMap().put(ScheduleConstants.TASK_PROPERTIES, job); //注册triggerListener ->项目多机部署时使用 -// scheduler.getListenerManager().addTriggerListener(new RedisTriggerListener()); + scheduler.getListenerManager().addTriggerListener(new RedisTriggerListener()); // 判断是否存在 if (scheduler.checkExists(getJobKey(jobId, jobGroup))) @@ -124,7 +124,7 @@ public class ScheduleUtils /** * 检查包名是否为白名单配置 - * + * * @param invokeTarget 目标字符串 * @return 结果 */ diff --git a/ruoyi-quartz/src/main/resources/mapper/quartz/OAQuotMapper.xml b/ruoyi-quartz/src/main/resources/mapper/quartz/OAQuotMapper.xml new file mode 100644 index 0000000..d977dc9 --- /dev/null +++ b/ruoyi-quartz/src/main/resources/mapper/quartz/OAQuotMapper.xml @@ -0,0 +1,27 @@ + + + + + + + update quot set quot_oa_approval_status = #{state},quot_oa_approval_remark = #{remark} + where quot_id = #{quotId} + + + + update sys_oa_quot set isFinish = '1' where quot_code = #{quotCode} + + diff --git a/ruoyi-system/src/main/java/com/ruoyi/customer/domain/Customer.java b/ruoyi-system/src/main/java/com/ruoyi/customer/domain/Customer.java index bac3d5d..478482b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/customer/domain/Customer.java +++ b/ruoyi-system/src/main/java/com/ruoyi/customer/domain/Customer.java @@ -32,23 +32,18 @@ public class Customer extends BaseEntity private String cusSapCode; /** 街道/门牌号 */ - @Excel(name = "街道/门牌号") private String cusStreet; /** 街道 */ - @Excel(name = "街道") private String cusQccStreet; /** 付款条件 */ - @Excel(name = "付款条件",dictType = "cus_payment_terms") private String cusPaymentTerms; /** 电话号码 */ - @Excel(name = "电话号码") private String cusPhoneNumber; /** 行业代码 */ - @Excel(name = "行业代码") private String cusIndustryCode; /** 企查查行业代码 */ @@ -62,7 +57,6 @@ public class Customer extends BaseEntity private String cusInsuredCountQcc; /** 客户组类别 */ - @Excel(name = "客户组类别",dictType = "cus_group") private String cusGroup; /** 增值税号 */ @@ -70,46 +64,36 @@ public class Customer extends BaseEntity private String cusVatNo; /** 客户类型 */ - @Excel(name = "客户类型",dictType = "cus_type") private String cusType; /** 国家 */ - @Excel(name = "国家",dictType = "cus_country") private String cusCountry; /** 语言 */ - @Excel(name = "语言",dictType = "cus_language") private String cusLanguage; /** 客户标签 */ - @Excel(name = "客户标签") private String cusLabel; /** 客户分类 */ - @Excel(name = "客户分类") private String cusClassification; /** 电子发票接收邮箱 */ - @Excel(name = "电子发票接收邮箱") private String cusReceivingEmail; /** 收件人 */ - @Excel(name = "收件人") private String cusRecipient; /** 收件人电话 */ - @Excel(name = "收件人电话") private String cusRecipientPhone; /** 备注 */ - @Excel(name = "备注") private String cusRemark; /** 驳回备注 */ private String cusReturnRemark; /** 客户禁用状态 */ - @Excel(name = "客户禁用状态",dictType = "common_state") private String cusState; /** 客户审批状态 */ @@ -121,7 +105,6 @@ public class Customer extends BaseEntity private String cusSalesman; /** 创建人 */ - @Excel(name = "创建人") private String createName; /** 银行信息 */ diff --git a/ruoyi-system/src/main/java/com/ruoyi/customer/mapper/CustomerMapper.java b/ruoyi-system/src/main/java/com/ruoyi/customer/mapper/CustomerMapper.java index ee347d9..8cf544b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/customer/mapper/CustomerMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/customer/mapper/CustomerMapper.java @@ -84,4 +84,11 @@ public interface CustomerMapper * @return 结果 */ public int deleteBankByCusId(String cusId); + + /** + * 获取单据编号 + * @param type + * @return + */ + String getCode(String type); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/customer/service/ICustomerService.java b/ruoyi-system/src/main/java/com/ruoyi/customer/service/ICustomerService.java index 84d5842..f345d7c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/customer/service/ICustomerService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/customer/service/ICustomerService.java @@ -65,4 +65,11 @@ public interface ICustomerService * @return */ int changCusStatus(Customer customer); + + /** + * 获取单据编号 + * @param type + * @return + */ + String getCode(String type); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/customer/service/impl/CustomerServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/customer/service/impl/CustomerServiceImpl.java index 9e7ef47..f65ca93 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/customer/service/impl/CustomerServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/customer/service/impl/CustomerServiceImpl.java @@ -122,6 +122,16 @@ public class CustomerServiceImpl implements ICustomerService return customerMapper.updateCustomer(customer); } + /** + * 获取单据编号 + * @param type + * @return + */ + @Override + public String getCode(String type) { + return customerMapper.getCode(type); + } + /** * 新增银行信息 * diff --git a/ruoyi-system/src/main/java/com/ruoyi/quot/domain/Quot.java b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/Quot.java index 6f95fe7..d6b3daa 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/quot/domain/Quot.java +++ b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/Quot.java @@ -70,7 +70,6 @@ public class Quot extends BaseEntity private Date quotQuotationDate; /** 数量 */ - @Excel(name = "数量") private String quotQuantity; /** 报价来源 */ @@ -81,9 +80,11 @@ public class Quot extends BaseEntity private String quotQuotationRequire; /** 反馈说明 */ - @Excel(name = "反馈说明") private String quotFeedbackExplanation; + /** 明细条数 */ + private Integer quotMaterialsCount; + /** 铝价 */ private String quotLvPrice; @@ -105,7 +106,6 @@ public class Quot extends BaseEntity private String quotCheckUserName; /** 审核人 */ - @Excel(name = "审核人") private String quotCheckUserNickname; /** 提交状态 */ @@ -151,6 +151,7 @@ public class Quot extends BaseEntity private String quotJswApprovalStatus; /** OA **/ private String quotOAApprovalStatus; + private String quotOAApprovalStatusRemark; /** 报价单-产品信息 */ private List quotMaterialList; @@ -290,6 +291,9 @@ public class Quot extends BaseEntity { return quotFeedbackExplanation; } + public Integer getQuotMaterialsCount() { return quotMaterialsCount; } + + public void setQuotMaterialsCount(Integer quotMaterialsCount) { this.quotMaterialsCount = quotMaterialsCount; } public String getQuotLvPrice() { return quotLvPrice; } public void setQuotLvPrice(String quotLvPrice) { this.quotLvPrice = quotLvPrice; } @@ -427,4 +431,7 @@ public class Quot extends BaseEntity public String getQuotOAApprovalStatus() { return quotOAApprovalStatus; } public void setQuotOAApprovalStatus(String quotOAApprovalStatus) { this.quotOAApprovalStatus = quotOAApprovalStatus; } + public String getQuotOAApprovalStatusRemark() { return quotOAApprovalStatusRemark; } + + public void setQuotOAApprovalStatusRemark(String quotOAApprovalStatusRemark) { this.quotOAApprovalStatusRemark = quotOAApprovalStatusRemark; } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/quot/domain/SysOaQuot.java b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/SysOaQuot.java new file mode 100644 index 0000000..2373c32 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/SysOaQuot.java @@ -0,0 +1,215 @@ +package com.ruoyi.quot.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.util.Date; +import java.util.List; + +/** + * 报价对象 SysOaQuot + * + * @author ruoyi + * @date 2024-04-01 + */ +public class SysOaQuot extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** oa用户id */ + private Integer userId; + + /** oa部门ID */ + private Integer departmentId; + + /** 提交oa时间 */ + private String submissionTime; + + /** 报价单id */ + private String quotId; + + /** 报价单号 */ + private String quotCode; + + /** 业务员 */ + private String quotSalesmanName; + + /** 客户名称 */ + private String quotCustomerName; + + /** 地址 */ + private String quotAddress; + + /** 联系电话 */ + private String quotPhone; + + /** 询价日期 */ + private Date quotInquiryDate; + + /** 项目名称 */ + private String quotProject; + + /** 报价要求 */ + private String quotQuotationRequire; + + /** 铝价 */ + private String quotLvPrice; + + /** 铜价 */ + private String quotTongPrice; + + /** 整单料价价差率 */ + private String quotMatpriceDiff; + + /** OA审批状态 */ + private String state; + + /** OA审批备注 */ + private String remark; + + /** 报价单状态 1-整个报价流程结束(包括已反馈、已驳回) ,0-提交OA待审批*/ + private String isFinish; + + /** 明细 */ + List materials; + + public Integer getUserId() { + return userId; + } + + public void setUserId(Integer userId) { + this.userId = userId; + } + + public Integer getDepartmentId() { + return departmentId; + } + + public void setDepartmentId(Integer departmentId) { + this.departmentId = departmentId; + } + + public String getSubmissionTime() { + return submissionTime; + } + + public void setSubmissionTime(String submissionTime) { + this.submissionTime = submissionTime; + } + + public String getQuotId() { + return quotId; + } + + public void setQuotId(String quotId) { + this.quotId = quotId; + } + + public String getQuotCode() { + return quotCode; + } + + public void setQuotCode(String quotCode) { + this.quotCode = quotCode; + } + + public String getQuotSalesmanName() { + return quotSalesmanName; + } + + public void setQuotSalesmanName(String quotSalesmanName) { + this.quotSalesmanName = quotSalesmanName; + } + + public String getQuotCustomerName() { + return quotCustomerName; + } + + public void setQuotCustomerName(String quotCustomerName) { + this.quotCustomerName = quotCustomerName; + } + + public String getQuotAddress() { + return quotAddress; + } + + public void setQuotAddress(String quotAddress) { + this.quotAddress = quotAddress; + } + + public String getQuotPhone() { + return quotPhone; + } + + public void setQuotPhone(String quotPhone) { + this.quotPhone = quotPhone; + } + + public Date getQuotInquiryDate() { + return quotInquiryDate; + } + + public void setQuotInquiryDate(Date quotInquiryDate) { + this.quotInquiryDate = quotInquiryDate; + } + + public String getQuotProject() { + return quotProject; + } + + public void setQuotProject(String quotProject) { + this.quotProject = quotProject; + } + + public String getQuotQuotationRequire() { + return quotQuotationRequire; + } + + public void setQuotQuotationRequire(String quotQuotationRequire) {this.quotQuotationRequire = quotQuotationRequire;} + + public String getQuotLvPrice() { + return quotLvPrice; + } + + public void setQuotLvPrice(String quotLvPrice) { + this.quotLvPrice = quotLvPrice; + } + + public String getQuotTongPrice() { + return quotTongPrice; + } + + public void setQuotTongPrice(String quotTongPrice) { + this.quotTongPrice = quotTongPrice; + } + + public String getQuotMatpriceDiff() { + return quotMatpriceDiff; + } + + public void setQuotMatpriceDiff(String quotMatpriceDiff) { + this.quotMatpriceDiff = quotMatpriceDiff; + } + + public String getState() { return state; } + + public void setState(String state) { this.state = state; } + + @Override + public String getRemark() { return remark; } + + @Override + public void setRemark(String remark) { this.remark = remark; } + + public String getIsFinish() {return isFinish;} + + public void setIsFinish(String isFinish) {this.isFinish = isFinish;} + + public List getMaterials() { + return materials; + } + + public void setMaterials(List materials) { + this.materials = materials; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJsw.java b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJsw.java new file mode 100644 index 0000000..d3a861c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJsw.java @@ -0,0 +1,16 @@ +package com.ruoyi.quot.domain.jsw; + +/** + * 金思维 上传报价单信息 + */ +public class QuotJsw { + private QuotJswInfo recBJDInfo; + + public QuotJswInfo getRecBJDInfo() { + return recBJDInfo; + } + + public void setRecBJDInfo(QuotJswInfo recBJDInfo) { + this.recBJDInfo = recBJDInfo; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswFile.java b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswFile.java new file mode 100644 index 0000000..a62985c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswFile.java @@ -0,0 +1,27 @@ +package com.ruoyi.quot.domain.jsw; + +import java.util.List; + +/** + * 金思维 上传报价单附件信息 + */ +public class QuotJswFile { + private String bjdid; + List fjdata; + + public String getBjdid() { + return bjdid; + } + + public void setBjdid(String bjdid) { + this.bjdid = bjdid; + } + + public List getFjdata() { + return fjdata; + } + + public void setFjdata(List fjdata) { + this.fjdata = fjdata; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswFiles.java b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswFiles.java new file mode 100644 index 0000000..8978b7f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswFiles.java @@ -0,0 +1,25 @@ +package com.ruoyi.quot.domain.jsw; + +/** + * 金思维 上传报价单附件信息 + */ +public class QuotJswFiles { + private String fileName; + private String fileData; + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getFileData() { + return fileData; + } + + public void setFileData(String fileData) { + this.fileData = fileData; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswInfo.java b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswInfo.java new file mode 100644 index 0000000..a87c5f8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswInfo.java @@ -0,0 +1,82 @@ +package com.ruoyi.quot.domain.jsw; + +import java.util.List; + +/** + * 金思维 上传报价单主体信息 + */ +public class QuotJswInfo { + private String quotCode; + private String xsy; + private String xsyid; + private String kh; + private String khid; + private String xm; + private String bz; + + private List quotMaterial; + + public String getQuotCode() { + return quotCode; + } + + public void setQuotCode(String quotCode) { + this.quotCode = quotCode; + } + + public String getXsy() { + return xsy; + } + + public void setXsy(String xsy) { + this.xsy = xsy; + } + + public String getXsyid() { + return xsyid; + } + + public void setXsyid(String xsyid) { + this.xsyid = xsyid; + } + + public String getKh() { + return kh; + } + + public void setKh(String kh) { + this.kh = kh; + } + + public String getKhid() { + return khid; + } + + public void setKhid(String khid) { + this.khid = khid; + } + + public String getXm() { + return xm; + } + + public void setXm(String xm) { + this.xm = xm; + } + + public String getBz() { + return bz; + } + + public void setBz(String bz) { + this.bz = bz; + } + + public List getQuotMaterial() { + return quotMaterial; + } + + public void setQuotMaterial(List quotMaterial) { + this.quotMaterial = quotMaterial; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswMaterial.java b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswMaterial.java new file mode 100644 index 0000000..207727c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswMaterial.java @@ -0,0 +1,72 @@ +package com.ruoyi.quot.domain.jsw; + +import java.math.BigDecimal; + +/** + * 金思维 上传报价单产品信息 + */ +public class QuotJswMaterial { + private String matXingh; + private String matGuig; + private String matDiany; + private String matStandard; + private BigDecimal matSl; + private String matDanw; + private String matRemark; + + public String getMatXingh() { + return matXingh; + } + + public void setMatXingh(String matXingh) { + this.matXingh = matXingh; + } + + public String getMatGuig() { + return matGuig; + } + + public void setMatGuig(String matGuig) { + this.matGuig = matGuig; + } + + public String getMatDiany() { + return matDiany; + } + + public void setMatDiany(String matDiany) { + this.matDiany = matDiany; + } + + public String getMatStandard() { + return matStandard; + } + + public void setMatStandard(String matStandard) { + this.matStandard = matStandard; + } + + public BigDecimal getMatSl() { + return matSl; + } + + public void setMatSl(BigDecimal matSl) { + this.matSl = matSl; + } + + public String getMatDanw() { + return matDanw; + } + + public void setMatDanw(String matDanw) { + this.matDanw = matDanw; + } + + public String getMatRemark() { + return matRemark; + } + + public void setMatRemark(String matRemark) { + this.matRemark = matRemark; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswResult.java b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswResult.java new file mode 100644 index 0000000..ffe8f51 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswResult.java @@ -0,0 +1,43 @@ +package com.ruoyi.quot.domain.jsw; + +/** + * 金思维 接口返回信息 + */ +public class QuotJswResult { + private Boolean Success; + private String Message; + private String ErrorMessage; + private String Key; + + public Boolean getSuccess() { + return Success; + } + + public void setSuccess(Boolean success) { + Success = success; + } + + public String getMessage() { + return Message; + } + + public void setMessage(String message) { + Message = message; + } + + public String getErrorMessage() { + return ErrorMessage; + } + + public void setErrorMessage(String errorMessage) { + ErrorMessage = errorMessage; + } + + public String getKey() { + return Key; + } + + public void setKey(String key) { + Key = key; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswUser.java b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswUser.java new file mode 100644 index 0000000..d077be9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswUser.java @@ -0,0 +1,47 @@ +package com.ruoyi.quot.domain.jsw; + +public class QuotJswUser { + private String userId; + private String password; + private String clientType; + private String epId; + + public QuotJswUser(String userId, String password, String clientType, String epId) { + this.userId = userId; + this.password = password; + this.clientType = clientType; + this.epId = epId; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getClientType() { + return clientType; + } + + public void setClientType(String clientType) { + this.clientType = clientType; + } + + public String getEpId() { + return epId; + } + + public void setEpId(String epId) { + this.epId = epId; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswUserResult.java b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswUserResult.java new file mode 100644 index 0000000..824f2fe --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotJswUserResult.java @@ -0,0 +1,30 @@ +package com.ruoyi.quot.domain.jsw; + +/** + * 金思维 用户认证 返回信息 + */ +public class QuotJswUserResult { + private Boolean Success; + private String ErrorMessage; + private String Message; + + public Boolean getSuccess() { + return Success; + } + + public void setSuccess(Boolean success) { + Success = success; + } + + public String getErrorMessage() { + return ErrorMessage; + } + + public void setErrorMessage(String errorMessage) { + ErrorMessage = errorMessage; + } + + public String getMessage() { return Message; } + + public void setMessage(String message) { Message = message; } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotResultObject.java b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotResultObject.java new file mode 100644 index 0000000..424b14b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/quot/domain/jsw/QuotResultObject.java @@ -0,0 +1,16 @@ +package com.ruoyi.quot.domain.jsw; + +/** + * 金思维 接口返回信息 + */ +public class QuotResultObject { + private QuotJswResult ResultObject; + + public QuotJswResult getResultObject() { + return ResultObject; + } + + public void setResultObject(QuotJswResult resultObject) { + ResultObject = resultObject; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/quot/mapper/QuotMapper.java b/ruoyi-system/src/main/java/com/ruoyi/quot/mapper/QuotMapper.java index b71ae09..7014cd7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/quot/mapper/QuotMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/quot/mapper/QuotMapper.java @@ -3,6 +3,7 @@ package com.ruoyi.quot.mapper; import java.util.List; import com.ruoyi.quot.domain.Quot; import com.ruoyi.quot.domain.QuotMaterial; +import com.ruoyi.quot.domain.SysOaQuot; import org.apache.ibatis.annotations.Param; /** @@ -122,4 +123,28 @@ public interface QuotMapper */ String checkExistQuot(@Param("quotSalesmanCode") String username, @Param("quotCustomerBm") String quotCustomerBm, @Param("quotProject") String quotProject); + /** + * 报价单提交OA,插入中间表 sys_oa_quot sys_oa_quot_material + * @param sysOaQuot + */ + void insertSysOAQuot(SysOaQuot sysOaQuot); + + /** + * 查询OA用户 + * @param loginid + * @return + */ + SysOaQuot selectOAUserByUserName(String loginid); + + /** + * 报价单提交OA,插入中间表 sys_oa_quot sys_oa_quot_material + * @param subList + */ + void batchSysOaQuotMaterial(List subList); + + /** + * 获取单据编号 + * @return + */ + String getCode(String type); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/quot/service/IQuotService.java b/ruoyi-system/src/main/java/com/ruoyi/quot/service/IQuotService.java index 2907572..361594c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/quot/service/IQuotService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/quot/service/IQuotService.java @@ -4,6 +4,7 @@ import java.util.List; import com.ruoyi.customer.domain.Customer; import com.ruoyi.quot.domain.Quot; +import com.ruoyi.quot.domain.SysOaQuot; /** * 报价Service接口 @@ -105,4 +106,22 @@ public interface IQuotService */ Boolean checkExistQuot(String username, String quotCustomerBm, String quotProject); + + /** + * 报价单提交OA,插入中间表 sys_oa_quot sys_oa_quot_material + * @param sysOaQuot + */ + void insertSysOAQuot(SysOaQuot sysOaQuot); + + /** + * 查询OA用户 + * @return + */ + SysOaQuot selectOAUserByUserName(String loginid); + + /** + * 获取单据编号 + * @return + */ + String getCode(String type); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/quot/service/impl/QuotServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/quot/service/impl/QuotServiceImpl.java index b04d608..59e1f61 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/quot/service/impl/QuotServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/quot/service/impl/QuotServiceImpl.java @@ -3,9 +3,12 @@ package com.ruoyi.quot.service.impl; import java.util.List; 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.uuid.UUID; import com.ruoyi.customer.domain.Customer; +import com.ruoyi.quot.domain.SysOaQuot; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -176,6 +179,26 @@ public class QuotServiceImpl implements IQuotService return !"0".equals(count); } + /** + * 报价单提交OA,插入中间表 sys_oa_quot sys_oa_quot_material + * @param sysOaQuot + */ + @Override + public void insertSysOAQuot(SysOaQuot sysOaQuot) { + quotMapper.insertSysOAQuot(sysOaQuot); + insertSysOAQuotMaterial(sysOaQuot); + } + + /** + * 查询OA用户 + * @return + */ + @Override + @DataSource(DataSourceType.OA) + public SysOaQuot selectOAUserByUserName(String loginid) { + return quotMapper.selectOAUserByUserName(loginid); + } + /** * 新增报价单-产品信息 * @@ -186,6 +209,37 @@ public class QuotServiceImpl implements IQuotService List quotMaterialList = quot.getQuotMaterialList(); String quotId = quot.getQuotId(); if (StringUtils.isNotNull(quotMaterialList)) + { + List list = new ArrayList(); + for (QuotMaterial quotMaterial : quotMaterialList) + { + quotMaterial.setMatId(UUID.fastUUID().toString()); + quotMaterial.setMatStandard("G"); + quotMaterial.setQuotId(quotId); + list.add(quotMaterial); + } + if (list.size() > 0) + { + int batchSize = 100; // 每批次插入的数据量 + for (int i = 0; i < list.size(); i += batchSize) { + int toIndex = Math.min(i + batchSize, list.size()); + List subList = list.subList(i, toIndex); + quotMapper.batchQuotMaterial(subList); + } + } + } + } + + /** + * 新增报价单-OA产品信息 + * + * @param sysOaQuot 报价对象 + */ + public void insertSysOAQuotMaterial(SysOaQuot sysOaQuot) + { + List quotMaterialList = sysOaQuot.getMaterials(); + String quotId = sysOaQuot.getQuotId(); + if (StringUtils.isNotNull(quotMaterialList)) { List list = new ArrayList(); for (QuotMaterial quotMaterial : quotMaterialList) @@ -201,9 +255,18 @@ public class QuotServiceImpl implements IQuotService for (int i = 0; i < list.size(); i += batchSize) { int toIndex = Math.min(i + batchSize, list.size()); List subList = list.subList(i, toIndex); - quotMapper.batchQuotMaterial(subList); + quotMapper.batchSysOaQuotMaterial(subList); } } } } + + /** + * 获取单据编号 + * @return + */ + @Override + public String getCode(String type) { + return quotMapper.getCode(type); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/redBook/domain/OAQuotProduct.java b/ruoyi-system/src/main/java/com/ruoyi/redBook/domain/OAQuotProduct.java index a32a8a6..fe299cd 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/redBook/domain/OAQuotProduct.java +++ b/ruoyi-system/src/main/java/com/ruoyi/redBook/domain/OAQuotProduct.java @@ -1,17 +1,24 @@ package com.ruoyi.redBook.domain; +import com.ruoyi.common.annotation.Excel; + import java.math.BigDecimal; public class OAQuotProduct implements Comparable{ private Integer index;//序号 private String uid_0;//版本uid private String name_0;//产品型号 + @Excel(name = "型号") private String name_1;//型号 + @Excel(name = "规格") private String spec;//规格 + @Excel(name = "电压") private String voltage;//电压 + @Excel(name = "单位") private String stu;//单位 private String price;//红本价 private BigDecimal setPrice;//单价 + @Excel(name = "数量") private BigDecimal count;//数量 private BigDecimal allPrice;//金额 private String quot_product_id;//id diff --git a/ruoyi-system/src/main/java/com/ruoyi/redBook/domain/OAQuotProductTemplate.java b/ruoyi-system/src/main/java/com/ruoyi/redBook/domain/OAQuotProductTemplate.java index 2a3e286..4d869e8 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/redBook/domain/OAQuotProductTemplate.java +++ b/ruoyi-system/src/main/java/com/ruoyi/redBook/domain/OAQuotProductTemplate.java @@ -15,6 +15,9 @@ public class OAQuotProductTemplate { @Excel(name = "规格") private String spec;//规格 + @Excel(name = "电压") + private String voltage;//电压 + @Excel(name = "数量") private BigDecimal count;//数量 @@ -42,6 +45,10 @@ public class OAQuotProductTemplate { this.spec = spec; } + public String getVoltage() {return voltage;} + + public void setVoltage(String voltage) {this.voltage = voltage;} + public BigDecimal getCount() { return count; } 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 157af00..1449355 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 @@ -123,7 +123,7 @@ public interface OARedBookMapper * @param rbUid * @return */ - OAQuotProduct getFixDatePrice2(@Param("name_1") String name_1, @Param("spec") String spec, @Param("uid_0") String rbUid); + OAQuotProduct getFixDatePrice2(@Param("name_1") String name_1, @Param("spec") String spec, @Param("voltage") String voltage, @Param("uid_0") String rbUid); /** * 查询已生成的报价单列表 @@ -153,4 +153,10 @@ public interface OARedBookMapper */ String rb_price_version(); + /** + * 获取单据编号 + * @param type + * @return + */ + String getCode(String type); } 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 7a4ecfb..158e2d1 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 @@ -147,4 +147,10 @@ public interface IRedBookService */ List setRedBookPrice2(List list); + /** + * 获取单据编号 + * @param type + * @return + */ + String getCode(String type); } 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 3017694..af048fd 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 @@ -129,6 +129,7 @@ public class RedBookServiceImpl implements IRedBookService * 修改报价单 * @param quot */ + @Transactional @Override public void updateOAQuot(OAQuot quot) { quot.setUpdateTime(DateUtils.getNowDate()); @@ -202,7 +203,7 @@ public class RedBookServiceImpl implements IRedBookService * @return */ @Override - @DataSource(DataSourceType.REDBOOK) + @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()); @@ -217,12 +218,12 @@ public class RedBookServiceImpl implements IRedBookService * @return */ @Override - @DataSource(DataSourceType.REDBOOK) + @DataSource(DataSourceType.OAREDBOOK) public List setRedBookPrice2(List list) { List OAQuotProducts = new ArrayList<>(); OAQuotProduct oAQuotProduct = new OAQuotProduct(); for(OAQuotProductTemplate oAQuotProductTemplate : list){ - OAQuotProduct rbProduct = oaRedBookMapper.getFixDatePrice2(oAQuotProductTemplate.getName_1(),oAQuotProductTemplate.getSpec(),oAQuotProductTemplate.getRbUid()); + OAQuotProduct rbProduct = oaRedBookMapper.getFixDatePrice2(oAQuotProductTemplate.getName_1(),oAQuotProductTemplate.getSpec(),oAQuotProductTemplate.getVoltage(),oAQuotProductTemplate.getRbUid()); if(rbProduct!=null){ oAQuotProduct = new OAQuotProduct(); oAQuotProduct.setIndex(oAQuotProductTemplate.getIndex()); @@ -240,6 +241,16 @@ public class RedBookServiceImpl implements IRedBookService return OAQuotProducts; } + /** + * 获取单据编号 + * @param type + * @return + */ + @Override + public String getCode(String type) { + return oaRedBookMapper.getCode(type); + } + /** * 查询已生成的报价单列表 diff --git a/ruoyi-system/src/main/resources/mapper/customer/CustomerMapper.xml b/ruoyi-system/src/main/resources/mapper/customer/CustomerMapper.xml index aaf2426..c530ae1 100644 --- a/ruoyi-system/src/main/resources/mapper/customer/CustomerMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/customer/CustomerMapper.xml @@ -82,6 +82,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and cus_code like concat('%', #{cusCode}, '%') and cus_name like concat('%', #{cusName}, '%') and cus_sap_code like concat('%', #{cusSapCode}, '%') + and cus_salesman like concat('%', #{cusSalesman}, '%') and cus_state = #{cusState} and cus_approval_status = #{cusApprovalStatus} @@ -256,4 +257,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ( #{item.bankId}, #{item.bankName}, #{item.bankAccount}, #{item.cusId}, #{item.bankCode}, #{item.bankCountry}) + + diff --git a/ruoyi-system/src/main/resources/mapper/priceVerification/QuotHjMapper.xml b/ruoyi-system/src/main/resources/mapper/priceVerification/QuotHjMapper.xml index 3ad3240..85e2be4 100644 --- a/ruoyi-system/src/main/resources/mapper/priceVerification/QuotHjMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/priceVerification/QuotHjMapper.xml @@ -63,9 +63,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and quot_hj_code like concat('%', #{quotHjCode}, '%') and quot_hj_pricing_date between #{params.beginQuotHjPricingDate} and #{params.endQuotHjPricingDate} + and q.quot_hj_approval_status = #{quotHjApprovalStatus} + order by a.quot_hj_code desc diff --git a/ruoyi-system/src/main/resources/mapper/quot/QuotMapper.xml b/ruoyi-system/src/main/resources/mapper/quot/QuotMapper.xml index 11c1048..a2aa128 100644 --- a/ruoyi-system/src/main/resources/mapper/quot/QuotMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/quot/QuotMapper.xml @@ -16,6 +16,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -28,6 +29,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -64,6 +66,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + @@ -83,8 +87,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + @@ -100,10 +107,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select a.quot_id, a.quot_code,a.quot_jsw_code, a.quot_salesman_code, a.quot_salesman_bm, a.quot_salesman_name, a.quot_customer_bm, - a.quot_customer_name,a.quot_salesman_dept_id, a.quot_salesman_dept_name, a.quot_address, + a.quot_customer_name,a.quot_salesman_dept_id, a.quot_salesman_dept_name, a.quot_address, a.quot_contacts, a.quot_phone, a.quot_inquiry_date, a.quot_project, a.quot_quotation_date, a.quot_quotation_from, a.quot_quotation_require, a.quot_feedback_explanation, a.quot_quantity, a.quot_total_price, - a.quot_check_user_name, u2.nick_name quot_check_user_nickname, a.quot_approval_status, + a.quot_check_user_name, u2.nick_name quot_check_user_nickname, a.quot_approval_status,a.quot_materials_count, a.quot_lv_price,a.quot_tong_price,a.quot_matprice_diff,a.quot_print,u3.nick_name quot_print_user_name, a.create_by, a.create_time, a.update_by, a.update_time, u.nick_name create_name, @@ -119,7 +126,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" h.quot_hj_code,h.quot_hj_pricing_date, h.quot_hj_remark, - a.quot_jsw_approval_status,a.quot_oa_approval_status + a.quot_jsw_approval_status,a.quot_oa_approval_status,a.quot_oa_approval_remark from quot a @@ -131,12 +138,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and quot_code like concat('%', #{quotCode}, '%') and quot_customer_name like concat('%', #{quotCustomerName}, '%') and quot_project like concat('%', #{quotProject}, '%') + and quot_salesman_name like concat('%', #{quotSalesmanName}, '%') and quot_print = #{quotPrint} and quot_approval_status = #{quotApprovalStatus} ${params.dataScope} - order by a.update_time desc + order by a.quot_code desc select a.quot_id, a.quot_code,a.quot_jsw_code, a.quot_salesman_code, a.quot_salesman_bm, a.quot_salesman_name, a.quot_customer_bm,a.quot_customer_name, - a.quot_salesman_dept_id, a.quot_salesman_dept_name, a.quot_address, a.quot_phone, a.quot_inquiry_date, + a.quot_salesman_dept_id, a.quot_salesman_dept_name, a.quot_address, a.quot_contacts, a.quot_phone, a.quot_inquiry_date, a.quot_project, a.quot_quotation_date, a.quot_quotation_from, a.quot_quotation_require, a.quot_feedback_explanation, a.quot_quantity, a.quot_total_price, a.quot_check_user_name, u2.nick_name quot_check_user_nickname, a.quot_approval_status, - a.quot_lv_price,a.quot_tong_price,a.quot_matprice_diff,a.quot_print,u3.nick_name quot_print_user_name, + a.quot_materials_count,a.quot_lv_price,a.quot_tong_price,a.quot_matprice_diff,a.quot_print,u3.nick_name quot_print_user_name, a.create_by, a.create_time, a.update_by, a.update_time, a.quot_jsxz_standard,a.quot_jsxz_approval_status,a.quot_jsxz_chapter, @@ -163,7 +171,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" h.quot_hj_code,h.quot_hj_pricing_date, h.quot_hj_remark, - a.quot_jsw_approval_status,a.quot_oa_approval_status, + a.quot_jsw_approval_status,a.quot_oa_approval_status,a.quot_oa_approval_remark, b.mat_id as sub_mat_id, b.mat_xingh as sub_mat_xingh, b.mat_guig as sub_mat_guig, b.mat_diany as sub_mat_diany, b.mat_standard as sub_mat_standard, b.mat_danw as sub_mat_danw, b.mat_sl as sub_mat_sl, @@ -171,9 +179,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" b.mat_matprice as sub_mat_matprice, b.mat_price as sub_mat_price, b.mat_quot_price as sub_mat_quot_price, + + b.mat_quot_tp as sub_mat_quot_tp, b.mat_quot_allPrice as sub_mat_quot_allPrice, b.mat_matprice_diff as sub_mat_matprice_diff, + b.xh as sub_xh, + b.number as sub_number, + b.quot_id as sub_quot_id from quot a left join quot_material b on b.quot_id = a.quot_id @@ -207,6 +220,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" quot_salesman_dept_id, quot_salesman_dept_name, quot_address, + quot_contacts, quot_phone, quot_inquiry_date, quot_project, @@ -218,6 +232,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" quot_total_price, quot_check_user_name, quot_approval_status, + quot_materials_count, quot_lv_price, quot_tong_price, quot_matprice_diff, @@ -253,6 +268,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{quotSalesmanDeptId}, #{quotSalesmanDeptName}, #{quotAddress}, + #{quotContacts}, #{quotPhone}, #{quotInquiryDate}, #{quotProject}, @@ -264,6 +280,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{quotTotalPrice}, #{quotCheckUserName}, #{quotApprovalStatus}, + #{quotMaterialsCount}, #{quotLvPrice}, #{quotTongPrice}, #{quotMatpriceDiff}, @@ -289,6 +306,52 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + insert into sys_oa_quot + + user_id, + department_id, + submission_time, + quot_id, + quot_code, + quot_salesman_name, + quot_customer_name, + quot_address, + quot_phone, + quot_inquiry_date, + quot_project, + quot_quotation_require, + quot_lv_price, + quot_tong_price, + quot_matprice_diff, + create_time, + isFinish, + + + #{userId}, + #{departmentId}, + #{submissionTime}, + #{quotId}, + #{quotCode}, + #{quotSalesmanName}, + #{quotCustomerName}, + #{quotAddress}, + #{quotPhone}, + #{quotInquiryDate}, + #{quotProject}, + #{quotQuotationRequire}, + #{quotLvPrice}, + #{quotTongPrice}, + #{quotMatpriceDiff}, + #{createTime}, + #{isFinish}, + + + update quot @@ -302,6 +365,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" quot_salesman_dept_id = #{quotSalesmanDeptId}, quot_salesman_dept_name = #{quotSalesmanDeptName}, quot_address = #{quotAddress}, + quot_contacts = #{quotContacts}, quot_phone = #{quotPhone}, quot_inquiry_date = #{quotInquiryDate}, quot_project = #{quotProject}, @@ -313,6 +377,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" quot_total_price = #{quotTotalPrice}, quot_check_user_name = #{quotCheckUserName}, quot_approval_status = #{quotApprovalStatus}, + quot_materials_count = #{quotMaterialsCount}, quot_lv_price = #{quotLvPrice}, quot_tong_price = #{quotTongPrice}, quot_matprice_diff = #{quotMatpriceDiff}, @@ -368,6 +433,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + insert into sys_oa_quot_material( mat_id, mat_xingh, mat_guig, mat_diany,mat_standard, mat_danw, mat_sl,mat_remark, quot_id,xh,number,mat_matprice,mat_price,mat_quot_price,mat_quot_allPrice,mat_matprice_diff) values + + ( #{item.matId}, #{item.matXingh}, #{item.matGuig}, #{item.matDiany}, #{item.matStandard}, #{item.matDanw}, cast(#{item.matSl,jdbcType=DECIMAL} as decimal(18,3)),#{item.matRemark}, #{item.quotId}, #{item.xh}, #{item.index}, cast(#{item.matMatprice,jdbcType=DECIMAL} as decimal(18,3)), cast(#{item.matPrice,jdbcType=DECIMAL} as decimal(18,3)), cast(#{item.matQuotPrice,jdbcType=DECIMAL} as decimal(18,3)),cast(#{item.matQuotAllPrice,jdbcType=DECIMAL} as decimal(18,3)), cast(#{item.matMatpriceDiff,jdbcType=DECIMAL} as decimal(18,3))) + + + + diff --git a/ruoyi-system/src/main/resources/mapper/redBook/OARedBookMapper.xml b/ruoyi-system/src/main/resources/mapper/redBook/OARedBookMapper.xml index e0fe44b..9efe560 100644 --- a/ruoyi-system/src/main/resources/mapper/redBook/OARedBookMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/redBook/OARedBookMapper.xml @@ -178,7 +178,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" convert(decimal,convert(float,A.红本价格)) price,convert(varchar(10),B.date_0,23) pricedate from [rb_product_price] A left join rb_productVersion B on A.version_uid_0=B.uid_0 - where A.型号 = #{name_1} and A.规格 = #{spec} + where A.型号 = #{name_1} and A.规格 = #{spec} and UPPER(A.电压等级) = #{voltage} and B.uid_0 = #{uid_0} and (B.sta_0=1 or sta_0=0) @@ -209,7 +209,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ${params.dataScope} - order by a.update_time desc + order by a.quotCode desc @@ -270,4 +270,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" )a order by date_0 desc + + diff --git a/ruoyi-system/src/main/resources/mapper/technicalConfirm/QuotJsqrMapper.xml b/ruoyi-system/src/main/resources/mapper/technicalConfirm/QuotJsqrMapper.xml index 1fd64db..0054bf5 100644 --- a/ruoyi-system/src/main/resources/mapper/technicalConfirm/QuotJsqrMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/technicalConfirm/QuotJsqrMapper.xml @@ -114,7 +114,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - order by a.update_time desc + order by a.quot_jsqr_code desc