Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • A azeero.group
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 40
    • Issues 40
    • List
    • Boards
    • Service Desk
    • Milestones
  • Deployments
    • Deployments
    • Releases
  • Packages & Registries
    • Packages & Registries
    • Infrastructure Registry
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar
  • Oliver
  • azeero.group
  • Issues
  • #277

Closed
Open
Created Mar 23, 2020 by Oliver@ohonigMaintainer

Abhol/Zustellservice

  1. Bitte bei der Benutzerverwaltung
 alter table person add collectdeliverDistance int(11);

einblenden mit:

[checkbox] Ich möchte beim Zustell und Lieferservice mitmachen. wenn checkbox da: Meine max. Distanz der Abholung oder Zustellung ist: collectdeliverDistance

wenn collectdeliverDistance gesetzt ist dann wird automatisch die checkbox gesetzt. bei uncheck der checkbox kommt NULL in collectdeliverDistance

  1. Bitte bei https://www.mygood.at/de/shop oben vor der Produktsuche eine eigene Liste anzeigen: "Mitnahme/Abhol/Lieferservice", die Liste dazu bekommst du aus einer Funktion:
CREATE DEFINER=`root`@`localhost` PROCEDURE `searchUserCollectDeliver`(json MEDIUMTEXT,OUT json_return MEDIUMTEXT)
json-input: userid
mit json_return als:
[{"cds_seq_id":xy,"opd_seq_id":xy,"fromLocation":{"text":xy,"lat":lat,"lng":lng},"toLocation":{"text":xy,"lat":lat,"lng":lng},"status":"text"},..]
status .. OPEN,EXECUTE,READY

Darstellung in der Liste von "fromLocation.text und toLocation.text" und ein Button "Übernehme Fahrt" wenn der status "OPEN" ist. Darstellung in der Liste von "fromLocation.text und toLocation.text" und ein 2 Buttons "Breche Fahrt vor Antritt ab" und "Fahrt abgeschlossen" wenn der status "EXECUTE" ist. Darstellung von "Danke für die Fahrt" wenn der status "READY" ist.

bei "Übernehme Fahrt" wird die Funktion makeCollectDeliver(json MEDIUMTEXT,OUT json_return MEDIUMTEXT) aufgerufen und die userid,cds_seq_id,opd_seq_id und status "EXECUTE" übergeben.

bei "Breche Fahrt vor Antritt ab" wird die Funktion makeCollectDeliver(json MEDIUMTEXT,OUT json_return MEDIUMTEXT) aufgerufen und die userid,cds_seq_id,opd_seq_id und status "CANCEL" übergeben.

bei "Fahrt abgeschlossen" wird die Funktion makeCollectDeliver(json MEDIUMTEXT,OUT json_return MEDIUMTEXT) aufgerufen und die userid,cds_seq_id,opd_seq_id und status "READY" übergeben.

  1. Bitte das searchUserCollectDeliver periodisch jede Minute aufrufen um die aktuelle Liste zu holen

DB Modell-Teil:

DELIMITER ;
alter table person add collectdeliverDistance int(11);
#
alter table collective_distribution add FOREIGN KEY (fdelivery_near_cdp_seq_id) REFERENCES coll_dist_product(seq_id);
alter table collective_distribution add FOREIGN KEY (fdelivery_regi_cdp_seq_id) REFERENCES coll_dist_productseq_id);
alter table collective_distribution add FOREIGN KEY (fdelivery_nati_cdp_seq_id) REFERENCES coll_dist_product(seq_id);
alter table collective_distribution add FOREIGN KEY (fdelivery_inte_cdp_seq_id) REFERENCES coll_dist_product(seq_id);
#
CREATE TABLE collectdeliverService (
  seq_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  fperson_contact_seq_id INT NOT NULL,
  # der die Fahrt übernimmt
  fopd_seq_id INT NOT NULL,
  # die übernommene Bestellung aus order_product_details
  statustype VARCHAR(10) NOT NULL,
  # EXECUTE,READY
  createdAt datetime,
  updatedAt datetime,
  FOREIGN KEY (fperson_contact_seq_id) REFERENCES person(seq_id),
  FOREIGN KEY (fopd_seq_id) REFERENCES order_product_details(seq_id)
); 
ALTER TABLE `azeero`.`collectdeliverService` ADD UNIQUE INDEX `collectdeliverService_u1` (`fopd_seq_id`, `statustype`);
#
DELIMITER $$
DROP procedure IF EXISTS `searchUserCollectDeliver` $$
USE `azeero`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `searchUserCollectDeliver`(json MEDIUMTEXT,OUT json_return MEDIUMTEXT)
ThisSP:BEGIN
DECLARE pos INT DEFAULT NULL;
DECLARE json_text MEDIUMTEXT;
#
DECLARE finished INTEGER DEFAULT 0;
DECLARE cursor_dist CURSOR FOR 
 SELECT
 CONCAT(
 '{"cds_seq_id":',IFNULL(cds.seq_id,-1),',',
 '"opd_seq_id":',opd.seq_id,',',
 '"fromLocation":{"name":"',cd.name,' ',cd.address,'",",lat:"',cd.lat,',"lng":',cd.lng,'},',
 '"toLocation":{"name":"',p.surname,' ',p.address,'",",lat:"',p.lat,',"lng":',p.lng,'},',
 '"status":"',IFNULL(cds.statustype,'OPEN'),'"',
 '}') json
 # status .. OPEN,EXECUTE,READY
 FROM order_product_details opd LEFT JOIN collectdeliverService cds ON cds.fopd_seq_id = opd.seq_id,collective_distribution cd,person p
 WHERE opd.sum_order_status_kz = 'ABH'
 AND odp.fcollective_distribution_seq_id = cd.seq_id 
 AND EXISTS (
 # Nahe Zustellung gewählt
  SELECT 1 FROM order_products op, coll_dist_product cdp 
  WHERE cd.fdelivery_near_cdp_seq_id = cdp.seq_id
  AND cdp.fproduct_seq_id = op.fproduct_seq_id
  AND op.forder_product_details = opd.seq_id
 )
 AND p.seq_id = @userid
 AND round(azeero_distance(p.lat,p.lng,cd.lat,cd.lng),2) < IFNULL(p.collectdeliverDistance,0)
 ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
#
DECLARE exit handler for sqlexception, sqlwarning
BEGIN
 GET DIAGNOSTICS CONDITION 1 @error = MESSAGE_TEXT;
 SET json_return = CONCAT('{"error":"',@error,'","json":"',json,'"pos":"',pos,'}');
 ROLLBACK;
END;
#
SET @userid = (SELECT CONVERT(JSON_EXTRACT(json, "$.userid"),SIGNED));
#
IF (@userid < 1) THEN
LEAVE ThisSP;
END IF;
# 
SET json_return = '[';
OPEN cursor_dist;
cursor_dist_loop: LOOP
 FETCH cursor_dist INTO json_text;
 SET json_return = CONCAT(json_return,',',json_text);
 IF finished = 1 THEN 
  LEAVE cursor_dist_loop;
 END IF;
END LOOP cursor_dist_loop;
CLOSE cursor_dist;
SET json_return = CONCAT(json_return,']');
#
END$$

DELIMITER ;

DROP procedure IF EXISTS `makeCollectDeliver`;
DELIMITER $$
USE `azeero`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `makeCollectDeliver`(json MEDIUMTEXT,OUT json_return MEDIUMTEXT)
ThisSP:BEGIN
DECLARE pos INT DEFAULT NULL;
#
DECLARE exit handler for sqlexception, sqlwarning
BEGIN
 GET DIAGNOSTICS CONDITION 1 @error = MESSAGE_TEXT;
 SET json_return = CONCAT('{"error":"',@error,'","json":"',json,'"pos":"',pos,'}');
 ROLLBACK;
END;
#
SET @userid = (SELECT CONVERT(JSON_EXTRACT(json, "$.userid"),SIGNED));
SET @status = (SELECT JSON_UNQUOTE(JSON_EXTRACT(json, "$.status")));
#EXECUTE,CANCEL,READY
SET @cds_seq_id = (SELECT CONVERT(JSON_EXTRACT(json, "$.cds_seq_id"),SIGNED));
SET @opd_seq_id = (SELECT CONVERT(JSON_EXTRACT(json, "$.opd_seq_id"),UNSIGNED));
#
IF (@userid < 1) THEN
LEAVE ThisSP;
END IF;
# 
CALL START_TRANSACTION(@userid);
IF (@cds_seq_id = -1) THEN
 SET pos = 1;
 INSERT INTO collectdeliverService (
  fperson_contact_seq_id,
  # der die Fahrt übernimmt
  fopd_seq_id,
  # die übernommene Bestellung aus order_product_details
  statustype,
  # EXECUTE,READY
  createdAt
 ) VALUES (
  @userid,
  @opd_seq_id,
  'EXECUTE',
  NOW()
 )
 ;
ELSEIF @status = 'CANCEL' THEN
 SET pos = 2;
 DELETE FROM collectdeliverService WHERE fperson_contact_seq_id = @userid AND fopd_seq_id = @opd_seq_id
 ;
ELSEIF @status = 'READY' THEN
 SET pos = 3;
 UPDATE collectdeliverService set statustype = 'READY' WHERE fperson_contact_seq_id = @userid AND fopd_seq_id = @opd_seq_id
 ;
END IF;

SET json_return = CONCAT('{"status":"OK"}');
CALL DO_COMMIT;
END$$

DELIMITER ;
Edited Mar 23, 2020 by Oliver
Assignee
Assign to
Time tracking